Page de "Suppression d'un enregistrement" ne fonct

Eléphanteau du PHP | 13 Messages

17 avr. 2005, 11:44

Bonjour à tous, :D

J'ai créé :
- une base de donnée pour mes dvd perso = bdd_dvdperso.
- une table = listedvd.
- une connexion = connexionDvdRay
- un champ (clé primaire) = titre
.

J'ai déjà créé plusieurs pages php qui fonctionnent :langue: . Mais la page de suppression d'un dvd, Suppr.php, ne fonctionne pas :-k . J'ai pourtant bien suivi le manuel que je viens d'acheter :ordi:.

Après la suppression, la page Liste.php doit s'ouvrir. Mais moi, rien ne se passe, il n'y a même pas de message d'erreur. Après avoir sélectionné mon dvd à supprimer dans la liste, et appuyé sur le bouton Supprimer, je reste sur ma page Suppr.php sans que le dvd n'est été supprimé.

Voici le code de ma page :

Code : Tout sélectionner

<?php require_once('../Connections/connexionDvdRay.php'); ?> <?php function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue; switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; } if ((isset($_GET['titre'])) && ($_GET['titre'] != "")) { $deleteSQL = sprintf("DELETE FROM listedvd WHERE titre=%s", GetSQLValueString($_GET['titre'], "text")); mysql_select_db($database_connexionDvdRay, $connexionDvdRay); $Result1 = mysql_query($deleteSQL, $connexionDvdRay) or die(mysql_error()); $deleteGoTo = "Liste.php"; if (isset($_SERVER['QUERY_STRING'])) { $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?"; $deleteGoTo .= $_SERVER['QUERY_STRING']; } header(sprintf("Location: %s", $deleteGoTo)); } mysql_select_db($database_connexionDvdRay, $connexionDvdRay); $query_ListeDvdSuppression = "SELECT titre FROM listedvd ORDER BY titre ASC"; $ListeDvdSuppression = mysql_query($query_ListeDvdSuppression, $connexionDvdRay) or die(mysql_error()); $row_ListeDvdSuppression = mysql_fetch_assoc($ListeDvdSuppression); $totalRows_ListeDvdSuppression = mysql_num_rows($ListeDvdSuppression); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html><!-- InstanceBegin template="/Templates/AccueilDvd.dwt.php" codeOutsideHTMLIsLocked="false" --> <head> <!-- InstanceBeginEditable name="doctitle" --> <title>Document sans titre</title> <!-- InstanceEndEditable --><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <style type="text/css"> <!-- body { margin-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; background-color: #000000; } .Style8 { color: #999999; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; } .Style9 { color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; } .Style15 {font-size: 14px; color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-weight: bold; } .Style17 {color: #FFFFFF; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 14px; } --> </style> <!-- InstanceBeginEditable name="head" --> <style type="text/css"> <!-- .Style18 {color: #FFFF00} --> </style> <style type="text/css"> <!-- .Style19 { font-size: 12px; font-family: Verdana, Arial, Helvetica, sans-serif; } --> </style> <!-- InstanceEndEditable --> <link href="../DvdCdRay.css" rel="stylesheet" type="text/css"> </head> <body> <table width="800" border="0" cellspacing="0" cellpadding="0"> <tr> <th width="150" height="55" rowspan="2" align="left" valign="top" scope="col"><a href="../index.php"><img src="../images/LogoDvdCd.jpg" width="150" height="55" border="0"></a></th> <th align="center" valign="top" scope="col"><table width="500" border="0" cellspacing="0" cellpadding="0"> <tr> <th height="10" colspan="5" scope="col"></th> </tr> <tr align="center" valign="middle"> <td><span class="Style15"><a href="Ajout.php">Ajout</a></span></td> <td><span class="Style17">Modif</span></td> <td><span class="Style17"><a href="Suppr.php">Supp</a></span></td> <td><span class="Style17"><a href="Liste.php">Liste</a></span></td> <td><span class="Style15">Recherche</span></td> </tr> </table></th> </tr> <tr> <th align="center" valign="bottom" scope="col"><span class="Style8">ESPACE PUBLIC</span></th> </tr> </table> <br> <!-- InstanceBeginEditable name="AccueilDvd" --> <table width="800" border="0" cellspacing="0" cellpadding="0"> <tr> <th scope="col"><form action="Suppr.php" method="get" name="DVDsuppr" id="DVDsuppr"> <table width="500" border="0" cellspacing="0" cellpadding="0"> <tr> <th height="40" colspan="3" scope="col"><table width="190" height="25" border="0" cellpadding="0" cellspacing="0" bgcolor="#A21C1D"> <tr> <th scope="col"><span class="Style18 Style19">SUPPRESSION D'UN DVD </span></th> </tr> </table></th> </tr> <tr> <th height="25" align="right" scope="col"><select name="dvd" id="dvd"> <?php do { ?> <option value="<?php echo $row_ListeDvdSuppression['titre']?>"><?php echo $row_ListeDvdSuppression['titre']?></option> <?php } while ($row_ListeDvdSuppression = mysql_fetch_assoc($ListeDvdSuppression)); $rows = mysql_num_rows($ListeDvdSuppression); if($rows > 0) { mysql_data_seek($ListeDvdSuppression, 0); $row_ListeDvdSuppression = mysql_fetch_assoc($ListeDvdSuppression); } ?> </select> </th> <th width="50" scope="col">&nbsp;</th> <th width="230" align="left" scope="col"><input type="submit" name="Submit" value="Supprimer"></th> </tr> <tr> <th height="25" colspan="3" scope="col">&nbsp;</th> </tr> </table> </form></th> </tr> </table> <!-- InstanceEndEditable --> </body> <!-- InstanceEnd --></html> <?php mysql_free_result($ListeDvdSuppression); ?>

J'espère que qqln pourra me venir en aide.

Merci d'avance, :pouce:
Adam
EasyPhp v1.8.0.1 - Dreamweaver MX 2004 - Manuel : "PHP/MySQL avec Dreamweaver MX 2004" de Jean-Marie Defrance (Ed. EYROLLES)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

17 avr. 2005, 21:46

ouhlala qu'est-ce que c'est compliqué rien que pour supprimer un dvd ! :)

déjà si tu peux éditer ton message et utiliser les balises PHP au lieu de Code pour ton code ce serait mieux :)

