PHP/MySQL: Drop Username impossible

Signaler
Messages postés
146
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
21 juillet 2013
-
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
-
Bonjour à toutes et à tous,

Voilà j'ai un petit problème quand j’exécute mon code suivant:

<?php
include "../config.php"; // pas de soucis ici
$user = $_GET["username"]; // pas ici non plus -- recup variable get
mysql_query('DELETE FROM users WHERE username="$user"'); // sûrement ici
?>


En effet il s'exécute, mais ne supprime pas ce que je veux et aucun message d'erreur.

Merci d'avance.

3 réponses

Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
<?php
require_once('../config.php');
$user = mysql_real_escape_string($_GET['username']);
mysql_query("DELETE FROM users WHERE username='$user'");
?>

Je crois que MySQL n'apprécie pas trop les doubles guillemets...
De plus, fais très attention aux injections SQL !

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Salut,

Je crois que MySQL n'apprécie pas trop les doubles guillemets...

9.1.1. String Literals
A string is a sequence of bytes or characters, enclosed within either single quote (“'”) or double quote (“"”) characters.


@MacGaliver : je te propose de tester la valeur de retour de mysql_query() et, si elle est strictement égale à false, d'appeler mysql_error() afin d'avoir plus de détails sur pourquoi ça n'a pas fonctionné.

Soit dit en passant, tu ne devrais pas utiliser les fonction mysql_*, leur usage est fortement déconseillés. Tu devrais prendre une des alternatives proposées dans la documentation.
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Re,

Je viens de relire le sujet et le motif du problème m'a sauté aux yeux ! Je n'avais pas du tout fais gaffe aux quotes que tu avais utilisé... et c'était bien le problème : PHP ne fais pas l'expansion des variables dans les chaînes en simple quotes (d'où le fait que je les utilise dès que je n'ai pas d'expansion à faire). Afin de te montrer quelques exemples :

<?php

$toto = 'foo';
var_dump($toto); // string(3) "foo"                                                                                                                          
var_dump('$toto'); // string(5)	"$toto"                                                                                                                      
var_dump("$toto"); // string(3)	"foo"


Donc dans ton cas, c'était $user qui était utilisé comme username et non la valeur de la variable $user, d'où le fait que tu ne trouves jamais rien.

Je terminerais en te donnant un peu de lecture au sujet de la sécurité de ton code : PHP, MySQL Et La Sécurité.