Encore un problème de DELETE where id = get (une variable)

Eléphanteau du PHP | 11 Messages

17 janv. 2008, 15:11

Salut à tous,

J'ai une question toute bête, mais je bloque. J'ai une table mysql, dont j'affiche le contenu avec un code php. Pour savoir quel enregistrement afficher, l'utilisateur clique dans une liste, ce qui passe par get une valeur d'id, la clé étant idEtudiant (c'est un annuaire pour les anciens étudiants d'un diplome à la fac)

On arrive donc à l'affichage de la fiche de l'étudiant en question, avec son nom, son adresse, etc.
On peut modifier les données avec un petit formulaire, mais je voudrais rajouter un bouton "cliquez ici pour supprimer la fiche de cet étudiant"

J'essaie donc de faire un truc du style DELETE from etudiants WHERE idEtudiant = get ($idEtudiant), mais ça ne marche pas.

Je vous joins le code. Est-ce que quelqu'un pourrait m'aider à corriger le code pour supprimer la fiche dont l'étudiant est affiché ?

Merci encore de votre aide et de vos réponses !
Amicalement
Lionel


Code pour afficher la fiche

Code : Tout sélectionner

<? error_reporting(E_ALL & ~E_NOTICE); $db = mysql_connect("mysql10.oxyd.fr","XXXX","XXXX"); mysql_select_db("XXXX",$db); $sql="SELECT * FROM etudiants WHERE idEtudiant='".$_GET["idEtudiant"]."'"; $result = mysql_query($sql) or die("Query Failed"); $row = mysql_fetch_array($result, MYSQL_ASSOC); $nbRows = mysql_num_rows($result); $idEtudiant=$row["idEtudiant"]; $promo=$row["promo"]; $civilite=$row["civilite"]; $nom=$row["nom"]; etc etc etc etc $telephoneProf=$row["telephoneProf"]; $dateMaj=$row["dateMaj"]; mysql_free_result($result); ?>

Et pour la suppression, c'est là que ça marche pas. Aucun message d'erreur, il affiche bien le message "etudiant effacé", mais il n'efface rien du tout

Code : Tout sélectionner

<? if($submit2){ $db = mysql_connect("mysql10.oxyd.fr","XXX","XXX"); mysql_select_db("XXX",$db); $sql="SELECT * FROM etudiants WHERE idEtudiant='".$_GET["idEtudiant"]."'"; $result = mysql_query($sql) or die("Query Failed"); mysql_query("DELETE FROM etudiants WHERE idEtudiant=".$_GET["idEtudiant"]); mysql_close($db); echo"<b>Etudiant effacé !</b>"; } ?>

Et la table :


