27. maj 2006 - 14:54
Der er
40 kommentarer og 1 løsning
Upload image
Jeg har fået dette script til at oploade billeder til en mysql database... men et eller andet går galt for mig?! Kan I se hvad det er? Umiddelbart ser det ud til at der er for mange: mysql_connect ("host.... osv) Og burde der ikke stå noget mellem de to "" i sætningen: <form action="" method="post" God fornøjelse :-) <? mysql_connect("localhost", "bruger", "pass"); mysql_select_db("database"); // eller include config.php ?> <form action="" method="post" enctype="multipart/form-data" name=""> <b>Titel </b><input type="text" name="title1"> <p> <b>Tekst</b><br> <textarea name="text1" cols="50" rows="30"></textarea> <p> <input type="file" name="image"> <input type="submit" name="upload" value="upload"> <p> </p> </form> <? if(isset($_POST['upload'])){ mysql_connect("localhost", "bruger", "pass"); mysql_select_db("site"); $file = fopen($_FILES['image']['tmp_name'], "r"); $image = addslashes(fread($file, filesize($_FILES['image']['tmp_name']))); $text = $_POST["text1"]; $title = $_POST["title1"]; mysql_query("insert into images values('null','$image','$text','$title')") or die(mysql_error()); echo "Tekst og billede er uploaded!"; } ?> <? mysql_close(); ?>
Annonceindlæg fra Novataris
Du kan godt fjerne den øverste: <? mysql_connect("localhost", "bruger", "pass"); mysql_select_db("database"); // eller include config.php ?> Den bruges som sådan ikke. Og som du selv er inde på, så kan du tilføje: <form action="<?=$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name=""> Dog bør du nok teste om billedet er der. Prøv lidt debug som f.eks. inde i koden: if(isset($_POST['upload'])){ og skriv: echo '<pre>'; print_r($_FILES); echo '</pre>'; exit();
Aha... :-) Hvad gør sætningen: <form action="<?=$_SERVER['PHP_SELF'];?>" .. altså php_self?????
Jeg har lige flyttet lidt rundt på koden, test denne kode: <? if(isset($_POST['upload'])) { mysql_connect("localhost", "bruger", "pass"); mysql_select_db("site"); $file = fopen($_FILES['image']['tmp_name'], "r"); $image = addslashes(fread($file, filesize($_FILES['image']['tmp_name']))); $text = $_POST["text1"]; $title = $_POST["title1"]; mysql_query("insert into images values('null','$image','$text','$title')") or die(mysql_error()); echo "Tekst og billede er uploaded!"; } mysql_close(); ?> <form action="<?=$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name=""> <b>Titel </b><input type="text" name="title1"> <p> <b>Tekst</b><br> <textarea name="text1" cols="50" rows="30"></textarea> <p> <input type="file" name="image"> <input type="submit" name="upload" value="upload"> <p> </p> </form>
<form action="<?=$_SERVER['PHP_SELF'];?>" gør at al form-info'en bliver sendt til siden selv
Jamen det virker jo fint nu... men hvad skal jeg så skrive hvis jeg har fx 3 billeder - med hver sin titel og tekst? Er det bare at kopiere formen og sæt den ind 3 gange? Og kalæde dem: image2 text2 title2 image3 text3 osv. osv.??
ja, men ikke <form> tags'ne, bare indmaden <b>Titel </b><input type="text" name="title1"> <p> <b>Tekst</b><br> <textarea name="text1" cols="50" rows="30"></textarea> <p> <input type="file" name="image"> <input type="submit" name="upload" value="upload"> <p> </p> den del. så skal du selvfølgelig give dem forskellige name.
Jeg har gjort følgende: <? if(isset($_POST['upload'])) { mysql_connect("localhost", "XXX", "XXX"); mysql_select_db("XXX"); $file = fopen($_FILES['image']['tmp_name'], "r"); $image = addslashes(fread($file, filesize($_FILES['image']['tmp_name']))); $text = $_POST["text"]; $title = $_POST["title"]; mysql_query("insert into image values('null','$image','$text','$title')") or die(mysql_error()); echo "Tekst og billede er uploaded!"; } mysql_close(); ?> <form action="<?=$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name=""> <b>Titel</b><input type="text" name="title1"> <p> <b>Tekst</b><br> <textarea name="text1" cols="50" rows="30"></textarea> <p> <input type="file" name="image"> <p> </p> <b>Titel</b><input type="text" name="title"> <p> <b>Tekst</b><br> <textarea name="text" cols="50" rows="30"></textarea> <p> <input type="file" name="image"> <input type="submit" name="upload" value="upload"> <p> </p> </form> Når jeg kører scriptet, er det kun den sidste forms tekst, titel og billede der bliver oploaded til databasen? Jeg har fjernet 1´tallet i: $text = $_POST["text1"]; $title = $_POST["title1"];
når du gør som du viser burde du gerne kunne hente det hele ud med $text = $_POST["text"]; $title = $_POST["title"]; $text1 = $_POST["text1"]; $title1 = $_POST["title1"]; men du skal jo også skrive <input type="file" name="image1"> det ene sted
Nu har jeg skrevet dette - det virker ikke. Det er kun den sidste "form" der bliver oploaded - kan det have noget at gøre med, at submit knappen ligger der? <? if(isset($_POST['upload'])) { mysql_connect("localhost", "XXX", "XXX"); mysql_select_db("XXX"); $file = fopen($_FILES['image']['tmp_name'], "r"); $image = addslashes(fread($file, filesize($_FILES['image']['tmp_name']))); $text = $_POST["text"]; $title = $_POST["title"]; $text = $_POST["text1"]; $title = $_POST["title1"]; mysql_query("insert into image values('null','$image','$text','$title')") or die(mysql_error()); echo "Tekst og billede er uploaded!"; } mysql_close(); ?> <form action="<?=$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name=""> <b>Titel</b><input type="text" name="title"> <p> <b>Tekst</b><br><textarea name="text" cols="30" rows="10"></textarea> <p> <input type="file" name="image"> <p> </p> <b>Titel</b><input type="text" name="title1"> <p> <b>Tekst</b><br> <textarea name="text1" cols="30" rows="10"></textarea> <p> <input type="file" name="image1"> <input type="submit" name="upload" value="upload"> <p> </p> </form>
Ja, jeg har jo også fjernet den eneste submit knap, så jeg kun skal trykke submit eet sted
Prøv lige denne kode: <? if(isset($_POST['upload'])) { mysql_connect("localhost", "XXX", "XXX"); mysql_select_db("XXX"); for($i = 0; $i < count($_FILES['image']); $i++) { $file = fopen($_FILES['image']['tmp_name'][$i], "r"); $image = addslashes(fread($file, filesize($_FILES['image']['tmp_name'][$i]))); $text = mysql_real_escape_string($_POST["text"][$i]); $title = mysql_real_escape_string($_POST["title"][$i]); mysql_query("insert into image values('null','$image','$text','$title')") or die(mysql_error()); } echo "Tekst og billede er uploaded!"; } mysql_close(); ?> <form action="<?=$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name=""> <b>Titel 1</b><input type="text" name="title[]"> <p> <b>Tekst 1</b><br><textarea name="text[]" cols="30" rows="10"></textarea> <p> <input type="file" name="image[]"> <p> </p> <b>Titel 2</b><input type="text" name="title[]"> <p> <b>Tekst 2</b><br><textarea name="text[]" cols="30" rows="10"></textarea> <p> <input type="file" name="image[]"> <p> </p> <b>Titel 3</b><input type="text" name="title[]"> <p> <b>Tekst 3</b><br><textarea name="text[]" cols="30" rows="10"></textarea> <p> <input type="file" name="image[]"> <p> </p> </form>
Jeg har lige opdaget en fejl... der skal selvfølgelig stå: $text1 = $_POST["text1"]; $title1 = $_POST["title1"]; jeg havde glemt 1´tallerne... Men det gør nu ingen forskel! Det er kun den første form hvis indhold der bliver uploaded til databasen?
Og nok mere præcist denne kode: <? //http://www.eksperten.dk/spm/712121 if(isset($_POST['uploadPics'])) { mysql_connect("localhost", "XXX", "XXX"); mysql_select_db("XXX"); for($i = 0; $i < count($_FILES['image']['name']); $i++) { $file = fopen($_FILES['image']['tmp_name'][$i], "r"); $image = addslashes(fread($file, filesize($_FILES['image']['tmp_name'][$i]))); $text = mysql_real_escape_string($_POST["text"][$i]); $title = mysql_real_escape_string($_POST["title"][$i]); mysql_query("insert into image values('null','$image','$text','$title')") or die(mysql_error()); } echo "Tekst og billede er uploaded!"; mysql_close(); } ?> <form action="<?=$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name=""> <b>Titel 1</b><input type="text" name="title[]"> <p> <b>Tekst 1</b><br><textarea name="text[]" cols="30" rows="10"></textarea> <p> <input type="file" name="image[]"> <p> </p> <b>Titel 2</b><input type="text" name="title[]"> <p> <b>Tekst 2</b><br><textarea name="text[]" cols="30" rows="10"></textarea> <p> <input type="file" name="image[]"> <p> </p> <b>Titel 3</b><input type="text" name="title[]"> <p> <b>Tekst 3</b><br><textarea name="text[]" cols="30" rows="10"></textarea> <p> <input type="file" name="image[]"> <p> </p> <input type="submit" name="uploadPics" value="Upload Billeder"> </form>
JA, DET VIRKER!!!!!! Altså efter jeg indsatte en submit knap :-) Men der bliver samtidigt også oprettet 2 tomme felter. DVS i min database bliver der oprettet 2 tomme linier samtidigt med at der rigtigt nok oprettes 3 linier med de indtastede informationer. Hvorfor det?
Jeg har rettet det. Dette er nok mere præcist: <? //http://www.eksperten.dk/spm/712121 if(isset($_POST['uploadPics'])) { mysql_connect("localhost", "XXX", "XXX"); mysql_select_db("XXX"); for($i = 0; $i < count($_FILES['image']['name']); $i++) { $file = fopen($_FILES['image']['tmp_name'][$i], "r"); $image = addslashes(fread($file, filesize($_FILES['image']['tmp_name'][$i]))); $text = mysql_real_escape_string($_POST["text"][$i]); $title = mysql_real_escape_string($_POST["title"][$i]); if($_FILES['image']['size'][$i] > 0) mysql_query("insert into image values('null','$image','$text','$title')") or die(mysql_error()); } echo "Tekst og billede er uploaded!"; mysql_close(); } ?> <form action="<?=$_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data" name=""> <b>Titel 1</b><input type="text" name="title[]"> <p> <b>Tekst 1</b><br><textarea name="text[]" cols="30" rows="10"></textarea> <p> <input type="file" name="image[]"> <p> </p> <b>Titel 2</b><input type="text" name="title[]"> <p> <b>Tekst 2</b><br><textarea name="text[]" cols="30" rows="10"></textarea> <p> <input type="file" name="image[]"> <p> </p> <b>Titel 3</b><input type="text" name="title[]"> <p> <b>Tekst 3</b><br><textarea name="text[]" cols="30" rows="10"></textarea> <p> <input type="file" name="image[]"> <p> </p> <input type="submit" name="uploadPics" value="Upload Billeder"> </form>
Hvordan har du lavet mysql databasen?Hvordan opsætter man den? ? ?
Jeg tror den er lavet noget nær: Tabelnavn: image Felter: id - int autoincrement image - longblob text - text title - varchar(255) id skal være primary key.
Og clausberg, fik du det til at virke?
Hey... det virker som en drøm :-)
Jeg har sat databasen op næsten som du har skrevet...
text har jeg dog sat til varchar... er det en fejl?
Jeg er ved at prøve at regne ud hvordan jeg så kommer til at se billederne - jeg har fundet et script på
http://www.onlamp.com/pub/a/onlamp/2002/05/09/webdb2.html men ved ikke helt om det dur?
Du kunne bruge noget i stil med: <?php require_once("connect.php"); $imgID = mysql_real_escape_string($_GET['id']); $query = mysql_query("select pic from billeder WHERE id = '".$imgID."' LIMIT 1") or die (mysql_error()); if(mysql_num_rows($query)>0) { $row = mysql_fetch_assoc($query); header("Content-type: image/jpeg"); print $row['pic']; exit (); } ?> virker dog kun til jpeg/jpg/jpe billeder.
Fint... men hvad er connect.php?
Bare en fil som indeholder: <?php mysql_connect("localhost", "XXX", "XXX"); mysql_select_db("XXX"); ?>
Jeg får fejlen: Unknown column 'pic' in 'field list' Skal det hedde select pic??? er der en kommando der hedder "pic"?
select pic from billeder WHERE id = '".$imgID."' LIMIT 1 og print $row['pic']; Skal rettes til. Det er nok: select image from image WHERE id = '".$imgID."' LIMIT 1 og print $row['image'];
Nej desværre... nu sker der ikke noget. Jeg har også haft kig på: <?php // just so we know it is broken error_reporting(E_ALL); // some basic sanity checks if(isset($_GET['image_id']) && is_numeric($_GET['image_id'])) { //connect to the db $link = mysql_connect("localhost", "username", "password") or die("Could not connect: " . mysql_error()); // select our database mysql_select_db("testblob") or die(mysql_error()); // get the image from the db $sql = "SELECT image FROM testblob WHERE image_id=0"; // the result of the query $result = mysql_query("$sql") or die("Invalid query: " . mysql_error()); // set the header for the image header("Content-type: image/jpeg"); echo mysql_result($result, 0); // close the db link mysql_close($link); } else { echo 'Please use a real id number'; } ?> Jeg får blot en fejlmeddelse der siger: 'Please use a real id number'
Du har fejl i: $sql = "SELECT image FROM testblob WHERE image_id=0"; Det skal være: $sql = "SELECT image FROM testblob WHERE image_id='$_GET['image_id']'";
<ole> Skal der ikke læses binært? Så skal der vel bruges "rb" og ikke "r" i fopen ...(?) :) /mvh </bole>
Godt set olebole, det havde jeg faktisk også lavet i noget tidligere kode. Olebole: Offtopic, da du var i Framfab, var der da også en som hed Ralph?
ehhhhhh ... vi havde 6 kontorer i Kbh. på det tidspunkt. Hvad lavede han? Designer, interface developer, arkitekt, 'suit'? ... landsmand? :)
Jeg tror han var noget interface developer, men ikke helt sikkert. Men nevermind! :o)
... der er ét eller andet i tågerne, men jeg kan ikke sætte adresse på i øjeblikket :)
"rb" og ikke "r" i fopen ...???? :-) Øh.... :-) hvor er det lige jeg ændrer det?
Og er der ikke et & for meget i: if(isset($_GET['image_id']) && is_numeric($_GET['image_id'])) {
01. juni 2006 - 08:06
#34
$file = fopen($_FILES['image']['tmp_name'][$i], "r"); skal være: $file = fopen($_FILES['image']['tmp_name'][$i], "rb"); og && er det samme som AND :o) Og det skal være &&, en & betyder call by reference
01. juni 2006 - 16:22
#35
Fopen relaterer sig jo til upload siden... vil det sige, at ved at ændre "r" til "rb", så jeg gemmer billederne i et nyt format? Og vil det så være muligt at se billederne med det script du har foreslået. Kan desværre først teste det i aften.
01. juni 2006 - 18:38
#36
Jeg har nu ændret til "rb" og kan se at billederne bliver gemt binært... men hverken det ene "vis billede" script eller det andet virker... jeg får blot blank skærm
01. juni 2006 - 18:51
#37
Kan det have noget at gøre med den måde jeg har bygget min table op på??? id int(11) nulværdi: nej autoincrement primæary image longblob binary nulværdi: nej text varchar (30) nulværdi: nej title varchar (30) nulværdi: nej
01. juni 2006 - 22:02
#38
Det ser nu rigtigt nok ud... Du må fange mig på MSN, så må vi kigge på det sammen. jakobdo (at) hotmail [dot] com
01. juni 2006 - 22:16
#39
Super - det vil jeg nok gøre. Du har ihvertfald fortjent dine point ;-)... så smid et svar. Og MANGE TAK for hjælpen.
01. juni 2006 - 22:17
#40
Svar!
02. juni 2006 - 11:47
#41
Takker for point.
Vi tilbyder markedets bedste kurser inden for webudvikling