DELETE sur PHPMyAdmin

Résolu
Numbyscuit Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -  
Numbyscuit Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
C'est encore moi.
Je cherche à retirer une ligne spécifique de ma table adresse (ainsi, enlever une adresse à un client) grâce à un bouton submit et une requête DELETE.

Le code sur la page du bouton est le suivant, et permet d'afficher toutes les adresses du client est le suivant :

<?php 
       /*Connexion à BDD */ 
        try 
       { 
        // On se connecte à MySQL 
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;  
        $bdd = new PDO('mysql:host=localhost;dbname=bdd_exiastore', 'root', '', $pdo_options); 
        $bdd->exec('SET NAMES utf8'); 
         
       } 
       catch(Exception $e) 
       { 
        // En cas d'erreur, on affiche un message et on arrête tout 
         die('Erreur : '.$e->getMessage()); 
       } 
        
       $log = $_SESSION['pseudo']; 
       $reponse = $bdd->prepare("SELECT RueAdresse,  CPAdresse, VilleAdresse, PaysAdresse FROM adresses 
       INNER JOIN avoir 
       ON avoir.ID_Adresse = adresses.ID_Adresse 
       INNER JOIN clients 
       ON clients.ID_Client = avoir.ID_Client 
       WHERE clients.PseudoClient = '". $log ."' 
       "); 
       $reponse->execute(array( 
       'log' => $log 
       )); 
// Si possible, pouvoir modifier et supprimer ces adresses individuellement        
       while ($donnees = $reponse->fetch()) 
       { 
        echo ' 
        <form method="post" action="deladress.php"> 
        <fieldset class="inscr"> 
         <legend>Adresse</legend> 
        <label>Adresse : </label> 
          <input type="text" name="adress" class="champ" value=" ' 
        . htmlspecialchars($donnees['RueAdresse']) . '" />'. 
        ' <br /><br />' . 
        '<label>Code postal : </label> 
          <input type="text" name="CP" class="champ" value=" ' 
        . htmlspecialchars($donnees['CPAdresse']) . '" />'. 
        ' <br /><br />' . 
        '<label>Ville : </label> 
          <input type="text" name="ville" class="champ" value=" ' 
        . htmlspecialchars($donnees['VilleAdresse']) . '" />'. 
        ' <br /><br />' . 
         '<label>Pays : </label> 
          <input type="text" name="pays" class="champ" value=" ' 
        . htmlspecialchars($donnees['PaysAdresse']) . '" />'. 
        ' <br /><br /><input type="submit" value="Supprimer" /></fieldset><br /> 
          
        </form>'; 
       } 

       $reponse->closeCursor(); 

      ;?>


Le code de ma requête est celui-ci :

<?php  

       /*Connexion à BDD */ 
        try 
       { 
        // On se connecte à MySQL 
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;  
        $bdd = new PDO('mysql:host=localhost;dbname=bdd_exiastore', 'root', '', $pdo_options); 
        $bdd->exec('SET NAMES utf8'); 
         
       } 
       catch(Exception $e) 
       { 
        // En cas d'erreur, on affiche un message et on arrête tout 
         die('Erreur : '.$e->getMessage()); 
       } 

       // Si tout va bien, on peut continuer 

      $log = $_SESSION['pseudo']; 
      $add = $_POST['adress']; 
      $ville = $_POST['ville']; 
      $cp = $_POST['CP']; 
      $pays = $_POST['pays']; 
       
      $reqAdd = $bdd->prepare(" 
      DELETE FROM adresses WHERE adresses.RueAdresse = :add AND  adresses.CPAdresse = :cp AND  adresses.VilleAdresse = :ville AND  adresses.PaysAdresse = :pays 
      "); 
      $reqAdd->execute(array( 
      'add'=>$add, 
      'cp'=>$cp, 
      'ville'=>$ville, 
      'pays'=>$pays   
      )); 
       
      $sqlId = $bdd->prepare(" 
      SELECT ID_Client FROM clients 
      WHERE PseudoClient = :log 
      "); 
      $sqlId->execute(array( 
      'log' => $log 
      )); 
      $donneesId = $sqlId->fetch(); 
      $idCli = $donneesId['ID_Client']; 
       
      $sqlAdd = $bdd->prepare("SELECT adresses.ID_Adresse FROM adresses 
      WHERE  adresses.RueAdresse = :add AND  adresses.CPAdresse = :cp AND  adresses.VilleAdresse = :ville AND  adresses.PaysAdresse = :pays 
      "); 
      $sqlAdd->execute(array( 
      'add'=>$add, 
      'cp'=>$cp, 
      'ville'=>$ville, 
      'pays'=>$pays  
      )); 
      $donneesAdd = $sqlAdd->fetch(); 
      $idAdd = $donneesAdd['ID_Adresse']; 
       
      $reqId = $bdd->prepare(" 
      DELETE FROM avoir 
      WHERE ID_Client = :idCli AND ID_Adresse = :idAdd 
      "); 
      $reqId->execute(array( 
      'idCli'=>$idCli, 
      'idAdd'=>$idAdd   
      ));       
       
      echo "Adresse supprimée"; 
      $reqAdd->closeCursor(); 
      $reqId->closeCursor(); 
      header("Refresh: 3; URL= zone.php" ) ; 
             
       ;?> 


(La table adresses est liée à la table clients via une table "avoir")
Quand bien même, aucune erreur ne serait affiché, les données restent présentes ET dans la BDD, ET sur la page zone.php

Merci d'avance pour votre aide.

4 réponses

vordano Messages postés 1685 Date d'inscription   Statut Membre Dernière intervention   316
 
salut,

personnellement je ne vois pas l'intérêt de toutes ces fioritures d'alias (:add, :cp, etc...)
pourquoi ne pas rester à l'ancienne ? (enfin c'est probablement pas ça ne problème, mais bon, c'est juste de la curiosité de ma part :)

d'après ce que je vois, un client peut avoir plusieurs adresse, et une adresse peut être utilisé par plusieurs clients non ? (je dis ça parce que tu met l'idClient et l'idAdresse dans ta requête)

est ce qu'à tout hasard tu serais allé voir dans les logs de ton serveur apache ? (dispo sur phpmyadmin)
parce que j'ai comme l'impression que tu dois violer une contrainte de clé étrangère entre client et adresse
0
Numbyscuit Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
C'est pour un projet scolaire, donc il faut être très à cheval sur la sécurité (prepare/execute au lieu de query...). Sinon, plusieurs clients peuvent avoir une même adresse (s'ils sont de la même famille, par exemple...)
Sinon, je ne sais pas où sont les logs d'Apache, mais je ne pense pas que ce soit ça. Pour ce qui était UPDATE/SELECT/INSERT INTO, il n'y avait aucun problème de table/BDD...
0
Utilisateur anonyme
 
Bonjour

Il semblerait qu'il y ait un espace de trop quand tu initialises les champs de tes formulaires :

<input type="text" name="adress" class="champ" value=" ' 

La donnée que tu relis contient donc probablement un espace en trop
0
Numbyscuit Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
Waw, ça fonctionne ! Merci beaucoup !
0