problème d'insertion 2fois sur 167 :s

Eléphant du PHP | 417 Messages

26 déc. 2011, 13:40

Bonjour à vous tous,

c'est la 2eme que ça m'arrive, l'insertion des donnée dans une base sans pseudo :s
j'ai fait un site sous forme d'un forum à un ami et tous à laire bien marché (le forum je lais fait personnellement et pas un script) pour le moment y a 167 commentaire et 30 sujet dans 3 semaines les sur les 167 commentaire j'ai eu deux fois le meme problème c'est l'insertion de pseudo
sachant que sur ce site on peu pas commenter si on est pas connecté donc le pseudo a inseret je le prend dans $_session['pseudo'] je pense que c'est correct et que c'est bien vu que ça marché 165 fois sans problème

a vos avis d'ou vien le problème?

ViPHP
xTG
ViPHP | 7331 Messages

26 déc. 2011, 14:34

La protection lors de l'injection de variable dans la requête qui est mal faite ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 déc. 2011, 17:36

ou simplement le fait que entre le moment ou l'utilisateur a chargé la page et celui ou il a posté le formulaire, la session avait expiré (parce qu'il est allé prendre un café, venu chatter sur phpfrance, est allé prendre une douche, à répondu au téléphone, ... liste non exhaustive) ... résultat, plus de pseudo en session quand il a fini d'écrire son message ou qu'il a pensé à cliquer le bouton submit :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 417 Messages

26 déc. 2011, 17:52

ah dac donc solutions?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 déc. 2011, 19:03

Ben si c'est le premier cas, faut contrôler les données avant de les insérer en base...

par contre si c'est le second, ben faut contrôler les données avant de les insérer en base ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 417 Messages

27 déc. 2011, 15:18

Ben si c'est le premier cas, faut contrôler les données avant de les insérer en base...

par contre si c'est le second, ben faut contrôler les données avant de les insérer en base ;)
:D et dans le 3eme ? je suppose qu'il faut controle aussi les données avant des les insérer :) non ?

je r'ajoute juste un petite If $_SESSION{'pseudo']!="" j'insert sinon j'insert pas :) si suffisent?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 déc. 2011, 20:44

Ah j'avais pas envisagé ce cas là, mais effectivement, ce serait pas mal de les contrôler en effet ;)

Tu as potentiellement deux types de contrôles à faire :
- Le premier sur la présence de la donnée et effectivement, si c'est vide en session, c'est que c'est pas renseigné, donc faut mettre un message d'erreur et dire à l'utilisateur qu'il n'est plus connecté et qu'il doit recommencer :)
- Le second, une fois que tu sais que ton champ n'est pas vide, se fait sur son contenu, pour éviter que l'utilisateur ne puisse effectuer des injections sql (en gros, il colle ses requêtes dans tes variables pour qu'elles soient exécutées avec les tiennes). Pour cela il faut protéger les apostrophes et autres pour que ta base de données les considère comme des caractères et non comme des instructions (mysql_real_escape_string() , etc.)

Si après ça y en a encore qui t'échappe, tu nous le dis et on enverra xTG en personne pour leurs tirer les oreilles ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 417 Messages

05 janv. 2012, 01:40

Ah j'avais pas envisagé ce cas là, mais effectivement, ce serait pas mal de les contrôler en effet ;)

Tu as potentiellement deux types de contrôles à faire :
- Le premier sur la présence de la donnée et effectivement, si c'est vide en session, c'est que c'est pas renseigné, donc faut mettre un message d'erreur et dire à l'utilisateur qu'il n'est plus connecté et qu'il doit recommencer :)
- Le second, une fois que tu sais que ton champ n'est pas vide, se fait sur son contenu, pour éviter que l'utilisateur ne puisse effectuer des injections sql (en gros, il colle ses requêtes dans tes variables pour qu'elles soient exécutées avec les tiennes). Pour cela il faut protéger les apostrophes et autres pour que ta base de données les considère comme des caractères et non comme des instructions (mysql_real_escape_string() , etc.)

Si après ça y en a encore qui t'échappe, tu nous le dis et on enverra xTG en personne pour leurs tirer les oreilles ;)
Lol xTG carrément ^^
pour le moment j'ai réglé le problème avec la première solution sauf que quand j'ai ces deux cas dans la BDD j'ai tous ce qu'est enregistrer sauf le pseudo et la session et tjr activer la preuve c'est qu'il a tjr le champ de saisi qui ne s'affiche pas si y a pas d session activé donc c'est un peux bordel dans mon code non ?
je vais essayer aussi d'utilisé après la 2eme c'est plus propre