Permalänk

bilduppladnings sida

hej!
Jag håller på att skapa en community.
Jag håller på att göra så att man kan ladda upp profilbild.
detta är min kod:

<?php session_start(); if (!isset($_SESSION['id'])) { echo 'Please <a href="login.php">log in</a> to access your account'; exit(); } $id = $_SESSION['id']; $toplinks = ""; if (isset($_SESSION['id'])) { $userid = $_SESSION['id']; $username = $_SESSION['username']; $toplinks = ' <a href="member_profile.php?id=' . $userid . '">' . $username . '</a> <br /> <a href="member_account.php">Konto</a> <br /> <a href="logout.php">Logga ut</a> '; } else { $toplinks = '<a href="login.php">Logga in</a> <br /> <a href="forgotpass.php">Glömt lösenordet?</a> <br /> <a href="join_form.php">Registrera</a> '; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Ladda upp bild</title> <link href="css.css" rel="stylesheet" type="text/css" /> <script type="text/javascript"> <!-- Form Validation --> function validate_form ( ) { valid = true; if ( document.form.uploadedfile.value == "" ) { alert ( "Var snäll och leta upp en bild på din dator" ); valid = false; } return valid; } <!-- Form Validation --> </script> <style type="text/css"> <!-- body {margin: 0px} --> </style> </head> <body> <?php include "headermenu.php"; ?> <div align="center"> <h3><br /> <br /> Ladda upp din profil bild här: <br /> <br /> </h3> <table border="2" align="center" cellpadding="5" cellspacing="5"> <form action="edit_pic.php" method="post" enctype="multipart/form-data" name="form" id="form" onsubmit="return validate_form ( );"> <tr> <td colspan="2"><img src="memberFiles/<?php echo "$id"; ?>/pic1.jpg" alt="bild" width="150" /></td> </tr> <tr> <td colspan="2"><input name="uploadedfile" type="file" /></td> </tr> <tr> <td colspan="2"><div align="center"> <input type="submit" name="Submit" value="Ladda upp bild" /> </div></td> </tr> </form> </table> </div> </body> </html> <?php if ($_FILES['uploadedfile']['tmp_name'] != "") { $maxfilesize = 120000; if($_FILES['uploadedfile']['size'] > $maxfilesize ) { echo "<br /><br />din bild var för stor. bilden måste vara 100kb eller mindre,<br /><br /> <a href=\"edit_pic.php\">Klicka här</a> för att försöka igen"; unlink($_FILES['uploadedfile']['tmp_name']); exit(); } else if (!preg_match("/\.(gif|jpg)$/i", $_FILES['uploadedfile']['name'] ) ) { echo "<br /><br />Din bild är inte en .gif eller .jpg och den måste vara en av de här två foramten,<br /> <a href=\"edit_pic.php\">Klicka här</a> för att försöka igen"; unlink($_FILES['uploadedfile']['tmp_name']); exit(); } else { $newname = "pic1.jpg"; if (move_uploaded_file($_FILES['uploadedfile']['tmp_name'], "memberFiles/$id/".$newname)) { echo "Det lycade att allad upp bild och den kommer att visas för besökare<br /><br /> <a href=\"member_account.php\">Klicka här</a> för att gå tillbacka till profil sidan"; exit(); } else { echo "Det blev ett fel när bildet skulle laddas upp ,testa igen. Om det blir fel fler gånger kontakta oss via mejl. <br /><br /> <a href=\"member_account.php\">Klicka här</a> för att gå tillbacka till profil sidan"; exit(); } } } ?>

Men när jag kollar på den så får jag det här fel meddelandet:
Undefined index: uploadedfile in .... on line 81
Varför?

Hälsningar/
Granskog1

Permalänk
Medlem
Skrivet av granskog1:

hej!
Jag håller på att skapa en community.
Jag håller på att göra så att man kan ladda upp profilbild.
detta är min kod:

[PHP]
Massa kod...

Men när jag kollar på den så får jag det här fel meddelandet:
Undefined index: uploadedfile in .... on line 81
Varför?

Hälsningar/
Granskog1

Du har glömt en start-parentes efter if

EDIT: Nej, det kan det inte vara såg jag nu :/ Kan kolla och se om jag hittar det

Permalänk
Entusiast

Kolla upp filstorleken du försöker testa med.
Standard max filstorlek för php är 2 MebiByte.

Detta ställs in i serverns php.ini fil.
Om filstorleken överskrids, kommer servern att skippa filen helt och hållet, varav jag misstänker att [size] i $_FILES['uploadedfile']['size'] lämnas odefinierad, därav felmeddelandet.

Gör en extra koll på detta med följande kod före den aktuella raden:

if(!isset($_FILES['uploadedfile']['size'])) { $_FILES['uploadedfile']['size'] = $maxfilesize + 1; }

Jag är dock inte helt säker om detta är felet, men det kom mig till minnes vid ett liknande problem jag hade inte alltför länge sedan.

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)

Permalänk

Nope, den gav bara samma fel meddelande igen den raden den pratar om är:
if ($_FILES['uploadedfile']['tmp_name'] != "") {

Permalänk
Entusiast

Den raden fungerar på min server, men jag upptäcker däremot ett litet fel:
$_FILES existerar inte förrän man har laddat upp en bild, varav if-satsen på rad 77 "falerar" redan vid visning av sidan.

Åtgärda detta genom att kontrollera huruvida det har skett en Submit eller inte.
Om användaren klickat på "skicka" . Först då exekvera dem aktuella if-satserna, annars skippa hela klabbet.

T.ex:

if (isset($_FILES)) { ...din kod här ... } else { ...presentera HTML-formen här... }

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)

