Requête Delete qui ne fonctionne pas

Résolu
Bonjour,

J'essaie de supprimer un enregistrement de ma bdd.
J'ai récupéré un code mais ça ne marche pas. Et je tourne depuis 2 h !!
if (isset($_POST['yes'])){
	$sql = $cnx->prepare("DELETE * FROM membres WHERE id = :id ");
	$sql->bindParam(':id', $liste_nom, PDO_PARAM_INT);
	$sql->execute();	
}

$liste_nom contient l'id de l'enregistrement à supprimer

Merci de votre aide

Configuration: Windows / Chrome 79.0.3945.79

3 réponses

  1. J'ai modifié ma requête et et le formulaire

    le code de la page
    <?php
    include("connect.php");
    $liste_nom = isset($_POST['liste_nom']) ? $_POST['liste_nom'] : '';
    $identite = '';
    
    $_GET['id'];
    if (isset($_POST['afficher'])){
    	$sql = $cnx->prepare("SELECT * FROM membres WHERE id = ? ");
    	$sql->execute(array($liste_nom));
    	$result = $sql->rowCount();
    	if ($result = $sql->fetch(PDO::FETCH_ASSOC)){
    		$id = $result['id'];
    		$nom = $result['nom'];
    		$prenom = $result['prenom'];
    		$identite = $prenom.' '.$nom;
    	}
    }
    if ((isset($_POST['no'])) OR (isset($_POST['abandon']))){
    	$identite = '';
    	$liste_nom = '';
    }
    if (isset($_POST['yes'])){
    echo $_GET['id'];
    	$sql = "DELETE * FROM membres WHERE id = :id ";
    	try {
    		$requete = $cnx->prepare($sql);
    		$sql->bindParam(':id', $_GET['id'], PDO::PARAM_INT);
    		$sql->execute();
    	}	
    	catch(Exception $e){
      		// en cas d'erreur dans la requete:
       		echo " Erreur ! ".$e->getMessage();
    	}
    }
    ?>
    <div style="text-align:center;margin-left:auto;margin-right:auto;background-color:#FF7F00;width:80%;box-shadow:0.7em 0.7em 0.7em #CC5500;">
    	<p>
    	<FORM name="research" ACTION = "index.php?page=delmember&id=<?php echo $liste_nom; ?>" METHOD="POST"> 
    		<br />Sélectionner dans la liste la personne à retirer de la liste des membres<br /><br />
    		<select name="liste_nom" size="10" style="width:20em;">
    		 	<!---<option value = "" selected>Sélectionner</option>--->
    		<?php 
    			error_reporting(E_ALL);
    			ini_set('display_errors', TRUE);
    			ini_set('display_startup_errors', TRUE);
    			//préparation de la requête et des variables
     			$sql = "SELECT * FROM membres WHERE nationalite = 'Française' ORDER BY nom, prenom";
    			try {
    				$requete = $cnx->prepare($sql);
    				$requete->execute();
    				$arr_membres = $requete->fetchAll();// on stocke le resultat de la requete dans un array
    			}
    			catch(Exception $e){
      				// en cas d'erreur dans la requete:
       				echo " Erreur ! ".$e->getMessage();
    			}
    			if(!empty($arr_membres)){ // on s'assure que la variable n'est pas vide
    				foreach($arr_membres as $M){ // on boucle dessus à l'aide d'un foreach
    					echo '<option value="'.$M['id'].'">'; echo $M['nom'].'  '.$M['prenom'].'</option>';// on affiche les données 
            			}
    			}
    		?>
    		</select>
    		<input style="cursor:pointer;" type="submit" name="afficher" value="Afficher" /><br />
    		<?php 
    		if (!empty($identite)){ ?>
    		<p>
    		<?php echo 'Voulez-vous vraiment retirer <b>';echo $identite; echo '</b> du fichier des membres du jumelage ?'; ?><br /><br />
    		<input style="cursor:pointer;" type="submit" name="yes" value="OUI" />
    		<input style="cursor:pointer;" type="submit" name="no" value="NON" />
    		<input style="cursor:pointer;" type="submit" name="abandon" value="Abandonner" />
    		</p>
    		<?php
    		} ?>
    
    	</FORM><br />
    	</p>
    </div>
    

    le remplissage du <select> est correct.
    quand je clique sur le bouton "afficher" tout se passe normalement.
    quand je clique sur le bouton "oui" je récupère bien l'id passé dans l'url
    et il s'affiche.
    par contre j'obtient le message suivant :
    Fatal error: Call to a member function bindParam() on string in C:\Weblocal\Sites\Jumelage\fr\connexion\delmember.php on line 28
    

    le ligne est
    $sql->bindParam(':id', $_GET['id'], PDO::PARAM_INT);
    


    Merci
    pour info me css sera placé dans le fichier css
    0
    1. Contributeur Ambassadeur
      bonjour, tu ne nous montres qu'une partie du message d'erreur.
      je pense qu'il faut remplacer $sql par $requete en 27 et 28.
      0
  2. OK c'était bien ça. ça m'apprendra à faire attention !!

    mille mercis !!
    0