Permalänk
Medlem

Uppladdnings problem(PHP)

När jag ska ladda upp ett foto till en mapp på servern och även lägga in filnamnet i databasen men när den ska lägga in filnamnet i databasen så lägger den bara in 0. Den laddar upp bilden som den ska, vad är det för fel?

<?php //Kod för att lägga till genom ett forumlär if(isset($_GET['addnews'])) { ?> Lägg till en nyhet<br /> <form action='news.php?addnews&add' id='add' method='post' enctype='multipart/form-data'> <b>Rubrik:</b><br /> <input type='text' name='rubrik' /><br /> <b>Bild:</b><br /> Fil: <input type="file" name="uplfile"> <b>Innehåll:</b><br /> <textarea name='text' cols='50' rows='15'></textarea><br /> <input type='submit' value='Lägg till nyhet' /> </form> <?php //Då ?addnews=$id&add står i adressfältet kommer följande kod att laddas if(isset($_GET['add'])) { //Lägger in dagens datum i variabeln $datum som ex 1/9-04 $date = date('j/n-y H:i'); //Kod för att ladda upp bild // Mappen där filerna ska hamna $upload_dir = 'files/'; // De tillåtna filtyperna, separerade med komman, utan mellanrum $filetypes = 'jpg,gif,png'; // Den största tillåtna storleken (1024 kB) $maxsize = (1024*1024); // Kontrollera att det angavs en fil if(empty($_FILES['uplfile']['name'])) die('Ingen fil har valts'); // Kontrollera storleken if($_FILES['uplfile']['size'] > $maxsize) die('Filen du valde är för stor. Maxstorleken är '.(string)($maxsize/1024).' KB.'); // Kontrollera filtypen $types = explode(',', $filetypes); $file = explode('.', $_FILES['uplfile']['name']); $extension = $file[sizeof($file)-1]; if(!in_array(strtolower($extension), $types)) die('Du har en felaktig filtyp. Endast .jpg, .gif och .png är tillåtet!'); // Generera unikt filnamn $bokstav = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6'); $thefile = $_FILES['uplfile']['name']; while (file_exists($upload_dir.$thefile)) { $img = $bokstav[rand(0, count($bokstav)-1)].$thefile; } // Flytta filen rätt if (is_uploaded_file($_FILES['uplfile']['tmp_name']) && move_uploaded_file($_FILES['uplfile']['tmp_name'],$upload_dir.$thefile)) { echo 'Filen laddades upp!'; /* Uppladdningen lyckades. Här kan man även lägga eventuell kod för t.ex. databashantering. Filnamnet ligger i $thefile. Ytterliggare fält i formuläret får du som vanligt med $_POST */ } else { echo 'Ett fel uppstod och filen kunde inte laddas upp.'; /* Uppladdningen misslyckades. */ } //SQL kod för att lägga in i databasen mysql_query("INSERT INTO news (rubrik, date, text, photo) values ('" .$_POST['rubrik']. "', '$date', '" .$_POST['text']. "', '$thefile')") or exit(mysql_error()); //Skickar dig vidare till det inskrivna efter location: header('location: news.php'); } }

Permalänk

testa

