Requête Delete qui ne fonctionne pas [Résolu]

Signaler
-
 philippef -
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

Messages postés
29743
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 octobre 2020
2 842
Bonjour,

Commence par gérer les éventuelles erreurs :
Vu que tu es en PDO , appliques ce qui est indiqué ici :
https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

et, également ceci :
https://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Reviens nous voir avec le code modifié et l'éventuel message d'erreur si ton souci persiste.
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
Messages postés
12606
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
13 octobre 2020
701
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.
OK c'était bien ça. ça m'apprendra à faire attention !!

mille mercis !!