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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Encore un problème de DELETE where id = get (une variable)

par damdec » 19 janv. 2008, 00:12

Alors, il y a plusieurs problèmes :
<form method="post" action="afficheCv.php">
<input type="submit" name="submit2" value="Supprimer la fiche de l'annuaire !">
</form> 
- tu affiches un bouton pour supprimer la fiche mais sans son identifiant ?!
- ton "formulaire" est en mode "post" et tu essayes de récupérer l'identifiant de la fiche (qui est nulle part) dans $_GET[] ??

Pour faire simple, tu peux juste faire un lien qui te renvoi vers cette même page avec en paramètre l'identifiant de la fiche :
echo '<a href="afficheCv.php?id_fiche_suppr='.$id.'" title="supprimer la fiche">Supprimer</a>';
ensuite tu n'a plus qu'a tester si $_GET['id_fiche_suppr'] existe :
if(isset($_GET['id_fiche_suppr']) && !empty($_GET['id_fiche_suppr'])){
$id=intval($_GET['id_fiche_suppr']); //on verifie le type pour un minimum de sécurité
$query='DELETE FROM latable WHERE id='.$id;//la requete
mysql_query($query);
}
IMPORTANT : pense à vérifier et à protéger le contenu de chaque variable utilisée dans tes requêtes sql, en particulier le $_GET et $_POST (les fonctions intval(), addslashes(), mysql_real_escape_string() sont la pour ça), c'est un minimum en matière de sécurité. La documentation à propos de ça ne manque pas, n'hésite pas à y jeter un oeil. :roll:

par AB » 18 janv. 2008, 21:38

Bah j'aurai pas le temps de regarder ça ce week end. Si personne ne répond d'ici là, je verrai ça lundi :wink:

par Lionel M. » 18 janv. 2008, 12:27

Je souhaite afficher une page qui irait chercher dans la base Mysql les infos de l’étudiant en question, repéré par sa valeur de idEtudiant. La page afficherait donc son nom, son adresse, son numéro de téléphone, sa fonction etc.

Avec des boutons « Modifier », on accède à une autre page qui permet de procéder à des modifications des champs et de sauvegarder.

En bas de ma page, un bouton « supprimer la fiche » permet d’effacer purement et simplement la ligne dans la table étudiant.

Le problème ne viendrait-t-il pas de mon bouton « supprimer la fiche », qui ne fait pas appel à get idEtudiant ? Cela expliquerait pourquoi la requête marche en dehors de if (submit) ( blabla) mais pas en dedans…

Encore merci de votre aide et à bientôt !

par AB » 18 janv. 2008, 00:15

Hum ... faut tout revoir.

Indiques nous en détail ce que tu veux comme fonctionnement de ta page.

Que doit-elle afficher lors du premier affichage (au chargement).

Et que souhaites-tu faire ensuite.

Avec ton code j'ai une vague idée mais c'est très brouillon dans ma tête.

par Lionel M. » 17 janv. 2008, 22:12