Permalänk

Ok men varför fungerar det inte på min?

Permalänk
Medlem
Skrivet av granskog1:

Ok men varför fungerar det inte på min?

Det fungerar inte för du letar efter den uppladdade filen innan den är uppladdad: när du besöker sidan första gången finns inte $_FILES['uploadedfile'] tillgängligt iom att användaren ännu inte skickat något.

Visa signatur

Kom-pa-TI-bilitet

Permalänk

men var ska jag sätta syghost kod?

Permalänk
Entusiast

Kolla om följande kod fungerar:
Jag har korrigerat några stavfel samt skapade funktionen filevalidator, som jag stoppade delar av in din kod i. Se efter själv.

<?php session_start(); if (!isset($_SESSION['id'])) { echo 'Please <a href="login.php">log in</a> to access your account'; exit(); } $id = $_SESSION['id']; $toplinks = ""; if (isset($_SESSION['id'])) { $userid = $_SESSION['id']; $username = $_SESSION['username']; $toplinks = ' <a href="member_profile.php?id=' . $userid . '">' . $username . '</a> <br /> <a href="member_account.php">Konto</a> <br /> <a href="logout.php">Logga ut</a> '; } else { $toplinks = '<a href="login.php">Logga in</a> <br /> <a href="forgotpass.php">Glömt lösenordet?</a> <br /> <a href="join_form.php">Registrera</a> '; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Ladda upp bild</title> <link href="css.css" rel="stylesheet" type="text/css" /> <script type="text/javascript"> <!-- Form Validation --> function validate_form ( ) { valid = true; if ( document.form.uploadedfile.value == "" ) { alert ( "Var snäll och leta upp en bild på din dator" ); valid = false; } return valid; } <!-- Form Validation --> </script> <style type="text/css"> <!-- body {margin: 0px} --> </style> </head> <body> <?php include "headermenu.php"; ?> <div align="center"> <h3><br /> <br /> Ladda upp din profil bild här: <br /> <br /> </h3> <table border="2" align="center" cellpadding="5" cellspacing="5"> <form action="edit_pic.php" method="post" enctype="multipart/form-data" name="form" id="form" onsubmit="return validate_form ( );"> <tr> <td colspan="2"><img src="memberFiles/<?php echo "$id"; ?>/pic1.jpg" alt="bild" width="150" /></td> </tr> <tr> <td colspan="2"><input name="uploadedfile" type="file" /></td> </tr> <tr> <td colspan="2"><div align="center"> <input type="submit" name="Submit" value="Ladda upp bild" /> </div></td> </tr> </form> </table> </div> </body> </html> <?php if( isset( $_POST['Submit']) ) { $message = filevalidator( $_FILES, $id ); echo( $message ); } function filevalidator ( $files_to_validate, $id ) { if ($files_to_validate['uploadedfile']['tmp_name'] != "") { $maxfilesize = 120000; if($files_to_validate['uploadedfile']['size'] > $maxfilesize ) { $message = "<br /><br />din bild var för stor. bilden måste vara 100kb eller mindre,<br /><br /> <a href=\"edit_pic.php\">Klicka här</a> för att försöka igen"; unlink($files_to_validate['uploadedfile']['tmp_name']); return $message; } else if (!preg_match("/\.(gif|jpg)$/i", $files_to_validate['uploadedfile']['name'] ) ) { $message = "<br /><br />Din bild är inte av formatet gif eller jpg. Den måste vara en av de här två formaten.<br /> <a href=\"edit_pic.php\">Klicka här</a> för att försöka igen"; unlink($files_to_validate['uploadedfile']['tmp_name']); return $message; } else { $newname = "pic1.jpg"; if (move_uploaded_file($files_to_validate['uploadedfile']['tmp_name'], "memberFiles/$id/".$newname)) { $message = "Det lycades att ladda upp bilden och den kommer att visas för besökare<br /><br /> <a href=\"member_account.php\">Klicka här</a> för att gå tillbaka till profilsidan"; return $message; } else { $message = "Det blev ett fel när bilden skulle laddas upp. Testa igen. Om samma fel uppstår, kontakta oss via mejl. <br /><br /> <a href=\"member_account.php\">Klicka här</a> för att gå tillbaka till profilsidan"; return $message; } } } } ?>

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)

Permalänk

Japp, tackar så mycket.

Permalänk
Entusiast
Skrivet av Teknocide:

Det fungerar inte för du letar efter den uppladdade filen innan den är uppladdad: när du besöker sidan första gången finns inte $_FILES['uploadedfile'] tillgängligt iom att användaren ännu inte skickat något.

Precis som Teknocide nämnde, handlade det i det här fallet om att $_FILES inte var definierad vid sidvisning.

Lösningen ligger i följande rader:

if( isset( $_POST['Submit']) ) { $message = filevalidator( $_FILES, $id ); echo( $message ); }

Den kontrollerar om användaren har klickat på "Skicka", och om så är fallet så körs koden i funktionen filevalidator, som jag "kapsulerade" din kod i.

I alla andra fall visas bara formen och koden behöver då inte exekveras, vilket annars skulle resultera i dem felmeddelanden du fick, då $_FILES inte existerar ännu.

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)

Permalänk
Entusiast

Jag upptäckte också att din kod kommer att felaktigt döpa om eventuella gif-bilder till jpeg.

Ledtrådar:

  • Det har med raderna 100 och neråt att göra.

  • Den inblandad variabeln är $newname .

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)