apparament tu fais ton test sur une variable de formulaire "titre"
if ((isset($_GET['titre'])) && ($_GET['titre'] != "")) { 
seulement dans ton formulaire, je ne vois aucun champ qui s'appelle "titre"

par contre je vois une liste déroulante qui s'appelle "dvd" et qui liste les titres de dvd

est-ce que le problème ne serait pas là ?

renomme ton select en "titre" et tiens nous au courant ;)

Invité
Invité n'ayant pas de compte PHPfrance

17 avr. 2005, 23:25

Merci pour ta réponse. :D
En effet c'est bien compliqué :cry: !
Je débute en php et je me reporte à un manuel qui passe uniquement par les fonctions de Dreamweaver. Donc le code je connais malheureusement très peu.

Qu'appelles-tu "ton select" ?

Merci à toi, :agenouille:
Adam

================================
EasyPhp v1.8.0.1 - Dreamweaver MX 2004 - Manuel : "PHP/MySQL avec Dreamweaver MX 2004" de Jean-Marie Defrance (Ed. EYROLLES)

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

17 avr. 2005, 23:36

select : je parlais de la balise <select> qui réalise une liste déroulante en HTML, et qui va ici lister tes titres de dvd
c'est ce bout de code
<select name="dvd" id="dvd">
            <?php
do { 
?>
            <option value="<?php echo $row_ListeDvdSuppression['titre']?>"><?php echo $row_ListeDvdSuppression['titre']?></option>
            <?php
} while ($row_ListeDvdSuppression = mysql_fetch_assoc($ListeDvdSuppression));
  $rows = mysql_num_rows($ListeDvdSuppression);
  if($rows > 0) {
      mysql_data_seek($ListeDvdSuppression, 0);
     $row_ListeDvdSuppression = mysql_fetch_assoc($ListeDvdSuppression);
  }
?>
          </select> 
ce "select" transmet une variable qui s'appelle "dvd" (grâce à l'attribut "name" du select)

et dans ton code tu cherches si une variable "titre" à été transmise, ce qui n'est à priori jamais le cas

je te disais donc de renommer le select par "titre" comme ça :

Code : Tout sélectionner

<select name="titre" id="dvd">
et de nous dire ce que cela donne

enfin, sans te tenir un discours intégriste, il est tout de même bon de savoir à quoi correspond le code que tu tapes
car au moindre problème, dur dur d'aller chercher le bug :)

