Requête Delete qui ne fonctionne pas

Résolu/Fermé
philippef - 18 déc. 2019 à 11:20
 philippef - 18 déc. 2019 à 14:17
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

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
18 déc. 2019 à 11:28
Bonjour,

Commence par gérer les éventuelles erreurs :
Vu que tu es en PDO , appliques ce qui est indiqué ici :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

et, également ceci :
https://forums.commentcamarche.net/forum/affich-37584947-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.
0
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
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
18 déc. 2019 à 13:52
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
OK c'était bien ça. ça m'apprendra à faire attention !!

mille mercis !!
0