Logo du forum
 

Forum TTH-News

| Inscription | | Recherche | | FAQ | | Accueil | | Liste des membres |
| Calendrier |
 
Vous n'êtes pas identifié! [Connexion] ou [Inscription] Forum » Programmation » [PHP] » encodage et requete sql
Login Mot de passe

1 visiteurs sur ce topic (0 membre(s), 1 invité(s) )


Auteur
Sujet : encodage et requete sql
oceane751
Nouveau membre
Membre # 36018

 


Messages :
2 (0 par jour)




Message du 12-04-2012 @ 0:24   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   


Bonjour à tous,

J'ai un soucis
Quand je fais ma requête, la variable a des é à la place des "é"

j'ai dans l'entête de ma page html, là où il y a mon formulaire,
ma BDD est en utf-8

mon code php :

Code :


<?php

include("connect.php");
$pseudo = $_POST['pseudo'];
echo $pseudo;

$requete = "SELECT nom FROM personne WHERE pseudo='".$pseudo."'";
echo $requete;
$quer = mysql_query($requete);

$row = mysql_fetch_array($quer);

if($row) {
   echo "pseudo déjà utilisé";
}
else {
   echo "OK";   
}

?>



ce qui donne :

SELECT nom FROM personne WHERE pseudo='noémie'

Ce que j'ai fait c'est rajouter à mon fichier php
header("Content-Type:text/html; charset=utf-8");

le hic est que si je rentre "noémie", ça me dit que je peux prendre ce pseudo alors qu'il existe déjà
si je rentre : "noemie", il me dit que le pseudo est déjà pris!
alors que dans la BDD c'est "noémie" et non "noemie"

Donc je tourne en rond, j'ai plus de cheveux, je ne sais pas quoi faire :(

quelqu'un pourrait il m'aider?

Merci ebaucoup
- Haut de page -
icy
Administrateur
Membre # 871

 Avatar du membre
Lieu : Bxl

Messages :
23200 (3.76 par jour)


Score :

Message du 12-04-2012 @ 7:47   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Ton codes est valable (mais très sensible au attaque par injection sql, ca classique en php et c'est une autre histoire:p).
Pour régler ton soucis, il y'a différentes facon de s'y prendre.
Le plus facile est de simplement faire une validation sur le pseudo en interedisant les accents. Avec un regular expression de base c'est facile... Genre un bete "[0-9a-zA-Z_.]{3,20}" te permet déja de limiter plein de truc.
Tu matchs ca dans une methode/object de validation et l'utilisateur pourra uniquement entrer entre 3 et 20 caractères alphanumérique, sans accent, seul _ et . sont autorisé comme char spéciaux.
C'est une regexp non-orienté vers un language particulier, il faudra sans doute l'adapter en php.


Tu trouveras sur ce site de référence, des explications sur les regexp, en général et en php.
Voici un site qui te permettras de les tester et les transformer pour le php.
D'apres ces 2 sites un preg_match avec "/[0-9a-zA-Z_.]{3,20}/" devrait etre suffisant.
----------
"May He touch you with His Noodly Appendage"
- Haut de page -
oceane751
Nouveau membre
Membre # 36018

 


Messages :
2 (0 par jour)




Message du 12-04-2012 @ 15:09   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

merci pour ta réponse
mais le problème est résolu

voilà la soluce:
Code :



en fait il fallait faire ça :

[code=php]
<?php
header('Content-Type: text/html; charset=UTF-8');
include("connect.php");
$pseudo = $_POST['p'];
$requete = "SELECT nom,pseudo FROM personne WHERE pseudo='".$pseudo."'";
mysql_query("SET NAMES 'utf8'");
$quer = mysql_query($requete);
$row = mysql_fetch_array($quer);

if($row) {
   echo "FAIL";
}
else {
   echo "OK";   
}
?>



voilà voilà
[/code]

[message édité le 12-04-2012 @ 15:10 Par oceane751]
- Haut de page -
B2000
Administrateur
Membre # 185

 Avatar du membre
Lieu : France/Poitiers/juste à côté...

Messages :
9757 (1.54 par jour)




Message du 12-04-2012 @ 20:48   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

pour les injections SQL, utilise mysql_real_escape_string sur les variables venant du formulaire : http://php.net/manual/fr/function.mysql-real-escape-string.php
----------
Intel i5 2500K | PNY GeForce GTX 1060 XLR8 OC, 6 Go | Asus P8P67 Pro Rev3.1 | 2x HyperX Fury 8Go DDR3-1866MHz CAS 10 | Sandisk Ultra Plus 256Go | Sony AD-7280S | Logitech QuickCam Pro 5000 | Microsoft Natural Ergonomic 4000 | Logitech Cordless Optical Mouse | Iiyama ProLite E2472HDD
Lenovo T430s : i5 3320m / 2x8Go / SAMSUNG 840 Pro 512Go / station Mini Dock serie 3 / LG 34um95 3440x1440 34" / SAMSUNG SyncMaster SA450 1920x1200 24"/ Clavier et souris Lenovo Ultraslim sans fil
Nexus 6 64Go Android 7.0.1 | Garmin Forerunner 305 | Nikon COOLPIX S9200 + Transcend SDHC 8GB | Canon PIXMA IP4850 | ADSL neufbox de SFR
Pour dialoguer en live, le chat TTH ou par mIRC sur irc://porsche.webchat.org:6667/tt-hardware
Rejoignez la team EBuyClub TTH !!!
Un jour j'ai mangé une pomme...
- Haut de page -


Aller dans le forum :  

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2010

Valid XHTML 1.0 Transitional

Page générée en 0.04 secondes