CREATE TABLE etudiants (
idEtudiant mediumint(8) unsigned NOT NULL auto_increment,
promo varchar(4) collate latin1_general_ci default NULL,
civilite varchar(10) collate latin1_general_ci NOT NULL default '',
nom varchar(100) collate latin1_general_ci default NULL,
epouse varchar(100) collate latin1_general_ci default NULL,
prenom varchar(50) collate latin1_general_ci default NULL,


etc etc etc etc etc


mailProf varchar(255) collate latin1_general_ci default NULL,
telephoneProf varchar(50) collate latin1_general_ci default NULL,
dateMaj date default NULL,
photo varchar(100) collate latin1_general_ci default NULL,
PRIMARY KEY (idEtudiant)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

d0m
Mammouth du PHP | 1141 Messages

17 janv. 2008, 15:18

tu dois apprendre à debugger par toi même.
Ici tu peux déjà afficher 2 informations :
- ta requête
- les erreurs SQL
//connection avec affichage des erreurs SQL
$db = mysql_connect("mysql10.oxyd.fr","XXX","XXX") or die('connection echoue : '.mysql_error());
      mysql_select_db("XXX",$db);
      
$sql="SELECT * FROM etudiants WHERE idEtudiant='".$_GET["idEtudiant"]."'";
//selection avec affichage des erreurs SQL
$result = mysql_query($sql) or die("Query Failed: ".mysql_error());

//effacement avec de la requete et des erreurs SQL
$requete_effacement = "DELETE FROM etudiants WHERE idEtudiant=".$_GET["idEtudiant"];
echo 'requete_effacement';
mysql_query($requete_effacement) or die('effacement echoue : '.mysql_error());

 mysql_close($db); 

Eléphanteau du PHP | 11 Messages

17 janv. 2008, 15:23

Voilà ce que j'obtiens comme message :

requete_effacementeffacement echoue : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Je me demande ce que ça peut être...

ViPHP
ViPHP | 2144 Messages

17 janv. 2008, 15:31

Tu as bien afficher les messages d'erreur comme d0m te l'avait demandé, il te reste maintenant à faire afficher la requette en elle-même et à bien l'observer pour voir ce qui y cloche...

Eléphanteau du PHP | 11 Messages

17 janv. 2008, 15:40

En rajoutant ça

Code : Tout sélectionner

<? if($submit2){ //connection avec affichage des erreurs SQL $db = mysql_connect("mysql10.oxyd.fr","xxx","xxx") or die('connection echoue : '.mysql_error()); mysql_select_db("xxx",$db); $sql="SELECT * FROM etudiants WHERE idEtudiant='".$_GET["idEtudiant"]."'"; //selection avec affichage des erreurs SQL $result = mysql_query($sql) or die("Query Failed: ".mysql_error()); //effacement avec de la requete et des erreurs SQL $requete_effacement = "DELETE FROM etudiants WHERE idEtudiant=".$_GET["idEtudiant"]; echo $requete_effacement; mysql_query($requete_effacement) or die('effacement echoue : '.mysql_error()); mysql_close($db); } ?>

Voilà ce que j'obtiens : DELETE FROM etudiants WHERE idEtudiant=effacement echoue : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

J'en déduis qu'il n'arrive pas à récupérer la valeur de la variable, car il affiche idEtudiant= .... rien du tout

Je précise que je m'excuse de ma nioubitude, et que je vous remercie de perdre votre temps avec moi :oops:

Voilà l'url de travail : http://www.masterpro-emfi.fr/annuaire/a ... Etudiant=3
Modifié en dernier par Lionel M. le 17 janv. 2008, 15:51, modifié 2 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 janv. 2008, 15:50

La réponse à cette question est dans le message de d0m... il te suffit de mettre ta requête dans une variable au lieu de la déclarer directement dans ton mysql_query() (comme tu l'as fait pour ton SELECT :)) et tu pourras ainsi facilement l'afficher et probablement voir ce qui pose problème à MySQL :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 11 Messages

17 janv. 2008, 16:03

en utilisant exactement le code de d0m, j'obtiens donc ça :

DELETE FROM etudiants WHERE idEtudiant=effacement echoue : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Donc j'ai le texte effacement echoue qui a été précisé dans le or die.. et je ne sais pas pourquoi ma requete ne marche pas

d0m
Mammouth du PHP | 1141 Messages

17 janv. 2008, 16:17

Tu cherches ton problème au mauvais endroit.
comme tu le dis, il n'arrive pas à trouver de variable $_GET["idEtudiant"].

Tu peux déjà voir dans ton url (car la méthode est get) si idEtudiant apparait
Normalement ça ne devrait pas être le cas donc c'est dans ta page d'avant qu'il y a problème.
Ta variable idEtudiant n'est pas correctement envoié.

Eléphanteau du PHP | 11 Messages

17 janv. 2008, 16:53

est ce que le if (submit) { blabla } empeche de récuperer la variable ?
J'arrive à supprimer parfaitement en dehors du if submit, mais dès que je mets les instructions à l'intérieur des crochets du if, cela n'efface plus...

d0m
Mammouth du PHP | 1141 Messages

17 janv. 2008, 17:01

non la boucle n'empeche rien en elle même.
Ton problème vient vraiment d'avant. Ta variable n'est pas passé par l'url.

Eléphanteau du PHP | 11 Messages

17 janv. 2008, 17:08

dommage, car en faisant echo $idEtudiant et echo $marequete j'arrive à afficher les bonnes choses... mais en dehors du if seulement!
Merci pour votre aide, je vais regarder la page d'avant pour voir comment est posté cette variable
(c'est un code que je récupère, et comme en plus je débute..)

d0m
Mammouth du PHP | 1141 Messages

17 janv. 2008, 17:15

as tu regardé si idEtudiant figure dans l'url?

Eléphanteau du PHP | 11 Messages

17 janv. 2008, 17:26

oui, j'ai bien une adresse www.machinchose/annuaire/afficheCv.php?idEtudiant=7 ,

à laquelle je parviens depuis une autre page (listeCv.php) qui recense tous les étudiants, en utilisant le code suivant

echo '<a href=afficheCv.php?idEtudiant='. $row["idEtudiant"] .'>'. strtoupper($row["nom"]).' '.$row["prenom"] .'</a>

J'avoue que je ne sais pas trop par quel bout le prendre :?

d0m
Mammouth du PHP | 1141 Messages

17 janv. 2008, 17:32

c'est ta requête

Code : Tout sélectionner

$sql="SELECT * FROM etudiants WHERE idEtudiant='".$_GET["idEtudiant"]."'";
qui échoue.
essaie de l'afficher avec un
echo $sql;
Sinon dans tes 2 requetes tu traites le champ idEtudiant d'abord comme un chaine de caractères en ajoutant des quotes autour de l'identifiant dans la requête SELECT
ensuite comme une valeur numérique dans la requête DELETE en ne mettant pas de quote.
Je pense que ton champ est un entier, il faut donc virer les quotes dans la requête de selection.

Eléphanteau du PHP | 11 Messages

17 janv. 2008, 17:47

en effet, en faisant cette requete sans les quotes donc

Code : Tout sélectionner

$sql="SELECT * FROM etudiants WHERE idEtudiant=".$_GET["idEtudiant"]."";
le $echo sql; me retourne Query failed