Probleme addslashes, stripslashes ? - Programmation
Marsh Posté le 06-12-2001 à 22:05:14
ça dépend de ce que tu stockes dans ta bdd. si tu stockes :
* l'enfoiré , la requête sera celle que tu as mis : 'l\'enfoiré'
* l\'enfoiré, il faudra mettre un truc style 'l\\'enfoiré' ou 'l\\\'enfoiré'
Marsh Posté le 06-12-2001 à 22:07:16
c'est l\'enfoire qui est dans ma table vu que je fais un addslashes lorsque le membre s'inscrit.
Marsh Posté le 06-12-2001 à 22:08:13
il PHPMyAdmin te retourne 'aucun resultat' c que le pseudo 'l'enfoiré' n'a pas été stocké comme ça dans ta bdd.
affiche tous les enregistrements et vérifie tous trouvera peu-etre la réponse tout seul
Marsh Posté le 06-12-2001 à 22:09:13
he bien essaye la deuxième soluce le \ devant le ' dit à mysql de ne pas prendre en compte le '. donc l\\'enfoiré revient à chercher l\'enfoiré.
après, je ne sais pas s'il faut rajouter un \ devant le premier \, c'est comme ça en C, PHP est plutôt tolérant sur la chose, et mysql je n'en sais rien. essaye les deux.
Marsh Posté le 06-12-2001 à 22:10:58
je crois aussi qu'il y a PHP qui rajout des \, j'ai déjà eu le problème et c super chiant
Marsh Posté le 06-12-2001 à 22:11:11
bon, dans phpmyadmin me retourne le résultat lorsque je met :
select * from membre where surnom = 'l\\\'enfoire'
bien vu, youdontcare !
Donc, le prob se situe dans mon script
Marsh Posté le 06-12-2001 à 22:12:24
Le voilou, si vous voyez une erreur !
if(isset($submit)){
$cryptedPwd = md5($pass);
$surnom = addslashes($surnom);
$query = "select * from $table_membre where surnom = '".$surnom."' and pass = '".$cryptedPwd."'";
$req = mysql_query($query);
$result = mysql_fetch_array($req);
if($surnom != $result[surnom] || $cryptedPwd != $result[pass]) {
$non = "<script>
function redirect()
{
window.location.replace(\"?menu=membre&rubriqu
e=identification&membre=login&%s\" );
}
setTimeout(\"redirect();\", 1250);
</script>Identification refusée.";
} else {
$email_session = $result[email];
session_register("surnom" );
session_register("email_session" );
$oui = "<script>
function redirect()
{
window.location.replace(\"?menu=membre&rubriqu
e=index&membre=membre&%s\" );
}
setTimeout(\"redirect();\", 1250);
</script>Identification réussie.";
}
}
[edtdd]--Message édité par kyle--[/edtdd]
Marsh Posté le 06-12-2001 à 22:14:45
regarde bien ce que te sort le formulaire lors de l'inscription d'un membre. suivant les versions / options de php, les slashs sont rajoutés ou non. si php les rajoute, tu n'as pas besoin de le faire.
car si tu fais insert .... 'l\'enfoiré' tu te retrouveras avec l'enfoiré dans ta table.
là, tu dois sûrement faire un addslashes() en trop, ta requête doit ressembler à 'l\\'enfoiré', et tu te retrouves avec l\'enfoiré dans ta table (ce qui n'est pas nécessaire, et plutôt redondant).
Marsh Posté le 06-12-2001 à 22:17:17
pour info, tout ce que je récupère d'un formulaire pour ensuite l'insérer dans mysql subit un stripslashes() puis un addslashes(). ce n'est pas optimal, mais comme je bosse avec deux serveurs différents ça permet de récupérer les mêmes infos sur les deux et de ne pas faire deux scripts différents.
Marsh Posté le 06-12-2001 à 22:22:24
J'ai essayer avec ou sans addslashes() et bien, meme résultat
Par ailleur, j'ai tester l'inscription avec un stripslashes puis addslashes, et bien dans ma table, le nom est : l'enfoire et non l\'enfoire... donc a quoi cela peur servir ?
Marsh Posté le 06-12-2001 à 22:27:45
kyle a écrit a écrit : donc a quoi cela peur servir ? |
à quoi quoi peut servir ?
Marsh Posté le 06-12-2001 à 22:30:25
de faire un stripslashes() suivit d'un addslashes() !
A moins que j'ai mal compris...
Marsh Posté le 06-12-2001 à 22:33:32
Bon, je viens de trouver !
Manquais bien un addslashes !
J'ai rajouter la ligne :
$resultsurnom = addslashes($result[surnom]);
apres :
$result = mysql_fetch_array($req);
Marsh Posté le 06-12-2001 à 22:35:30
kyle a écrit a écrit : de faire un stripslashes() suivit d'un addslashes() ! A moins que j'ai mal compris... |
à ce que le même code marche sur deux serveurs différents, ie le premier qui ajoute les slash automatiquement, le deuxième qui ne les ajoute pas (y'a sûrement plus clean, c'est du vieux code )
Marsh Posté le 06-12-2001 à 22:41:33
lors de l'envoi d'info avec post/get php rajoute des slashes (il fait addslahes() ) pour éviter cela met "magic_quotse_gpc" à off dans php.ini
si tu n'as pas envie ou que tu ne peux pas le faire faudrait tester sans addlashes puisque il les rajoutes automatiquement.
ça sert pour la sécurité je pense
et "faciliter" aussi la tâche du programmeur qui ne doit pas s'occuper du contenu de la variable postée
-- trop tard --
[edtdd]--Message édité par ethernal--[/edtdd]
Marsh Posté le 06-12-2001 à 22:53:52
ethernal a écrit a écrit : lors de l'envoi d'info avec post/get php rajoute des slashes (il fait addslahes() ) pour éviter cela met "magic_quotse_gpc" à off dans php.ini |
effectivement, les deux serveurs ont des valeurs différentes pour magic quotes.
on peut le changer en runtime ? ie, est-ce affecté par le safe mode ? (comme set_time_limit())
Marsh Posté le 07-12-2001 à 00:05:10
en runtime ? hum je pense pas
(je suis en off)
phpmyadmin a dans le script de configuration (dernière ligne)
"set_magic_quotes_runtime(0);" qui semblerait être une option de configuration en runtime.
pourtant, il refuse de valider une requête qui contient des ' dans le texte d'une variable même qd je le passe à 1.
évite d'y toucher le résultat est grave
il met des \ avant tout " ou ' même dans le code html...
[edtdd]--Message édité par ethernal--[/edtdd]
Marsh Posté le 09-12-2001 à 18:59:45
article intéressant
http://www.phpinfo.net/?p=articles&rub=magic-quotes
le but est d'arriver à des fonctions du style
function MyStripSlashes( $chaine ) {
return( get_magic_quotes_gpc() == 1 ?
stripslashes($chaine) :
$chaine );
}
d'après ce qu'ils disent...
Marsh Posté le 06-12-2001 à 22:02:09
Salut !
Dans ma table de membres, j'ai un champs surnom.
Lorsqu'un membre s'inscrit avec un surnom du type l'enfoire , j'ai fais un addslashes pour éviter les erreurs de requetes.
Le probleme se situe lorsqu'il s'identifie !
Meme dans phpmyadmin avec la requete suivante, ca ne marche pas
select * from membre where surnom = 'l\'enfoire'
Il ne me retourne aucun résultat alors que la requete est bonne !
Aurais-je omis une fonction php spécifique ?