<?php //Kod för att lägga till genom ett forumlär if(isset($_GET['addnews'])) { ?> Lägg till en nyhet<br /> <form action='news.php?addnews&add' id='add' method='post' enctype='multipart/form-data'> <b>Rubrik:</b><br /> <input type='text' name='rubrik' /><br /> <b>Bild:</b><br /> Fil: <input type="file" name="uplfile"> <b>Innehåll:</b><br /> <textarea name='text' cols='50' rows='15'></textarea><br /> <input type='submit' value='Lägg till nyhet' /> </form> <?php //Då ?addnews=$id&add står i adressfältet kommer följande kod att laddas if(isset($_GET['add'])) { //Lägger in dagens datum i variabeln $datum som ex 1/9-04 $date = date('j/n-y H:i'); //Kod för att ladda upp bild // Mappen där filerna ska hamna $upload_dir = 'files/'; // De tillåtna filtyperna, separerade med komman, utan mellanrum $filetypes = 'jpg,gif,png'; // Den största tillåtna storleken (1024 kB) $maxsize = (1024*1024); // Kontrollera att det angavs en fil if(empty($_FILES['uplfile']['name'])) die('Ingen fil har valts'); // Kontrollera storleken if($_FILES['uplfile']['size'] > $maxsize) die('Filen du valde är för stor. Maxstorleken är '.(string)($maxsize/1024).' KB.'); // Kontrollera filtypen $types = explode(',', $filetypes); $file = explode('.', $_FILES['uplfile']['name']); $extension = $file[sizeof($file)-1]; if(!in_array(strtolower($extension), $types)) die('Du har en felaktig filtyp. Endast .jpg, .gif och .png är tillåtet!'); // Generera unikt filnamn $bokstav = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6'); $thefile = $_FILES['uplfile']['name']; while (file_exists($upload_dir.$thefile)) { $img = $bokstav[rand(0, count($bokstav)-1)].$thefile; } // Flytta filen rätt if (is_uploaded_file($_FILES['uplfile']['tmp_name']) && move_uploaded_file($_FILES['uplfile']['tmp_name'],$upload_dir.$thefile)) { echo 'Filen laddades upp!'; /* Uppladdningen lyckades. Här kan man även lägga eventuell kod för t.ex. databashantering. Filnamnet ligger i $thefile. Ytterliggare fält i formuläret får du som vanligt med $_POST */ } else { echo 'Ett fel uppstod och filen kunde inte laddas upp.'; /* Uppladdningen misslyckades. */ } //SQL kod för att lägga in i databasen mysql_query("INSERT INTO news (rubrik, date, text, photo) values ('".$_POST['rubrik']."', '".$date."', '".$_POST['text']".', '".$thefile."')") or exit(mysql_error()); //Skickar dig vidare till det inskrivna efter location: header('location: index.php'); } }

Visa signatur

[ASUS P9X79] [Corsair RM850i] [Corsair 32GB DDR3 1600mhz] [i7 3930K] [Noctua NH-D14] [Gainward GTX 1080 "GLH" Golden Sample 8GB GDDR5X][Sandisk 256GB][Fractal Design Define S]

Permalänk
Medlem

Nej det fungerade inte den sa att det var fel i på raden med sql strängen.

För det var bara mellanslagen du har tagit bort på mysql_query raden va?

Permalänk

yep..

tänkte testköra scriptet men orkade inte fixa databasen etc.

Visa signatur

[ASUS P9X79] [Corsair RM850i] [Corsair 32GB DDR3 1600mhz] [i7 3930K] [Noctua NH-D14] [Gainward GTX 1080 "GLH" Golden Sample 8GB GDDR5X][Sandisk 256GB][Fractal Design Define S]

Permalänk
Medlem

