Supprimer une ligne d'une table MySql

Fermé
HelpOgastor - 11 sept. 2012 à 17:34
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 12 sept. 2012 à 17:11
Bonjour, je fais un système de dédicace mais j'ai rencontré un souci car je voudrais afficher les dédicaces avec un bouton supprimer à coter (ce qui permettrais de les supprimées) mon code est :


//index.php
<script>
        function confirmMessage(id) {
                if (confirm('Voulez-vous supprimer cette ligne ?')) {
                        window.location = '/supress.php?id='+id;
                        alert('Ligne supprimée !');
                        location.reload();
                } else {
                        alert('Bien choisi !');
                        location.reload();
                }
        }
</script>

<center>
        <h1>Dédicaces</h1>
</center>
<br/>

<?php
        $host = "localhosr";
        $user = "root";
        $password = "password";
        $bdd = "site";

        // Connexion à la base
        mysql_connect($host, $user, $password) or die ("Impossible de se connecter au serveur" );
        mysql_select_db($bdd) or die ("Impossible de se connecter a la base de donnees" );
       
        // requête
        $sql = "SELECT * FROM dedicaces ORDER BY id";
        $resultat=mysql_query($sql);
        $nombre_de_reponse=mysql_num_rows($resultat);?>

        <!-- Affichage des résultats dans un tableau -->
        <table align=center border="1" cellpadding="5">
                        <caption>
                                <i>Nombre de Dédicace(s) :</i>
                                <b><?php Echo $nombre_de_reponse;?></b>
                        </caption>

                        <tr>
                                <th>Id</th>
                                <th>Pseudo</th>
                                <th>Messages</th>
                        </tr>
                        <?php
                        while($ligne = mysql_fetch_array($resultat)) {
                                $id = $ligne['id'];
                                $pseudo = $ligne['pseudo'];
                                $messages = $ligne['messages'];
                                ?>
                        <tr>
                                <td align=center><?php Echo $id ;'<br />'?></td>
                                <td align=center><?php Echo $pseudo ;'<br />'?></td>
                                <td align=center><?php Echo $messages ;'<br />'?></td>
                                <td align=center><a href="javascript:confirmMessage(<?php echo $id; ?>)"><input type="image" id="supprimer" alt="Supprimer" src="img/delete.jpg"/></a></td>
                        </tr>
                        <?php } ?>
        </table>


Jusque la tout marche mais ...


//supress.php
<?php 
// connection a la BD 
mysql_connect("localhost","root","password") or die (mysql_error()); 
mysql_select_db("site") or die("erreur de connexion à la base de donnees"); 
$id = intval(mysql_real_escape_string(($_POST['id']))); 
$value = $_POST['value']; 
if(isset($_POST['id']) && $_POST['id']!='') { 
$deleteSQL = "DELETE FROM dedicace WHERE id=".['id'];
$result = mysql_query($req); 
//echo $result; // renvoi 1...au lieu de renvoyer la requete complète avec le bon ID ! 
} 
mysql_close(); 
?> 



Merci d'avance!


A voir également:

4 réponses

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
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
1
ça me donne :
<?php 
// connection a la BD 
mysql_connect("localhost","root","password") or die (mysql_error()); 
mysql_select_db("site") or die("erreur de connexion à la base de donnees"); 
$id = intval(mysql_real_escape_string(($_GET['id']))); 
$value = $_GET['value']; 
if(isset($_GET['id']) && $_GET['id']!='') { 
$deleteSQL = "DELETE FROM dedicace WHERE id=".['id'];
$result = mysql_query($req); 
//echo $result; // renvoi 1...au lieu de renvoyer la requete complète avec le bon ID ! 
} 
mysql_close(); 
?>

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..
0
tu as un $ de trop !
0
ou ?
0
Désolé je débute en php ...
0
Dans ton code !
11 sept. 2012 à 18:30
Dans ton code !
0
Tu appelles ta requête $deleteSQL, il faut faire mysql_query($deleteSQL);, pas mysql_query($req);
1
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 12/09/2012 à 14:07
Salut HelpOgastor, salut le père :-)

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
0
Je vais tester ...
0
Don effet je devrais refaire le tout pour le "coder plus proprement" ??
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
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
0
Utilisateur anonyme
11 sept. 2012 à 22:53
Bonjour

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 ?
0
Bonjour,
En corrigent comme tu me la dit, j'arrive sur une page blanche sans erreur...
Et la suppressions ne marche toujours pas ...
0
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:
<?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 !
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
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 :

<?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
0