2011-09-28 3 views
0

J'ai un script de téléchargement qui me cause quelques problèmes et je ne peux pas pour la vie de moi comprendre pourquoi. Voici le code php:erreurs de téléchargement PHP

mysql_connect('localhost', 'root', ''); 
mysql_select_db('uploads'); 

if (isset($_FILES["file"]["type"]) && isset($_FILES["file"]["size"])) { 
if (($_FILES["file"]["type"] == "image/png")) { 
    if ($_FILES["file"]["size"] < 500120) { 
     if ($_FILES["file"]["error"] > 0) { 
      echo $_FILES["file"]["error"]; 
     } else {       
      if (file_exists("uploads/" . $_FILES["file"]["name"])) { 
       echo $_FILES["file"]["name"] . " already exists. "; 
      } else { 
       move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/" . $_FILES["file"]["name"]); 
       $name = $_FILES["file"]["name"]; 
       mysql_query("INSERT INTO uploads (name) VALUES ('$name')");     
       if (isset($_POST['title']) && isset($_POST['desc'])) { 
        $title = $_POST['title']; 
        $desc = $_POST['desc']; 
        mysql_query("INSERT INTO uploads (title, desc) VALUES ('$title', '$desc')"); 
        echo $title; 
        echo $desc; 
       }     
      } 
     } 
    } else { 
     echo "File is too big"; 
    } 
} else { 
    echo "Wrong file type"; 
} 
} 

Je sais que mes chemins de fichiers et formulaire de saisie sont corrects et si je fais l'écho des variables $title ou $desc ils reviennent avec les valeurs correctes. Mon problème est le suivant: pour une raison quelconque, les valeurs $title et $desc ne seront pas entrées dans la base de données. La première requête mysql fonctionne bien mais pas la seconde. Une idée pourquoi?

+0

sûrement vous voulez associer le titre, desc avec le nom? –

+0

Quelle est la sortie si vous ajoutez 'echo mysql_error()' après la deuxième requête? –

+0

ouais, c'est un peu foutu en ce moment mais $ name est pour le nom du fichier, $ title est pour le nom d'image défini par l'utilisateur et $ desc est pour la description définie par l'utilisateur. – codedude

Répondre

2

Ceci est probablement dû au fait que desc est un MySQL reserved keyword, et il doit être entouré de guillemets dans votre requête. Vérifiez toujours mysql_error() pour trouver la cause d'une requête ayant échoué.

$success = mysql_query("INSERT INTO uploads (title, `desc`) VALUES ('$title', '$desc')"); 
if (!$success) echo mysql_error(); 

S'il vous plaît échapper aussi $title et $desc avant insertion, car ils viennent directement de $_POST.

$title = mysql_real_escape_string($_POST['title']); 
$desc = mysql_real_escape_string($_POST['desc']); 

Et faire la même chose pour $name dans la requête précédente:

$name = mysql_real_escape_string($_FILES["file"]["name"]); 
+0

cela affecterait-il aussi la variable $ title? – codedude

+0

@codedude Non cela n'affecterait pas 'title' car ce n'est pas un mot réservé par MySQL. Voir la liste que je viens de relier à la réponse. –

0

Vous créez 2 enregistrements dans la table uploads, pour 1 fichier. La colonne name est probablement définie sur null, ce qui entraîne la seconde requête à ne pas fonctionner. Il faut être:

$name = mysql_escape_string($_FILES["file"]["name"]); 
$title = isset($_POST['title'])?mysql_escape_string($_POST['title']) : ''; 

$desc = isset($_POST['desc'])?mysql_escape_string($_POST['title']) : ''; 

mysql_query("INSERT INTO uploads (`name`, `title`, `desc`) VALUES ('$name', $title, $desc)");