Hejsan igen, snubben med problem är tillbaka.
Nu behöver jag hjälp med att skicka in en bild i en databas. Jag vet att de flesta anser att det är bättre att skicka in URL:en i databasen, men jag vill ha bilden i databasen eftersom det underlättar i efterhand =)
Jag kan i n g e n t i n g om detta, så jag behöver hjälp från grund och botten med både UPDATE och INSERT INTO. Jag har ganska stor vana av att skicka in vanlig data i databaser så det är inga problem med databasuppkopplingar osv.
Vad behöver jag för fält i databasen, och vilken datatyp?
Hur döper jag om bilderna, kollar maxsize 20kb och att det verkligen är en bild som skickas in? Jag behöver hjälp med allt!
Jag tänkte namnge bilderna efter $_SESSION["nick"], t ex:
$_SESSION["nick"] = "Jesper";
bildens namn = Jesper.jpg
Jag gjorde något liknande för ett par veckor sdan och har för mig att det blev något strul, just nu kommer jag inte ihåg vad.. det löste sig till slut i alla fall. Säg till om det blir problem så kan försöka leta upp det var..
Tackar tackar! Mycket fin länk, men jag körde fast på samma ställe som jag kört fast på förut:
$result=MYSQL_QUERY("INSERT INTO binary_data (description,bin_data,filename,filesize,filetype) ".
"VALUES ('$form_description','$data','$form_data_name','$form_data_size','$form_data_type')");
Vad skråen är det där? Behöver man verkligen så många fält för att ladda upp en bild..? Jag är nybörjare inom PHP så jag behöver lite mer nogrann förklaring om det är möjligt :/
De två sista raderna här är den informationen som sparas i fälten filesize och filetype (fast det kanske står image/gif eller något annat beroende på vilken filtyp det är). Det behövs för att webbläsaren ska vet vilken typ av fil den tar emot. Saknas filetype (och filesize) kommer bilden antagligen bara att visas som en massa tecken.
...Hur kollar jag så att det verkligen är en bild som skickas upp?
Hur begränsar jag maxfilesize?
Du borde kunna begränsa antalet filändelser som du godtar. Om någon skickar ett worddokument med ändelsen jpg tex så blir det nog visserligen ingen snygg bild, men dokumentet blir inte läsbart heller för servern tror att det är en bild.
Filstorleken får du kolla innan uppladdningen, och om den överstiger det du bestämt som max, så skickar du felmeddelande, annars sker uppladdning.
...Hur kollar jag så att det verkligen är en bild som skickas upp?
Hur begränsar jag maxfilesize?
Du borde kunna begränsa antalet filändelser som du godtar. Om någon skickar ett worddokument med ändelsen jpg tex så blir det nog visserligen ingen snygg bild, men dokumentet blir inte läsbart heller för servern tror att det är en bild.
Filstorleken får du kolla innan uppladdningen, och om den överstiger det du bestämt som max, så skickar du felmeddelande, annars sker uppladdning.
Du borde kunna begränsa antalet filändelser som du godtar. Om någon skickar ett worddokument med ändelsen jpg tex så blir det nog visserligen ingen snygg bild, men dokumentet blir inte läsbart heller för servern tror att det är en bild.
Filstorleken får du kolla innan uppladdningen, och om den överstiger det du bestämt som max, så skickar du felmeddelande, annars sker uppladdning.
Ok, låter vettigt. Men hur?
Om du har kommit så långt att du kan skriva
$result=MYSQL_QUERY("INSERT INTO binary_data (description,bin_data,filename,filesize,filetype) ".
"VALUES ('$form_description','$data','$form_data_name','$form_data_size','$form_data_type')");
så har du ju såväl filnamnet som storleken i två variabler. Innan du lägger in dem i ovanstående kodnutt så kollar du värdena.
Du hittar filändelsen med reguljära uttryck, (eller möjligen med substring).
Nu har jag lyckats lösa alla problem utom ett:
Hur gör jag för att man ska skickas tillbaka om man inte har en bildfil? Jag förstår inte vad ni skriver, ni får vara mkt mer detaljerade tyvärr :/
elseif($_FILES['form_data']['type'] != "image"){
session_register("error");
$error = "<span style='color: red'>Det måste vara en BILD du laddar upp.</span><br><br>";
$_SESSION["error"] = $error;
header("Location: ../foto.php?user=$nick");
}
Det här fungerar inte iallafall, men bättre än så kan jag inte åstadkomma utan hjälp :/
Tack så jättemycket för alla kanonsvar, det har hjälpt jättemycket!
Nu har jag lyckats lösa alla problem utom ett:
Hur gör jag för att man ska skickas tillbaka om man inte har en bildfil? Jag förstår inte vad ni skriver, ni får vara mkt mer detaljerade tyvärr :/
elseif($_FILES['form_data']['type'] != "image"){
session_register("error");
$error = "<span style='color: red'>Det måste vara en BILD du laddar upp.</span><br><br>";
$_SESSION["error"] = $error;
header("Location: ../foto.php?user=$nick");
}
Tillbaka vart? Till uppladdningsformuläret? :q
Ligger det i egen fil eller i samma som din omhändertagande kod? :q
OM du vill till uppladdningsformuläret som ligger i egen fil (form.php) så ändra din header till:
header ("Location: form.php"); //Eller hur nu URL:n ser ut när sidan laddas första gången.
OM du vill till uppladdningsformuläret som ligger i samma fil, och du hamnar i den omhändertagande koden om någon viss GET eller POST-variabel är satt, tex 'ladda', ändra din header till hur den ser ut när sidan laddas första gången, men lägg till raden:
unset($_POST['ladda']); före header-raden, alltså:
unset($_POST['ladda']);
header ("Location: photo.php"); //Eller hur nu URL:n ser ut när sidan laddas första gången.
(Byt POST mot GET om du använder GET i formen istället)
if (($uploadfile_type != "image/gif") && ($uploadfile_type != "image/jpeg") && ($uploadfile_type != "image/pjpeg"))
{
$error_msg .= "Your file is not a web graphic (GIF/JPG)";
}