Ladda upp bild med Php funkar inte

Permalänk
Medlem

Ladda upp bild med Php funkar inte

Hej

Jag har ett problem med mitt projekt arbete.
Jag ska göra en informations sida där man fyllar i sitt namn, email, ålder osv tillsammans med en profil bild.
Jag vill inte ha profilbilden i mysql utan bara spara "länken" till bilden i Mysql så den kan hämta bilden från en mapp på servern.
Nu till mitt problem php script funkar fint namn och email osv hamnar på rätt ställe i mysql men bilden vägrar den spara i servern.

Jag har testa med andras script som finns på internet för att se så det inte är fel på mitt men samma sak där.
Som detta exemplet

--------------------------------------------
<form enctype="multipart/form-data" action="add.php" method="POST">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name = "email"><br>
Phone: <input type="text" name = "phone"><br>
Photo: <input type="file" name="photo"><br>
<input type="submit" value="Add">
</form>
-------------------------------------------
<?php

//This is the directory where images will be saved
$target = "var/www/upload";
$target = $target . basename( $_FILES['photo']['name']);

//This gets all the other information from the form
$name=$_POST['name'];
$email=$_POST['email'];
$phone=$_POST['phone'];
$pic=($_FILES['photo']['name']);

// Connects to your Database
mysql_connect("localhost", "xxxxxx", "xxxxxxx") or die(mysql_error()) ;
mysql_select_db("Database_Name") or die(mysql_error()) ;

//Writes the information to the database
mysql_query("INSERT INTO `employees` VALUES ('$name', '$email', '$phone', '$pic')") ;

//Writes the photo to the server
if(move_uploaded_file($_FILES['photo']['tmp_name'], $target))
{

//Tells you if its all ok
echo "The file ". basename( $_FILES['uploadedfile']['name']). " has been uploaded, and your information has been added to the directory";
}
else {

//Gives and error if its not
echo "Sorry, there was a problem uploading your file.";
}
?>
-------------------------------------------------------------

Dold text

Hela webbservern körs på Ubuntu Lamp server vet inte om jag kanske missat någon inställning i servern där första gången jag använder linux server.
Följde denna guiden http://net.tutsplus.com/tutorials/php/how-to-setup-a-dedicate... när jag installera servern.

Har ändrat mappens rättigheterna till chmod -r 777 och kan överföra allt manuellt till servern men inte med scriptet.

Har tittat runt lite på internet men utan resultat.
Är det något man måste ändra i php.ini eller något jag missat på server som tillåter bilder/filer?

Tack för hjälpen i förhand.

Visa signatur

Chassie: Corsair Graphite 600T - Mobo: Asus P8P67 - CPU: Intel i7 2600K - CPUkylare: Corsair Hydro H80 - RAM-minne: 12 Gb Corsair Dominator - GPU: EVGA 680GTX FTW+ 4GB - PSU: Corsair AX 850 GOLD - HDD: Intel 330 Series 2.5 OS: W7 Pro - Keyboard: Logitech Illuminated

Permalänk

Först och främst; får du något felmeddelande? PHP kan vara lite lurigt när de kommer till sådana, så ta en titt i filen; /var/log/apache2/error.log (inte säkert att den finns, om den inte finns, skriv tillbaka här om mappen finns eller inte. Och sedan om det finns några filer i mappen, och vilka)

Det är mycket möjligt att du laddar upp en för stor fil helt enkelt. Så din webbserver struntar bara i den. Men det är inte säkert. Som sagt; posta felmeddelandena. (Glöm inte blurra känslig info, om du känner för dvs)

Sedan har du problem med SQL-injektioner. (https://en.wikipedia.org/wiki/SQL_injection) Innan du lägger till något till databasen bör du köra det genom funktionen; mysql_real_escape_string(); (http://php.net/manual/en/function.mysql-real-escape-string.ph...) Som det ser ut idag skulle jag kunna ladda upp en bild med namnet: "'); DROP TABLE `employees`;-- " Och så hade du blivit av med hela din databas. Det är även ett problem för vanliga användare, om de skriver något tecken som gör din query felaktig, exempelvis om de använder enkla citattecken, etc. Det finns också preparerade statements (http://php.net/manual/en/mysqli.quickstart.prepared-statement...) som kanske egentligen är att föredra, men det är inte lika viktigt som det andra.

Mer att tänka på är att alltid dra variabler som kommer från användaren genom htmlspecialchars(); (http://php.net/manual/en/function.htmlspecialchars.php) innan de skrivs ut till sidan. Detta för att förhindra att någon injektserar konstiga saker på din sida.

Men, ja, felmeddelande behövs.

EDIT: Fler tankar:

Ser nu att du saknar ett / innan "var/www/upload".

  • Prova sätta mappens rättigheter med "chmod -r 0666 /var/www/upload" (Du vill inte ha möjlighet att starta program i en uppladdningsmapp )

  • Kolla vad PHP kör som för användare: "ps aux | grep php"

Permalänk
Medlem

Låter som det skulle kunna vara för stor fil.
Se till så att dessa är så stora som du vill tillåta:

// Detta tillåter 8 Megabyte stora filer
post_max_size = 8M
upload_max_filesize = 8M

Det skulle även kunna vara din target som ställer till det.
Ligger scriptet i /var/www så skulle du t.ex kunna skriva "upload" istället.

Permalänk
Medlem

Jag hitta error.log där var en del fel som jag har gått igenom och rättat till.
Kan man ta bort den gamla error.log och se om där kommer eventuellt upp nya fel?

Scriptet var i en mapp så target till bilderna var inte korrekt.

Tack för hjälpen och länkarna var mycket bra information. Har lite att gå igenom nu

Visa signatur

Chassie: Corsair Graphite 600T - Mobo: Asus P8P67 - CPU: Intel i7 2600K - CPUkylare: Corsair Hydro H80 - RAM-minne: 12 Gb Corsair Dominator - GPU: EVGA 680GTX FTW+ 4GB - PSU: Corsair AX 850 GOLD - HDD: Intel 330 Series 2.5 OS: W7 Pro - Keyboard: Logitech Illuminated