Det hele fungerer som det skal, med undtagelse af billede-funktionen som ikke er blevet implementeret endnu! Jeg har forgæves søgt dette forum igennem flere gange, og har da også prøvet en masse af svarene af.. Men synes på ingen måde jeg kunne få det til at fungere efter hensigten :/
Jeg vil gerne have det lavet som vist på tegningen med en "gennemse" knap, hvor man så kan vedhæfte et billed til produktet.. Dette billede skal gerne blive uploadet til en mappe i det man trykker på post og samtidigt skal adressen/titlen til billedet indsættes i databasen under tabelrækken "billede"
Når dette er gjort gemmer du bare $newname i din database i feltet billede. Vær ommærksom på at dette er stien til billede som du skal referer til i din <img src=, hvis du vil tilknytte en titel til billede skal du have et felt mere, med mindre du benytter "name".
Vær også opmærksom på hvis du retter koden til og benytter det i din nuværende form, skal du huske dette skal med ved form indstillingerne "enctype="multipart/form-data".
Kan ikke rigtig få den der til at virke efter hensigten desværre :/ Altså, jeg kan godt finde ud af at uploade et billed til en mappe fx.. Men jeg vil jo gerne have gjort sådan at det bliver uploadet samtidigt med at man poster data til tabellen, så der kun er én knap til at submitte (ligesom på billedet) :S
I øvrigt ser min kode ud som nedenstående (så er det nok lidt lettere at hjælpe mig)
Jeg har prøvet at gøre som du skrev ziron, men uden resultat :( Man kan stadig tilføje en vare osv, men rækken "billede" i tabellen står bare tom uanset hvad jeg prøver at vedhæfte som billede.. Hvad gør jeg galt?
if ($_POST['referer'] == 'post_varegruppe') { mysql_query("INSERT INTO varegruppe (navn) VALUES ('$_POST[navn]')") or die(mysql_error()); header("Location: ../index.php"); }
if ($_POST['referer'] == 'post_kategori') { mysql_query("INSERT INTO vare (type, parent) VALUES ('$_POST[type]', '$_POST[parent]')") or die(mysql_error()); header("Location: ../index.php"); }
//define a maxim size for the uploaded images in Kb define ("MAX_SIZE","100");
//This function reads the extension of the file. It is used to determine if the file is an image by checking the extension. function getExtension($str) { $i = strrpos($str,"."); if (!$i) { return ""; } $l = strlen($str) - $i; $ext = substr($str,$i+1,$l); return $ext; }
//This variable is used as a flag. The value is initialized with 0 (meaning no error found) //and it will be changed to 1 if an errro occures. //If the error occures the file will not be uploaded. $errors=0; //checks if the form has been submitted if(isset($_POST['Submit'])) { //reads the name of the file the user submitted for uploading $image=$_FILES['image']['name']; //if it is not empty if ($image) { //get the original name of the file from the clients machine $filename = stripslashes($_FILES['image']['name']); //get the extension of the file in a lower case format $extension = getExtension($filename); $extension = strtolower($extension); //if it is not a known extension, we will suppose it is an error and will not upload the file, //otherwise we will do more tests if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) { //print error message echo '<h1>Unknown extension!</h1>'; $errors=1; } else { //get the size of the image in bytes //$_FILES['image']['tmp_name'] is the temporary filename of the file //in which the uploaded file was stored on the server $size=filesize($_FILES['image']['tmp_name']);
//compare the size with the maxim size we defined and print error if bigger if ($size > MAX_SIZE*1024) { echo '<h1>You have exceeded the size limit!</h1>'; $errors=1; }
//we will give an unique name, for example the time in unix time format $image_name=time().'.'.$extension; //the new name will be containing the full path where will be stored (images folder) $newname="images/".$image_name; //we verify if the image has been uploaded, and print error instead $copied = copy($_FILES['image']['tmp_name'], $newname); if (!$copied) { echo '<h1>Copy unsuccessfull!</h1>'; $errors=1; }}}}
//If no errors registred, print the success message if(isset($_POST['Submit']) && !$errors) { echo "<h1>File Uploaded Successfully! Try again!</h1>"; }
if ($_POST['referer'] == 'post_vare') { mysql_query("INSERT INTO kategori (name, ny, billede, beskrivelse, status, pris, parent) VALUES ('$_POST[name]', '$_POST[ny]', '$newname', '$_POST[beskrivelse]', '$_POST[status]', '$_POST[pris]', '$_POST[parent]')") or die(mysql_error()); header("Location: ../index.php"); } ?>
Fejlen ligger i upload af billede.. Har både prøvet på localhost og webserver, og ingen af steder er den i stand til at udskrive $newname.. Får blot en blank side :S
Nope, der kommer slet ingen fejlmeddelelser.. Den udskriver ingen af <h1>'erne, så det virker lidt somom den slet ikke kører scriptet af en eller anden grund.. Jeps, har skriveadgang til mappen med billederne :/
Jeps okay.. Det var der hele fejlen lå.. Scriptet blev slet ikke kørt som jeg mistænkte, så jeg prøvede mig frem med en if ($_POST['referer'] == 'post_vare') i stedet for og det gav pote..
Tak for hjælpen! Smid et svar og du skal få points ;)
Heh nej, den mulighed havde jeg også stiret mig fuldstændig blind over for :)
Men jeps, nu kører det i hvert fald nogenlunde efter hensigten.. Eneste problem er at hvis man vælger at uploade et billede, der er for stort.. Så udskriver den godt nok en fejlmeddelelse og rækken bliver ikke oprettet i taballen.. Men billedet bliver stadig uploadet :/ Det kæmper jeg lidt med at fixe
Altså så vil jeg bare gerne have at den udskriver fejlmeddelsen som den gør nu (You have exceeded the size limit!) og at den så lader være med at uploade billedet, samt skriver noget til tabellen :)
Okay så laver du bare den if sætning hvor du gemmer til databasen om til
if ($_POST['referer'] == 'post_vare')
om til :
if (($_POST['referer'] == 'post_vare') && (!$errors))
Og det her:
//compare the size with the maxim size we defined and print error if bigger if ($size > MAX_SIZE*1024) { echo '<h1>You have exceeded the size limit!</h1>'; $errors=1; }
//we will give an unique name, for example the time in unix time format $image_name=time().'.'.$extension; //the new name will be containing the full path where will be stored (images folder) $newname="images/".$image_name; //we verify if the image has been uploaded, and print error instead $copied = copy($_FILES['image']['tmp_name'], $newname); if (!$copied) { echo '<h1>Copy unsuccessfull!</h1>'; $errors=1; }}}}
om til:
//compare the size with the maxim size we defined and print error if bigger if ($size > MAX_SIZE*1024) { echo '<h1>You have exceeded the size limit!</h1>'; $errors=1;
//we will give an unique name, for example the time in unix time format $image_name=time().'.'.$extension; //the new name will be containing the full path where will be stored (images folder) $newname="images/".$image_name; //we verify if the image has been uploaded, and print error instead $copied = copy($_FILES['image']['tmp_name'], $newname); if (!$copied) { echo '<h1>Copy unsuccessfull!</h1>'; $errors=1; }}}}}
Det virkede ikke rigtig efter hensigten, faktisk langt fra desværre..
Hvis jeg prøvede at oprette en vare med tilhørende billede, hvor billedet ikke var for stort skrev den godt nok data til tabellen og skrev at billedet var uploadet.. Men det blev ikke uploadet..
Hvis jeg derimod prøvede at oprette en vare med tilhørende billede, hvor billedet VAR for stort skrev den fejlbeskeden med "exceeded size limit", men her valgte den så alligevel både at uploade billedet og skrive data til tabellen :o
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.