modifier, supprimer un enregistrement

Répondre
delfyno
le 06/12/2010 à 22:50
delfyno
Bonjour,
J'ai un souci et je sais pas comment le résoudre
J'ai une page qui affiche des enregistrements d'une base de données avec un lien modifier, quand je clique sur modifier, c'est censé m'ouvrir une autre page avec le formulaire pré-rempli des données de la base de données mais cela m'affiche ceci Erreur, l'id n'a pas été renseigné et dans la barre d'adresse j'ai ceci
http://localhost/Projet/Projetfoot/page1/modifier.php?id=

et quand je tape id=1, j'ai ceci qui s'affiche SELECT * FROM membres WHERE id=1
Désolé mais aucun enregistrement ne correspond

Aidez moi s'il vous plaît

Voici mes codes sources :
page afficher.php
<?php
require_once("connect_db.php");
$sql = "SELECT * FROM membres;";
$resultat = qdb($sql);
$nombre_resultats = mysql_num_rows($resultat);
?>
<body bgcolor = "green">
<b>Quelles equipes voulez-vous modifier ?</b>
<center>
<table border = "1">
<tr bgcolor = "red">
<th>id</th>
<th>Pseudo</th>
<th>Mot de passe</th>
<th>Date</th>
<th colspan = "2">Admin</th>
</tr>
<?php
while ($enregistrements = mysql_fetch_array($resultat)) {?>
<tr bgcolor = "yellow">
<td><?php echo $enregistrements['id']; ?></td>
<td><?php echo $enregistrements['pseudo']; ?></td>
<td><?php echo $enregistrements['motdepasse']; ?></td>
<td><?php echo $enregistrements['date']; ?></td>
<td><div align = center><?php echo '<a href="modifier.php?id='.$id.'">'; ?> Modifier</a></td>
</tr>
<?php
}
?>
</table>
<hr /><a href = "index.php"><blink>Retour à l'accueil</blink></a>
</body>


page modifier.php
<?php
require_once("connect_db.php");

