Bonjour!

Je suis débutant en php et j'ai aujourd'hui un petit problème:

J'ai commencé un site web avec notamment un système d'inscription. J'ai également fait un espace d'administration.

Dans cet espace d'administration , j'ai une page affichant tous les utilisateurs du site, et, la possibilité de les supprimer. Et c'est la que ça coince! Petit extrait de mon code:


if ($_GET['supprimer_membre']) 
{
    mysql_query('DELETE FROM membres WHERE id=\'' . $_GET['supprimer_membre'] . '\'');
}

...


<?php echo '<a class="news" href="utilisateurs.php?supprimer_membre=' . $donnees['id'] . '">'; ?>Supprimer</a>



Quand je clique sur supprimer je retrouve bien dans l'ip: utilisateurs.php?supprimer_membre=[id du membre], mais ça ne supprime pas l'utilisateur Smiley decu

Merci d'avance pour vos réponses!

Ps: Vous moquez pas si le code est entièrement faux svp Smiley biggrin
Salut,

fais un echo de ta requête et test la en direct sur ta base de données, via phpmyadmin si tu as.
id correspond à l'ip en base de données? Quelle est la structure de ta table? Que vaut $_GET['supprimer_membre'] à l'exécution? Tu es sûr que tu passes la condition du if?
Vérifies mieux tes données, protège les (injection SQL), évite d'utiliser mysql_*, passe par pdo_mysql ou mysqli_*
En plus du message de floreo, essaie aussi de diagnostiquer le résultat de la requête: est-ce qu'elle n'a pas été exécutée parce qu'il y a une erreur de syntaxe, ou simplement parce que la donnée que tu cherchais à supprimer n'a pas été trouvée ?
Les fonctions mysql_error et mysql_affected_rows sont là pour te donner l'information si tu veux continuer à utiliser les fonctions mysql_*.

Sinon, je ne peux que le plussoyer: effectivement, les fonctions mysql_* sont deprecated, il ne faudrait plus les utiliser et les remplacer par PDO; et puis ton code tel que présenté ici n'est même pas juste une faille, mais carrément un cratère de 10km !
Re-bonjour,

J'ai finalement trouvé une solution:

if($_GET['supprimer_membre'])
{
    $query = 'DELETE FROM membres WHERE id=\'' . $_GET['supprimer_membre'] . '\';';
    $prep = $connexion->prepare($query);
    $prep->execute();			
 
echo $prep->rowCount() . 'membre supprimé.';
    
} 


Cette méthode marche, j'essayerai quand même de voir ce soir pourquoi l'ancienne ne marchait pas.

Merci beaucoup pour vos réponses Smiley smile
A vue de nez parce qu'une connexion en PDO (rowcount() c'est bien du PDO) n'est pas fait pour gérer des requêtes en mysql_ ?
Modifié par Lothindil (20 Feb 2014 - 13:38)
Lothindil a écrit :
A vue de nez parce qu'une connexion en PDO (rowcount() c'est bien du PDO) n'est pas fait pour gérer des requêtes en mysql_ ?

Je pense qu'il parlait plutôt de pourquoi ça ne marchait pas le mysql_query Smiley cligne

Tu es toujours vulnérable aux injections SQL par contre. N'oublies pas les remarques ci-dessus.
$_GET['supprimer_membre'] = addslashes($_GET['supprimer_membre']);

Ce code enlève bien cette vulnérabilité?
floreo a écrit :

Je pense qu'il parlait plutôt de pourquoi ça ne marchait pas le mysql_query Smiley cligne

Tu es toujours vulnérable aux injections SQL par contre. N'oublies pas les remarques ci-dessus.

Bah justement.

Si ça marche avec les requêtes PDO et non avec les requêtes mysql_ c'est très certainement parce que sa connexion est une connexion PDO et non une mysql.

Et autant que je sache, le principe des requêtes préparées c'est justement de protéger des injections sql.
Et c'est plus propre ainsi (code à vérifier, fait rapidement):

$query = 'DELETE FROM membres WHERE id=:id'
$prep = $connexion->prepare($query);
 $prep->execute(array(':id'=>$_GET['supprimer_membre']));


Au passage, à part avec une structure bizarre, j'ai du mal à voir comment ta requête pourrait supprimer plusieurs membres, et donc le "rowCount()" ne retournera forcément que 1.
Oui désolé j'ai mal compris ce que tu voulais dire, tu parlais du rowcount() alors qu'il ne l'avait pas dans son post initial. Mais tout porte à croire que c'est la connexion qui n'était pas bonne du coup.
Eh bien oui, c'était tout bêtement la connexion...

Bon, c'est en faisant des erreurs que l'on apprend !

En tout cas merci pour vos réponses qui m'ont mis sur la bonne voie.