Supprimer une ligne d'une table MySql
Fermé
HelpOgastor
-
11 sept. 2012 à 17:34
[Dal] Messages postés 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 - 12 sept. 2012 à 17:11
[Dal] Messages postés 6204 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 27 février 2025 - 12 sept. 2012 à 17:11
A voir également:
- Supprimer une ligne d'une table sql en php
- Supprimer une page word - Guide
- Table ascii - Guide
- Partager photos en ligne - Guide
- Table des matières word - Guide
- Site de vente en ligne particulier - Guide
4 réponses
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 104
11 sept. 2012 à 18:13
11 sept. 2012 à 18:13
Si tu passes les données dans l'URL, tu les récupères comme dans $_GET, pas dans $_POST.
Dal
Dal
Utilisateur anonyme
Modifié par le père. le 12/09/2012 à 13:44
Modifié par le père. le 12/09/2012 à 13:44
Tu appelles ta requête $deleteSQL, il faut faire mysql_query($deleteSQL);, pas mysql_query($req);
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 104
Modifié par [Dal] le 12/09/2012 à 14:07
Modifié par [Dal] le 12/09/2012 à 14:07
Salut HelpOgastor, salut le père :-)
va remplacer la page courante par celle là dans le navigateur. Alors si "supress.php" n'affiche rien, c'est normal que ta page soit blanche (en passant, en anglais c'est "suppress", avec deux p).
Les instructions javascript qui suivent window.location ne servent à rien. Elles ne sont pas exécutées puisque tu as demandé au navigateur de remplacer la page actuelle par une autre.
Quand tu dis "la suppressions ne marche toujours pas", tu ne dis pas si c'est au niveau de la base MySQL que tu constates cela, ou à un autre niveau.
Outre le fait que $_GET doit être utilisé et les erreurs de syntaxe dans la concaténation et d'usage d'une mauvaise variable dans la requête signalées par le père, tu devrais :
- vérifier que le "id" est bien passé par index.php au code javascript (par exemple, fait un alert(id); avant ton windows.location, pour voir,
- vérifier qu'il est bien récupéré par "supress.php" et la requête correctement formée en faisant un echo $deleteSQL; avant de tenter la requête avec le contenu de $deleteSQL (et non de $req, comme le signale le père)
- vérifier avec un client mysql en faisant un "select from dedicace where id=<le id retourné>" que cela identifie bien quelque chose dans ta base
Il y a d'autres choses qui ne vont pas dans ton code.
Par exemple :
- tu fais $id = intval(mysql_real_escape_string(($_GET['id']))); et tu ne te sers pas de $id dans la suite du code :-/ (outre des parenthèses en trop)
- tu devrais, en revanche, dès le début, utiliser if (isset($_GET['id']) && $_GET['id']!='') { pour vérifier que "supress.php" est bien appelé avec ce paramètre, et ne rien faire si ce n'est pas le cas. Si c'est le cas, mets cette valeur dans une variable $id pour t'éviter de répéter $_GET['id'] à chaque fois
- ce n'est pas nécessaire de transformer id en entier, à mon sens (surtout que tu ne vérifies même pas que la transformation a été possible), tu peux faire ta vérification sur la base de la chaîne $id qui représentant un entier et rien d'autre, par exemple, doit pouvoir être testée avec if preg_match('/^[0-9]+$/', $id) {
- de cette façon tu concaténeras bien deux chaînes pour former ta requête SQL
- actuellement ton code ne fait aucune vérification de ce qui est passé dans $_GET['id']
Dal
window.location = '/supress.php?id='+id;
va remplacer la page courante par celle là dans le navigateur. Alors si "supress.php" n'affiche rien, c'est normal que ta page soit blanche (en passant, en anglais c'est "suppress", avec deux p).
Les instructions javascript qui suivent window.location ne servent à rien. Elles ne sont pas exécutées puisque tu as demandé au navigateur de remplacer la page actuelle par une autre.
Quand tu dis "la suppressions ne marche toujours pas", tu ne dis pas si c'est au niveau de la base MySQL que tu constates cela, ou à un autre niveau.
Outre le fait que $_GET doit être utilisé et les erreurs de syntaxe dans la concaténation et d'usage d'une mauvaise variable dans la requête signalées par le père, tu devrais :
- vérifier que le "id" est bien passé par index.php au code javascript (par exemple, fait un alert(id); avant ton windows.location, pour voir,
- vérifier qu'il est bien récupéré par "supress.php" et la requête correctement formée en faisant un echo $deleteSQL; avant de tenter la requête avec le contenu de $deleteSQL (et non de $req, comme le signale le père)
- vérifier avec un client mysql en faisant un "select from dedicace where id=<le id retourné>" que cela identifie bien quelque chose dans ta base
Il y a d'autres choses qui ne vont pas dans ton code.
Par exemple :
- tu fais $id = intval(mysql_real_escape_string(($_GET['id']))); et tu ne te sers pas de $id dans la suite du code :-/ (outre des parenthèses en trop)
- tu devrais, en revanche, dès le début, utiliser if (isset($_GET['id']) && $_GET['id']!='') { pour vérifier que "supress.php" est bien appelé avec ce paramètre, et ne rien faire si ce n'est pas le cas. Si c'est le cas, mets cette valeur dans une variable $id pour t'éviter de répéter $_GET['id'] à chaque fois
- ce n'est pas nécessaire de transformer id en entier, à mon sens (surtout que tu ne vérifies même pas que la transformation a été possible), tu peux faire ta vérification sur la base de la chaîne $id qui représentant un entier et rien d'autre, par exemple, doit pouvoir être testée avec if preg_match('/^[0-9]+$/', $id) {
- de cette façon tu concaténeras bien deux chaînes pour former ta requête SQL
- actuellement ton code ne fait aucune vérification de ce qui est passé dans $_GET['id']
Dal
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 104
12 sept. 2012 à 14:21
12 sept. 2012 à 14:21
Une chose est sûre, c'est que ne faire aucune vérification de ce qui est passé dans $_GET['id'] est un trou de sécurité. Là, ton code fait "semblant" de vérifier quelque chose
Pour le reste, si tu veux avoir du code non utilisé, ou que tu aimes les pages blanches, c'est à toi de voir :-)
Tu arrives maintenant à supprimer ton enregistrement MySQL ?
Dal
Pour le reste, si tu veux avoir du code non utilisé, ou que tu aimes les pages blanches, c'est à toi de voir :-)
Tu arrives maintenant à supprimer ton enregistrement MySQL ?
Dal
Utilisateur anonyme
11 sept. 2012 à 22:53
11 sept. 2012 à 22:53
Bonjour
Cette ligne est incorrecte
Ce devrait être
Tu dis que tu as une Erreur serveur, ça ne beut pas dire grand chose... Peux-tu copier-coller le message d'erreur complet que tu as ?
Cette ligne est incorrecte
$deleteSQL = "DELETE FROM dedicace WHERE id=".['id'];
Ce devrait être
$deleteSQL = "DELETE FROM dedicace WHERE id=".$_GET['id'];
Tu dis que tu as une Erreur serveur, ça ne beut pas dire grand chose... Peux-tu copier-coller le message d'erreur complet que tu as ?
J'ai réussit !
Effets j'ai envoyer l'id dans l'url (/supress.php?id=5)
et dans le fichier supress.php je récupère les info pour les suprimers:
je créerais un fichier config.php et je mettrais les info de connexion MySql dedans pour plus de sécurité !
Merci à [Dal] et à le père.
S'est grâce à des gens comme Vous que l'on peux apprendre des choses !
Effets j'ai envoyer l'id dans l'url (/supress.php?id=5)
et dans le fichier supress.php je récupère les info pour les suprimers:
<?php mysql_connect("localhost", "root","password" ); mysql_select_db("site"); $id = $_GET['id']; if($id !=""){ mysql_query("delete from dedicaces where id='$id'"); mysql_close(); } ?>
je créerais un fichier config.php et je mettrais les info de connexion MySql dedans pour plus de sécurité !
Merci à [Dal] et à le père.
S'est grâce à des gens comme Vous que l'on peux apprendre des choses !
[Dal]
Messages postés
6204
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 février 2025
1 104
Modifié par [Dal] le 12/09/2012 à 17:14
Modifié par [Dal] le 12/09/2012 à 17:14
ok, bravo !
Maintenant, tu peux améliorer ton code en réintroduisant le contrôle d'erreur des fonctions mysql, en gérant le cas où id n'est pas passé dans l'URL, en en contrôlant que ce qui est récupéré est bien composé de chiffres :
Quelque chose comme cela (non testé) :-)
Dal
Maintenant, tu peux améliorer ton code en réintroduisant le contrôle d'erreur des fonctions mysql, en gérant le cas où id n'est pas passé dans l'URL, en en contrôlant que ce qui est récupéré est bien composé de chiffres :
<?php mysql_connect("localhost", "root","password") or die ("Erreur : Impossible de se connecter au serveur"); mysql_select_db("site") or die ("Erreur : Impossible de sélectionner la base de données"); // on déclare et on initialise $id $id = ""; // on vérifie que l'URL contient bien un argument 'id', // si oui on affecte sa valeur à $id if (isset($_GET['id'])) { $id = $_GET['id']; // on vérifie que $id ne comporte que des chiffres // avant de l'utiliser pour construire la commande SQL if (preg_match('/^[0-9]+$/', $id)) { mysql_query("delete from dedicaces where id='$id'") or die("Erreur : Impossible d'effacer cet enregistrement"); } } ?>
Quelque chose comme cela (non testé) :-)
Dal
11 sept. 2012 à 18:22
Mais ça ne marche toujours pas ;(
Et quand je vais sur la page supress.php j'arrive sur une Erreur serveur ..
Merci de ton aide..
11 sept. 2012 à 18:24
11 sept. 2012 à 18:24
11 sept. 2012 à 18:25
11 sept. 2012 à 18:30