if($_REQUEST['id']) {
$id = $_REQUEST['id'];
// on se connecte à la bdd pour récupérer les informations de la fiche
$sql = "SELECT * FROM membres WHERE id=".$id;
$resultat = qdb($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
echo $sql . '<br />';
// si un enregistrement correspond
if(@mysql_num_rows($sql)) {
$sql = "SELECT * FROM membres WHERE id=".$id;;
echo $id;
$resultat = qdb($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
// c'est ok alors on récupère les infos
$id = $_REQUEST['id'];
$pseudo = $_REQUEST['pseudo'];
$motdepasse = $_REQUEST['motdepasse'];
?>

<form action = "modifier2.php" method = "get">
<input type = "hidden" name = "id" value = "<?php echo $id; ?>">
<input type = "text" name = "pseudo" value = "<?php echo $pseudo; ?>">
<input type = "text" name = "motdepasse" value = "<?php echo $motdepasse; ?>">
<input type = "submit" value = "Valider la modification">
</form>

<?php
}
// si l'id n'est pas correcte on affiche une erreur
else {
echo 'Désolé mais aucun enregistrement ne correspond';
}
}
// si l'id n'est pas renseignée on affiche une erreur
else {
echo 'Erreur, l\'id n\'a pas été renseigné';
}
?>


page modifier2.php
<?php
require_once("connect_db.php");

// on teste si les variables du formulaire sont déclarées
if($_GET['id']) {
$id = $_GET['id'];
$pseudo = $_GET['pseudo'];
$motdepasse = $_GET['motdepasse'];
}
if (isset($_POST['pseudo']) && isset($_POST['motdepasse'])) {

// lancement de la requête
$sql = 'UPDATE membres SET motdepasse="'.$_POST['motdepasse'].'" WHERE pseudo="'.$_POST['pseudo'].'"';

// on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die)
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

// on ferme la connexion à la base
mysql_close();

// un petit message permettant de se rendre compte de la modification effectuée
echo 'Le nouveau mot de passe de '.$_POST['pseudo'].' est : '.$_POST['motdepasse'];
}
else {
echo 'Les variables du formulaire ne sont pas déclarées';
}
?>


Merci d'avance
<config>Windows XP / Safari 534.7</config>
moogli
le 06/12/2010 à 23:34
moogli
page_afficher.php

c'est $enregistrements['id'] qu'il faut mettre dans le lien et pas $id (qui d'ailleur n'existe pas tu doit avoir un message d'erreur, si ce n'est pas le cas ajoute error_reporting(E_ALL |E_STRICT); en 1ère ligne de ton script !


page modifier.php utilise $_GET plutôt que $_REQUEST (question de "sécurité").
vire l'arobase du if(@mysql_num_rows($sql))
tu utilise deux fois ta fonction qdb($sql) (qui ne sert qu'a utiliser qdb($sql) plutôt que mysql_query() ?) une seule suffit.

tu devrais avoir un message d'erreur sur le mysql_num_row sinon c'est qu'effectivement l'id n'est pas dans la table.

quand à
// c'est ok alors on récupère les infos
$id = $_REQUEST['id'];
$pseudo = $_REQUEST['pseudo'];
$motdepasse = $_REQUEST['motdepasse'];


je vois pas d'ou sort $_REQUEST je te conseil de revoir le fonctionnement de php et mysql dans les cours (a moins que ta fonction qdb soit super compete et fasse les chose bien mais je suis pas sur la).

la dernière page semble correct.

@+
Il en faut peu pour être heureux !!!!!
delfyno
le 07/12/2010 à 13:03
delfyno
Merci de ta réponse, j'ai fais comme tu m'as dis mais ça m'affiche toujours que l'id ne correspond pas pourtant j'ai des enregistrements dans ma base de données avec un id chacun.
Tu sais d'ou cela peut venir??
Au secours, je ne sais plus quoi faire
delfyno
le 07/12/2010 à 13:18
delfyno
Quand je fais ma requête avec $pseudo au lieu de $id, j'ai ceci Unknown column 'dady2' in 'where clause'.
Comment je peux palier à ce problème?
Merci d'avance
moogli
le 08/12/2010 à 10:23
moogli
hum la clairement c'est une erreur de construction de la requête SQL. on te dit que la colonne 'dady2' n'existe pas.

fait un echo ou un var_dump de la chaine que tu passe au mysql_query afin de voir ce que tu envois (tu pourra aussi tester avec pma ou la console mysql).

@+
Il en faut peu pour être heureux !!!!!
delfyno
le 08/12/2010 à 11:58
delfyno
j'ai suivi un tutoriel, pour modifier ca marche et pour supprimer ça ne marche pas.
ça marque que la suppression a été faite alors que ce n'est pas le cas
Voici les codes
page suppression1.php
<?php
$cnx = mysql_connect("localhost", "root", "");
$db = mysql_select_db("INFOS");

//requête
$sql = "SELECT * FROM personnes ORDER BY nom";

//exécution
$req = mysql_query ($sql, $cnx);

//affichage
while ($result = mysql_fetch_object ($req)) {
echo "<div align=\"center\">".$result->nom." ".$result->prenom." <a href=\"suppression2.php?idPersonne=".$result->id."\">supprimer</a><br>\n";
}
?>
</body>


page suppression2.php
<?php
$cnx = mysql_connect("localhost", "root", "");
$db = mysql_select_db("INFOS");

//récupération de la variable d'URL qui va nous permettre de savoir quel enregistrement supprimer
$idPersonne = $_GET['id'];

//requête
$sql = "DELETE FROM personnes WHERE id = '$idPersonne'";
echo $sql . '<br />';
//exécution
$req = mysql_query ($sql, $cnx);

//affichage
if ($req) {
echo 'La suppression a été correctement effectuée';
}
else {
echo 'La suppression a échouée';
}
?>
larson
le 23/02/2012 à 18:23
larson
il aurait été intéressant de savoir ce que tu as modifié pour que la modification fonctionne... perso j'ai un autre soucis.... quand je modifie ma BDD via mon script PHP, ca me modifie TOUS les champs.. mais je buche dessus lolll..
larson
le 24/02/2012 à 22:23
larson
mdr...... oui.... ce vieux post ... mais t'inquiete pas, j'ai résolu tous mes soucis aujourd'hui apres de longues heures de recherche mdr!!! merci ! ;-)
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours