webForumDet fria alternativet

Bilder i databas

12 svar · 354 visningar · startad av Jesper2

Jesper2Medlem sedan dec. 200475 inlägg
#1

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

Om ni förstår =)

Tack på förhand!
// Jesper Ahlin - https://www.jesperahlin.tk

BjuufarenMedlem sedan okt. 2003108 inlägg
#2

Här är en bra början..
http://www.phpbuilder.com/columns/florian19991014.php3

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..

Jesper2Medlem sedan dec. 200475 inlägg
#3

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 :/

Tack så mycket =)

BjuufarenMedlem sedan okt. 2003108 inlägg
#4

Första fältet (description) behövs inte, men vill du att dina besökare ska kunna se bilderna är de andra fälten nog nödvändiga.

När en fil (vilken som helst) skickas från webbservern till webbläsaren är den första informationen som kommer något i den här stilen:

HTTP/1.1 200 OK
Server: Apache 2.0.48 (Win32)
Date: Saturday, 25-Dec-04 02:12:04 GMT
Content-length: 9422
Content-type: text/html

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.

Jesper2Medlem sedan dec. 200475 inlägg
#5

OK, nu börjar jag förstå lite grann här. Har lyckats skicka upp bilder till servern =)

Men ett par frågor återstår:
Hur kollar jag så att det verkligen är en bild som skickas upp?
Hur begränsar jag maxfilesize?

aasahMedlem sedan mars 20033 451 inlägg
#6

Jesper2 skrev:

...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.

Jesper2Medlem sedan dec. 200475 inlägg
#7

aasah skrev:

Jesper2 skrev:

...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.

Ok, låter vettigt. Men hur?

aasahMedlem sedan mars 20033 451 inlägg
#8

Jesper2 skrev:

aasah skrev:

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).

Jesper2Medlem sedan dec. 200475 inlägg
#9

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!

aasahMedlem sedan mars 20033 451 inlägg
#10

Jesper2 skrev:

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)

Detta tar dig till

Jesper2Medlem sedan dec. 200475 inlägg
#11

Tack tack, men jag vet hur man gör för att komma tillbaka ;)
Det jag behöver hjälp med är att kontrollera så att filen verkligen är en b i l d.

UrMeMedlem sedan apr. 2001797 inlägg
#12

Nåt sånt här kanske?

if (($uploadfile_type != "image/gif") && ($uploadfile_type != "image/jpeg") && ($uploadfile_type != "image/pjpeg"))
{ 

$error_msg .= "Your file is not a web graphic (GIF/JPG)"; 
}
Jesper2Medlem sedan dec. 200475 inlägg
#13

Hm, jag har provat en liknande sak, nämligen det här:

elseif($_FILES['form_data']['type'] != "image/jpeg"){

Men då går inte ens bilder igenom :/

$_FILES['form_data']['name'] och allt annat stämmer kanon så det är inte fel på själva uppladdningen. Det är just filtypen som felar :/

Genererad på 376 ms · cache AV · v20260730165559-full.f96bc7eb