Probleme INSERT

Résolu
Bonjour,
je galère sur ce morceau de code que j'ai pourtant fait des dizaines et des dizaines de fois...

if(isset($_GET['setup'])){
	$nom=$_POST['nom'];
	$vignette=$_FILES['vignette']['name'];
	$date=$_POST['date'];
	$desc=$_POST['desc'];
	$nomxml=$_POST['nomxml'];
	
	//$insert='INSERT INTO events SET nom="'.$nom.'",vignette="'.$vignette.'",date="'.$date.'",desc="'.$desc.'",nomxml="'.$nomxml.'"';
	$insert='INSERT INTO events (name,vignette,date,desc,nomxml) VALUES ("'.$nom.'","'.$vignette.'","'.$date.'","'.$desc.'","'.$nomxml.'")';
	$resultat = mysql_query ($insert) or die ("Requête invalide");
    }


il me ressort toujours "requete invalide"... j'ai essayé les deux façons de INSERT et ça a pas marché... et ce qui est bizarre c'est que j'utilise exactement le même code sur d'autres pages et base de données et ça marche... j'ai vérifié aussi ma BD et je n'y vois rien d'anormal... et même quand je met n'importe quoi en nom de table ou en nom de champs, je n'ai aucune erreur qui apparait... qu'est-ce qui se passe passe??
Configuration: Windows Vista
Firefox 3.0.10

17 réponses

  1. pour le addslashes ça marche quand meme en fait
    Très mauvaise réponse!
    Tout ce que tu peux dire, c'est que tu n'as pas lu la doc et que tu n'es pas encore tombé sur les cas où ça ne marche pas. Un jour tu reviendras sur le forum en disant 'j'ai toujours fait comme ça et ça a toujours marché, et aujourd'hui ça ne marche plus'.
    1
    1. merci beaucoup en fait j'avais trouvé 5min apres avoir posté le message, j'ai mis cote à cote deux INSERT... pour le addslashes ça marche quand meme en fait...
      0
      1. Et pour inséerer des données dans une base mysql, ce n'est pas addslashes qu'il faut utiliser, mais mysql_real_escape_string :
        $log = ("INSERT INTO log SET user='".mysql_real_escape_string($user)."'");
        0
        1. Tu as des parenthèses en trop
          $log = ("INSERT INTO log SET user='".addslashes($user)."'");
          1
          1. sachant qu'à la base mon code c'est :

            $user = $_COOKIE["NOM_UTILISATEUR"];
                    $log = ("INSERT INTO log SET (user='".addslashes($user)."')");
                    $resultat = mysql_query ($log) or die (mysql_error());
            0
            1. bon j'ai essayé un nouveau code et ça me fait la même chose, mais j'ai mis mysql_error et sa me dit une erreur de syntaxe :

              Erreur de syntaxe près de '(user='User1')' à la ligne 1

              mais je vois pas d'où ça vient...
              0
              1. oups j'avais pas vu ça comme ça... ^^
                j'essayerai ça plus tard, je me suis lancé dans la suite du code...
                0
                1. le problème, c'est que le mysql_error() est inexistant
                  Qu'est-ce que ça veut dire ?

                  $resultat = mysql_query ($insert) or die ("Requête invalide");
                  Tu as bien dit que ça t'affichait Requête invalide ? et si tu mets
                  $resultat = mysql_query ($insert) or die (mysql_error());
                  ça ne t'affiche rien ?

                  J'ai du mal à te suivre
                  0
                  1. c'est ça le problème, c'est que le mysql_error() est inexistant même avec des nom de table faux...

                    mais j'ai essayé de l'incorporer dans une autre page où j'avais enchevétré plein de GET/POST comme je te l'ai expliqué plus haut et ça marche...

                    c'est encore un des grands mystères du PHP qui ne sera peut-être jamais résolu...

                    mais si quelqu'un a la réponse, je la prend volontier...

                    sur ce, un grand merci à toutes les personnes qui ont essayé...
                    0
                    1. Mes excuses pour le farfelu. Mêler le GET et le POST, je n'avais jamais eu l'idée, mais pourquoi pas après tout ?

                      Mais le plus important, c'est le message d'erreur : que dit le MySQL_error() ?

                      En ce qui concerne les quotes, mysql se soucie peu que les données soient entourées de simples ou doubles quotes. Ils jouent exactement le même rôle, contrairement au PHP.
                      0
                      1. Ok, merci le père, je m'en doutais mais n'en étais pas convaincu !
                        0
                    2. Au hasard : tu as essayé de protéger les valeurs insérées avec des simple quotes au lieu de doubles ?
                      0
                      1. en fait mon action est comme ceci :
                        <form method='post' action='mapage.php?setup' enctype='multipart/form-data'>


                        c'est pour gagner une page de code en fait... j'ai d'autre get du meme genre mais au lieu du setup j'ai un update et un delete...

                        je l'ai déjà fait sur plusieurs page pour la même admin et ça marché jusqu'à maintenant...
                        0
                        1. if(isset($_GET['setup'])){
                          $nom=$_POST['nom'];
                          $vignette=$_FILES['vignette']['name'];
                          $date=$_POST['date'];
                          $desc=$_POST['desc'];
                          $nomxml=$_POST['nomxml'];

                          ce test est farfelu, ton formulaire est en GET ou en POST ?
                          Sinon, que donne le mysql_error() demandé par Yoan ?
                          0
                          1. pour les // c'est parce que c'est mis en commentaire...

                            pour les valeurs vides, j'avais déjà fait un code avec un control et ça marchait pas non plus et puis de toute façon le sql prend en compte les valeurs vides en laissant le champ vide une fois dans la BD...

                            pour desc, j'ai essayé les accents grave ça marche pas et j'ai changé desc en description et ça marche toujours pas...
                            0
                            1. Bonjour

                              DESC est un mot réservé en Mysql, si tu veux l'utiliser comme nom de champ, entoure le d'accents graves :
                              $insert='INSERT INTO events (name,vignette,date,`desc`,nomxml) VALUES ("'.$nom.'","'.$vignette.'","'.$date.'","'.$desc.'","'.$nomxml.'")';

                              ou change de nom...
                              0
                              1. Modérateur
                                un petit mysql_error() ? :-)
                                Tu dois certainement avoir au moins une des valeurs vides, tu ne les vérifies pas une à une, c'est un gros danger.
                                0
                                1. Bonjour, je ne sais pas du tout si cela change quelque chose, mais que font les deux // dans
                                  //$insert='INSERT INTO events SET nom="'.$nom.'",vignette="'.$vignette.'",date="'.$date.'",desc="'.$desc.'",nomxml="'.$nomxml.'"'; ? Ce n'est pas pour les commentaires ? Et il ne faut pas un mysql_query ? Sinon je ne sais pas dsl. Bonne chance
                                  0