Voilà tout le code de toute ma page...


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"]; $prenom=$row["prenom"]; $epouse=$row["epouse"]; $adressePerso=$row["adressePerso"]; $diversAdressePerso=$row["diversAdressePerso"]; $cpPerso=$row["cpPerso"]; $villePerso=$row["villePerso"]; $mailPerso=$row["mailPerso"]; $telephonePerso=$row["telephonePerso"]; $societe=$row["societe"]; $fonction=$row["fonction"]; $descriptionFonction=$row["descriptionFonction"]; $adresseProf=$row["adresseProf"]; $diversAdresseProf=$row["diversAdresseProf"]; $cpProf=$row["cpProf"]; $villeProf=$row["villeProf"]; $mailProf=$row["mailProf"]; $telephoneProf=$row["telephoneProf"]; $dateMaj=$row["dateMaj"]; mysql_free_result($result); mysql_close($db); 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); } ?> <table width="778" border="0" cellspacing="0" cellpadding="0"> <tr valign="top"> <td width="522"> <table width="522" border="0" cellspacing="0" cellpadding="0"> <tr> <style> .top{font-style: italic;text-align: center;background-color: #FFFFCC;background-color:#00a0ff;color:#FFFFFF;} .top2{font-size:10pt; vertical-align:center;text-align:center;border:1px solid;border-color:black;font-style: bold;background-color: #FFFFCC;background-color:#00a0ff;color:#FFFFFF;} .titi{font-size:10pt; vertical-align:center;text-align:center;border:1px solid;border-color:black;} </Style> <FORM action="modifierCv.php" method="POST"> <TABLE width="522"> <TR> <TD colspan="2" align="center" class="top"> Promotion <?php echo " ".$promo ?> </TD> </TR> <TR> <TD class="titi" width="20%" rowspan="2"> <FORM action="modifierCv.php" method="POST"> Données Personnelles : <BR> <input type="submit" value="Modifier"> <input type="hidden" name="idEtudiant" value="<?php echo $idEtudiant ?>"> <input type="hidden" name="provenance" value="afficheCv"> </FORM> <TD align="center" class="titi"> <b> <?php echo $civilite." "; echo $prenom." "; echo $nom; if ($epouse<>"") echo " epouse ".$epouse; ?> </b> </TD> </TR> <TR> <TD class="titi"> <?php echo $adressePerso; if($diversAdressePerso<>"") echo "<BR>"; echo $diversAdressePerso; if($cpPerso<>"" || $villePerso<>"") echo "<BR>"; echo $cpPerso." ".$villePerso; echo "<BR><BR>"; echo $telephonePerso; echo "<BR><BR>"; echo $mailPerso ?> </TD> </TR> <TR> <TD class="titi"> <FORM action="modifierCv.php" method="POST"> Données Professionnelles <BR> <input type="submit" value="Modifier"> <input type="hidden" name="idEtudiant" value="<?php echo $idEtudiant ?>"> <input type="hidden" name="provenance" value="afficheCv"> </FORM> </TD> <TD class="titi"> <?php echo $societe; echo "<BR><BR>"; echo $fonction; echo "<BR>"; echo $descriptionFonction; echo "<BR><BR>"; echo $adresseProf; if ($diversAdresseProf<>"") echo "<BR>"; echo $diversAdresseProf; if($cpProf<>"" || $villeProf<>"") echo "<BR>"; echo $cpProf." ".$villeProf; echo "<BR><BR>"; echo $mailProf; echo "<BR>"; echo $telephoneProf; ?> </TD> </TR> <TR> <TD width="20%" class="titi"> <FORM action="cursus.php" method="GET"> Formations : <BR> <input type="submit" value="Modifier"> <input type="hidden" name="idEtudiant" value="<?php echo $idEtudiant ?>"> <input type="hidden" name="provenance" value="afficheCv"> </FORM> </TD> <TD class="titi"> <BR> <?php $db = mysql_connect("mysql10.oxyd.fr","xxxx","xxxx"); mysql_select_db("xxxx",$db); $sql="SELECT * FROM cursus WHERE idEtudiant=".$idEtudiant." ORDER BY idCursus"; $result = mysql_query($sql) or die("Query Failed"); if(mysql_num_rows($result)>0) { echo '<table width="100%">'; echo '<TR>';; echo '<TD class=top2>'; echo'Intitulé de la formation'; echo '</TD>'; echo '<TD class=top2>'; echo 'Etablissement'; echo '</TD>'; echo '</TR>'; while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "<TR>"; echo '<TD class="titi">'; echo $row["intitule"]."&nbsp;"; echo "</TD>"; echo '<TD class="titi">'; echo $row["etablissement"]."&nbsp;"; echo "</TD>"; echo "</TR>"; } echo "</TABLE>"; } ?> <BR> </TD> </TR> <TR> <TD width="20%" class="titi" > <FORM action="travail.php" method="GET"> Expériences Professionnelles : <BR> <input type="submit" value="Modifier"> <input type="hidden" name="idEtudiant" value="<?php echo $idEtudiant ?>"> <input type="hidden" name="provenance" value="afficheCv"> </FORM> </TD> <TD class="titi"> <BR> <?php $db = mysql_connect("mysql10.oxyd.fr","xxx","xxxx"); mysql_select_db("xxxx",$db); $sql="SELECT * FROM travail WHERE idEtudiant=".$idEtudiant." ORDER BY idTravail"; $result = mysql_query($sql) or die("Query Failed"); if(mysql_num_rows($result)>0) { echo '<table width="100%">'; echo '<TR>';; /* echo '<TD class=top2>'; echo'Fonction occupée'; echo '</TD>'; */ echo '<TD class=top2>'; echo 'Société'; echo '</TD>'; echo '</TR>'; while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "<TR>"; /* echo '<TD class="titi">'; echo $row["fonction"]; echo "</TD>"; */ echo '<TD class="titi">'; echo $row["societe"]; echo "</TD>"; echo "</TR>"; } echo "</TABLE>"; } ?> <BR> </TD> </TR> <TR> <TD colspan="2" class="titi"> <p><BR> Date de Mise à jour : <?php if($dateMaj<>"0000-00-00") echo substr($dateMaj,8,2)."-".substr($dateMaj,5,2)."-".substr($dateMaj,0,4); else echo " Aucune"; ?> <BR> <BR> </p></TD> </TR></table> <TABLE width="521"> <td width="255"> <FORM method="POST" action="listeCv.php"> <input type="submit" value="Retour"> </FORM> </td> <td width="254"> <form method="post" action="afficheCv.php"> <input type="submit" name="submit2" value="Supprimer la fiche de l'annuaire !"> </form> </td> </table> <hr>

par AB » 17 janv. 2008, 22:01

Pour que l'on puisse t'aider il faut tout le code de ton formulaire ainsi que toute la requête que tu souhaites déclencher avec l'envoi de ce formulaire. (sans les paramètres de connexion à la bdd évidemment)

par Lionel M. » 17 janv. 2008, 21:44

Et bien, je débute franchement en code...

Pour que les actions du if se déclenchent, j'ai mis le code suivant dans la partie html de la page :

Code : Tout sélectionner

<form method="post" action="afficheCv.php"> <input type="submit" name="submit2" value="Supprimer la fiche de l'annuaire !"> </form>

par AB » 17 janv. 2008, 18:48

if($submit2) ...

Elle est définie où cette variable $submit2, en tous cas elle a pas l'air d'être passée dans ton URL

par Lionel M. » 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

par d0m » 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.

par Lionel M. » 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 :?

par d0m » 17 janv. 2008, 17:15

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

par Lionel M. » 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..)

par d0m » 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.

par Lionel M. » 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...