<?php //Kod för att lägga till genom ett forumlär if(isset($_GET['addnews'])) { ?> Lägg till en nyhet<br /> <form action='news.php?addnews&add' id='add' method='post' enctype='multipart/form-data'> <b>Rubrik:</b><br /> <input type='text' name='rubrik' /><br /> <b>Bild:</b><br /> Fil: <input type="file" name="uplfile"> <b>Innehåll:</b><br /> <textarea name='text' cols='50' rows='15'></textarea><br /> <input type='submit' value='Lägg till nyhet' /> </form> <?php //Då ?addnews=$id&add står i adressfältet kommer följande kod att laddas if(isset($_GET['add'])) { //Lägger in dagens datum i variabeln $datum som ex 1/9-04 $date = date('j/n-y H:i'); //Kod för att ladda upp bild // Mappen där filerna ska hamna $upload_dir = 'files/'; // De tillåtna filtyperna, separerade med komman, utan mellanrum $filetypes = 'jpg,gif,png'; // Den största tillåtna storleken (1024 kB) $maxsize = (1024*1024); // Kontrollera att det angavs en fil if(empty($_FILES['uplfile']['name'])) die('Ingen fil har valts'); // Kontrollera storleken if($_FILES['uplfile']['size'] > $maxsize) die('Filen du valde är för stor. Maxstorleken är '.(string)($maxsize/1024).' KB.'); // Kontrollera filtypen $types = explode(',', $filetypes); $file = explode('.', $_FILES['uplfile']['name']); $extension = $file[sizeof($file)-1]; if(!in_array(strtolower($extension), $types)) die('Du har en felaktig filtyp. Endast .jpg, .gif och .png är tillåtet!'); // Generera unikt filnamn $bokstav = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6'); $thefile = $_FILES['uplfile']['name']; while (file_exists($upload_dir.$thefile)) { $img = $bokstav[rand(0, count($bokstav)-1)].$thefile; } // Flytta filen rätt if (is_uploaded_file($_FILES['uplfile']['tmp_name']) && move_uploaded_file($_FILES['uplfile']['tmp_name'],$upload_dir.$thefile)) { echo 'Filen laddades upp!'; /* Uppladdningen lyckades. Här kan man även lägga eventuell kod för t.ex. databashantering. Filnamnet ligger i $thefile. Ytterliggare fält i formuläret får du som vanligt med $_POST */ } else { echo 'Ett fel uppstod och filen kunde inte laddas upp.'; /* Uppladdningen misslyckades. */ } //SQL kod för att lägga in i databasen $query = "INSERT INTO news (rubrik, date, text, photo) values ({$_POST['rubrik']}, $date, {$_POST['text']}, $thefile)"; mysql_query($query) or exit(mysql_error()); //Skickar dig vidare till det inskrivna efter location: header('location: news.php'); } }

Det här kan fungera.
Sen undrar jag lite över denna rad:

while (file_exists($upload_dir.$thefile)) { $img = $bokstav[rand(0, count($bokstav)-1)].$thefile; }

Du kollar om filen $upload_dir.$thefile existerar vilket den inte borde göra förens du laddar upp den dit, vilket du gör efter while-slingan.
Se över om du kanske har gjort en miss där.

Permalänk
Medlem

Det fungerar inte, nu låser sig allt bara, den laddar upp filen till den mappen men den lägger inte till något i databasen.

Det är inte jag som har gjort skriptet men den kollar ju om det finns en fil med samma namn och då så byter den väll namn på filen?

Permalänk
Medlem

Man skall inte göra såhär istället?

$query = 'INSERT INTO news (rubrik, date, text, photo) values ('.$_POST['rubrik'].', '.$date.', '.$_POST['text'].', '.$thefile.')';

Visa signatur

Intel 3570k @ 4,4GHz | ASUS P8Z77-V | G.Skill 8GB 1600Mhz | Gigabyte GTX970 | Samsung 850 Evo 250gb | Corsair HX650 | Antec P280

Permalänk
Medlem

while (file_exists($upload_dir.$thefile)) { $img = $bokstav[rand(0, count($bokstav)-1)].$thefile; }

Jag undrar också över den raden. Även om du flyttar filen dit så borde ju scriptet fastna där så länge filen finns. right?

edit: testa att byta ut while i början mot if.

Permalänk
Medlem

Jag har löst det, det hade inget med koden att göra. Det var jag som hade tänkt att lösa bilderna på ett annat sätt så "photo" hade datatyp INT

Permalänk
Medlem

^^ Bra att det löste sig då

Visa signatur

Intel 3570k @ 4,4GHz | ASUS P8Z77-V | G.Skill 8GB 1600Mhz | Gigabyte GTX970 | Samsung 850 Evo 250gb | Corsair HX650 | Antec P280