Dreamweaver génère souvent tout un tas de code inutile
ici, tu pourrais te contenter d'un petit formulaire et dun bout de code PHP pour supprimer ton enregistrement, mais c'est noyé dans plein de code inutile, ou au moins dérangeant si tu ne connais pas vraiment et que tu cherches des erreurs

exemple, la fonction "GetSQLValueString", ben elle sert pas à grand chose...

enfin c'est un avis perso ;)

mais je me permet de te renvoyer sur cette adresse, où tu trouveras des petits tutoriaux : www.phpdebutant.org
dans ton cas :
- Interroger une table MySQL (pour lister tes dvd dans la liste déroulante)
- Récupérer les valeurs d'un formulaire (pour savoir quel dvd supprimer)
- Alimenter une ou plusieurs tables mySQL (pour insérer des valeurs mais aussi pour en supprimer, donc pour supprimer ton dvd de la table)

Invité
Invité n'ayant pas de compte PHPfrance

18 avr. 2005, 00:03

Alors là, respect ! :agenouille:
Non seulement tu as trouvé du premier coup mais en plus tu m'as donné des explications claires et précises qui me permettent d'y voir mieux. :D

C'est vrai qu'on m'a déjà dit que Dreamweaver générait du code tellement inutile qu'il plantait les pages.

Mais alors comment se fait-il que j'ai cette erreur alors que j'ai suivi scrupuleusment mon manuel ? J'ai refait l'exercice plusieurs pensant que je m'étais trompé, et aussi en soupçonnant justement Dreamweaver de planter.

Encore un grand merci car j'ai passé ma journée à chercher en vain.
Mais tu n'es pas sauvé, car je vais apprendre à créer une page pour modifier des enregistrements, alors si ça marche pô... :oops:

Adam :wink:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 avr. 2005, 00:18

il n'est pas impossible qu'il y ait une erreur dans le manuel...

ta page de modification d'enregistrements est justement l'occasion rêvée de mettre le nez dans le code tout doucement

tu as des tas de ressources en ligne : ce forum, le site que je t'ai donné et il y en a d'autres, la doc officielle et éventuellement ton manuel ;)
tu peux t'en servir pour récupérer des bouts de codes correspondants à des actions simples et les assembler pour obtenir ce que tu veux, plutôt que de recopier en entier un exemple compliqué

ce qui te permettra de modifier rapidement ton code un jour si tu veux le réutiliser un jour

bon courage, et n'hésite pas à repasser si tu as des problèmes ;)

Invité
Invité n'ayant pas de compte PHPfrance

20 avr. 2005, 13:59

Bonjour, :D

Concernant la suppression d'enregistrements, j'ai un autre problème.

J'ai fait plusieurs essais de suppression, qui fonctionnent, mais je viens de m'appercevoir que la numérotation de l'ID (incrémentation auto) ne reprend pas au dernier enregistrement valide, mais continue après les suppressions. J'ai l'impression qu'il les garde en mémoire. C'est-à-dire que j'ai entré 16 DVD dans ma base, mais l'ID du dernier dvd affiche le numéro 27 :shock: ! Ma liste est numérotée de 1 à 15, pas de problème, mais le 16ème affiche une ID 27.

Comment puis-je résoudre ce problème ?

Merci d'avance,
Adam

ViPHP
ViPHP | 2144 Messages

20 avr. 2005, 14:44

J'imagine que ton id est en autoincrément, ce qui fait sa valeur lui est attribuée par la base donnée, et qu'une valeur n'est jamais attribuée deux fois, même si elle n'est plus dans la table.
Donc c'est normal qu'il y ai des "trous" si tu as fais des suppressions

Invité
Invité n'ayant pas de compte PHPfrance

20 avr. 2005, 15:59

Donc c'est normal ?
Mais alors, lorsqu'il y a plusieurs milliers d'enregistrements, comment connaître le véritable nombre d'enregistrements ?

Merci,
Adam

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

20 avr. 2005, 17:07

t'occupe pas, un identifiant c'est juste qchose d'unique, pour identifier justement :)

pour connaitre le nombre d'enregistrements :

Code : Tout sélectionner

SELECT COUNT(*) FROM table

Invité
Invité n'ayant pas de compte PHPfrance

20 avr. 2005, 17:11

Merci à toi. Tu as toujours la bonne réponse ! :pouce:

Adam