Problème WHERE sql ignoré

Résolu
Bonjour,
J'ai un problème avec une requête SQL que j'ai préparé, tout fonctionne sauf que le WHERE n'est pas pris en compte, donc toutes les entrées sont modifiées.

Je mets mon code ci-dessous, si quelqu'un voit qu'elle est l'erreur.

Merci

<?
$bdd = new PDO(`mysql:host=XXXX;dbname=XXXX;charset=utf8', `XXXX', `XXXX');
$req = $bdd->prepare('UPDATE clients SET nom = :nom, prenom = :prenom; adresse = :adresse, ville = :ville, npa = :npa, telephone1 = :telephone, email = :email, civilite = :civilite, remarque = :remarque, tension = :tension, douleur = :douleur, enceinte = :enceinte, allergie = :allergie, maladie = :maladie, operation = :operation WHERE id_client = :idclient');
$req->execute(array(
 'idclient' => $_POST['aidclient'],
 'civilite' => $_POST['acivilite'],
 'nom' => $_POST['anom'],
 'prenom' => $_POST['aprenom'],
 'telephone' => $_POST['atelephone'],
 'email' => $_POST['aemail'],
 'adresse' => $_POST['aadresse'],
 'ville' => $_POST['aville'],
 'npa' => $_POST['anpa'],
 'tension' => $_POST['atension'],
 'douleur' => $_POST['adouleur'],
 'enceinte' => $_POST['aenceinte'],
 'allergie' => $_POST['aallergie'],
 'maladie' => $_POST['amaladie'],
 'operation' => $_POST['aoperation'],
 'remarque' => $_POST['aremarque']
 ));

//Redirection
?>

1 réponse

  1. Modérateur
    Bonjour,

    1 - Utilises les balises PHP complètes ( <?php au lieu de juste <? )

    2 - récupères le contenu de ton $_POST dans des variables ( AVANT de les utiliser ! )

    3 - Sépare les éléments de ta "requête"
    d'un côté le sql, d'un autre l'array de tes variables... et enfin.. l'appelle à la fonction qui l'execute.

    Bref... ça devrait donner un code du genre :
    <?php
    $bdd = new PDO('mysql:host=XXXX;dbname=XXXX;charset=utf8', 'XXXX', 'XXXX');
    
     
     // Récupération propre des variables
     $idclient => isset($_POST['aidclient'])? $_POST['aidclient']:'';
     $civilite => isset($_POST['acivilite'])? $_POST['acivilite'] : '';
     $nom => isset($_POST['anom']) ? $_POST['anom'] : '';
     $prenom => isset($_POST['aprenom']) ? $_POST['aprenom'] : '';
     $telephone => isset($_POST['atelephone']) ? $_POST['atelephone'] : '';
      // etc... je te laisse faire les autres.
     
    // requête 
    $sql = "UPDATE clients 
               SET nom = :nom
    		     , prenom = :prenom
    			 , adresse = :adresse
    			 , ville = :ville
    			 , npa = :npa
    			 , telephone1 = :telephone
    			 , email = :email
    			 , civilite = :civilite
    			 , remarque = :remarque
    			 , tension = :tension
    			 , douleur = :douleur
    			 , enceinte = :enceinte
    			 , allergie = :allergie
    			 , maladie = :maladie
    			 , operation = :operation 
    	  WHERE id_client = :idclient";
     
     // Array contenant les datas pour la requête
    $array_datas = array(
     'idclient' => $aidclient,
     'civilite' => $acivilite,
     'nom' => $anom,
     'prenom' => $aprenom,
     'telephone' => $atelephone,
     'email' => $aemail,
     'adresse' => $aadresse,
     'ville' => $aville,
     'npa' => $anpa,
     'tension' => $atension,
     'douleur' => $adouleur,
     'enceinte' => $aenceinte,
     'allergie' => $aallergie,
     'maladie' => $amaladie,
     'operation' => $aoperation,
     'remarque' => $aremarque
     ); 
     
     
     
    try{
      //exécution de la requete
      $req = $bdd->prepare($sql);
      $req->execute($array_datas);
    
    }catch(Exception $e) {
     // en cas de souci dans l'execution de la requete
      echo $e->getMessage(); 
      print_r($array_datas);
    }
    


    Au passage... tu avais un ";" qui trainait dans ta requête.....
    C'est pour ça qu'il est bien d'y faire des retours à la ligne..histoire qu'elle soit plus lisible !

    1. Merci beaucoup, j'ai réussi la