Erreur sql au secour

Résolu
Bonjour,

j'ai un probleme quand j'envoie mon formulaire voici mon erreur

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id= ""' at line 1

voici la ligne en question je l'ai mis en gras

<?
//connextion a la base de donnee
mysql_connect('localhost', 'axxxxx', 'xxxxxx');
mysql_select_db("auto7837_auto");
$id = $_POST['id']; // recuperation de l'id a modifier
if(is_numeric($id) && $id) {
$sql='SELECT * FROM servicenonpubliee WHERE id="'.$id.'"';
$req=mysql_query($sql) or die(mysql_error());
while($row=mysql_fetch_array($req)) {
$typedannonce=$row['typedannonce']; $email=$row['email']; $titre=$row['titre']; $message=$row['message'];
}
}
if(isset($_POST['envoyer'])) {
$id = $_POST['id']; $typedannonce=$_POST['typedannonce']; $email=$_POST['email']; $titre=$_POST['titre']; $message=$_POST['message'];
//on modifie les images la requete
$sql=' UPDATE servicenonpubliee SET typedannonce="'.$typedannonce.'", email="'.$email.'", titre="'.$titre.'", message="'.$message.'", WHERE id= "'.$id.'" ';
mysql_query($sql) or die(mysql_error());
echo 'Vos infos ont été modifiées.';
}
else{
?>

merci

5 réponses

Résumé de la discussion

Le problème rencontré est une erreur de syntaxe SQL lors de l'envoi du formulaire, liée à une utilisation incorrecte des guillemets autour de l'identifiant et à une virgule superflue avant WHERE. Des solutions proposées consistent à écrire les requêtes avec des guillemets simples autour de l'id, à supprimer la virgule avant WHERE et à sécuriser les valeurs via une vérification is_numeric ou des paramètres. Plusieurs réponses suggèrent aussi l'utilisation de préférence d'une requête UPDATE sans apostrophes autour des identifiants numériques et d'injecter les valeurs dans la requête avec des placeholders ou l'interpolation sécurisée. En pratique, des exemples corrigés montrent SELECT * FROM servicenonpubliee WHERE id='$id'; et UPDATE servicenonpubliee SET typedannonce='$typedannonce', email='$email', titre='$titre', message='$message' WHERE id='$id'; pour éviter l'erreur near WHERE.

Bobot (l’IA à votre service)
  1. A vue de nez je vois 2 souci :
    * $id est vide
    * si $id est un numérique, il ne faut pas les apostrophe supplémentaires
    1. $sql=' UPDATE servicenonpubliee SET typedannonce="'.$typedannonce.'", email="'.$email.'", titre="'.$titre.'", message="'.$message.'", WHERE id= "'.$id.'" '; 


      t as cette ligne la aussi :

      $sql='SELECT * FROM servicenonpubliee WHERE id="'.$id.'"'; 


      Fais ca :

      $sql="SELECT * FROM servicenonpubliee WHERE id='$id';"; 


      et

      $sql= "UPDATE servicenonpubliee SET typedannonce='$typedannonce', email='$email', titre='$titre', message='$message' WHERE id='$id';"; 


      Fais ca aussi :

      echo "<h1>mon id est $id </h1>";
      en dessous de
      $id = $_POST['id']; // recuperation de l'id a modifier  

      Pour vérifier que ta variable id existe
      1. ca a fonctionnée a moitié mon id apparait bien il se rend au bout du script en disant vos informations ont bien été enregistré mais quand je vais dans mon php my admin ya rien de modifier
      2. tu as renseigné les autres varaibles ?
        $typedannonce = $_POST['xxxxxxxxx'];
        $email = $_POST['xxxxxxxxxxxx'];
        $titre = $_POST['xxxxxxxxxxx'];
        $message = $_POST['xxxxxxxxx'];
      3. je croit que oui voila mon script modifié

        <?
        //connextion a la base de donnee
        mysql_connect('localhost', 'auto7837', 'xxxxxxxx');
        mysql_select_db("auto7837_auto");
        $id = $_POST['id']; // recuperation de l'id a modifier
        echo "<h1>mon id est $id </h1>";
        if(is_numeric($id) && $id) {
        $sql="SELECT * FROM servicenonpubliee WHERE id='$id';";
        $req=mysql_query($sql) or die(mysql_error());
        while($row=mysql_fetch_array($req)) {
        $typedannonce=$row['typedannonce']; $email=$row['email']; $titre=$row['titre']; $message=$row['message'];
        }
        }
        if(isset($_POST['envoyer'])) {
        $id = $_POST['id']; $typedannonce=$_POST['typedannonce']; $email=$_POST['email']; $titre=$_POST['titre']; $message=$_POST['message'];
        //on modifie les images la requete
        $sql= "UPDATE servicenonpubliee SET typedannonce='$typedannonce', email='$email', titre='$titre', message='$message' WHERE id='$id';";
        mysql_query($sql) or die(mysql_error());
        echo 'Vos infos ont été modifiées.';
        }
        else{
        ?>
      4. Ah ouais met tes variables entre {} :

        $sql= "UPDATE servicenonpubliee SET typedannonce='{$typedannonce}', email='{$email}', titre='{$titre}', message='{$message}' WHERE id={$id};"; 
      5. toujours le meme probleme pas de modifications :(
    2. essaie ça :

      $sql="UPDATE servicenonpubliee SET typedannonce='".$typedannonce."', email='".$email."', titre='".$titre."', message='".$message."', WHERE id=" .$id ;
      1. voila l'erreur que j'obtien a present

        You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id=' at line 1
      2. c'est la virgule avant le WHERE qu'il faut enlever
      3. j'ai enlevé la virgule et voici l erreur maintenet

        You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    3. et comme ça:

      $sql="UPDATE servicenonpubliee SET typedannonce='".$typedannonce."',email='".$email."',titre='".$titre."',message='".$message."' WHERE id=".$id." " ;
      1. c'est règlé j'ai ajouté a mon formulaire cette ligne

        <input type="text" name="id" value="<?=$id;?>" size="20" style="display:none" />

        et ca a reglé le probleme¸

        merci a vous tous pour m'avoir aidé surtout a fxtaa pour m'avoir mis sur la piste

        bonne journée :)