Traitement des données d'un formulaire pour BDD

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Traitement des données d'un formulaire pour BDD

par Eagle » 19 févr. 2006, 14:54

OK ! :D

Merci bien pour tout Ouaibou.
Je considère mon sujet comme RESOLU :D

A bientôt.

par Ouaibou » 18 févr. 2006, 21:57

Oui :)

Le tout en utilisant une ou deux fonctions.

par Eagle » 18 févr. 2006, 21:51

Dans mon cas, c'est en interne, donc je pense que j'aurais le droit.

Par contre, ça veut dire que mon script ainsi écrit ne sera pas "universel"...
Il vaut donc mieux alors tester et gérer par 1 fonction à l'enregistrement et à l'affichage des données comme tu le disais l'activation ou non des magic_quote.

Ma solution sera donc :

1- je créé une fonction pour tester les magic_quote
function test_magic_quotes(){
if (!get_magic_quotes_gpc()) {
   return false;
}
else {
   return true;
}
2- je traite mes données avec :
//test magic_quote : false => pas activées
if(test_magic_quotes() == false){
    $sMaVarialble = mysql_real_escape_string(trim(htmlspecialchars($_POST["mon_champs"])));
}
else{
    //je ne rajoute pas de slash
    $sMaVariable =  trim(htmlspecialchars($_POST["mon_champs"]));
}
3- pour réafficher mes données :
//test magic_quote : false => pas activées
if(test_magic_quotes() == false){
    //Pas de stripslashes() car enregistrée avec mysql_real_escape_string
    echo $sMaVarialble;
}
else{
    //stripslashes() car magic_quote activées
    echo stripslashes($sMaVarialble);
}


Cette fois est-ce plus "universel" ?

par Ouaibou » 18 févr. 2006, 20:43

Oui, seulement peux-tu réellement modifier les magic quotes. Car si t'es sur un serveur mutualisé, il faut savoir que la plupart ne l'autorise pas.

par Eagle » 18 févr. 2006, 20:19

OK, merci pour vos réponses.

Donc sinon, d'après ce que tu dis Ultiny, je peux désactiver les magic_quote dans mes scripts (même si elles sont activées sur le serveur).
A ce moment là, je n'ai pas besoin donc de vérifier si elles sont activées ou non, et je traite directement mes données avec la fonction mysql_real_escape_string ?

Si c'est bien ça, c'est plus pratique...
Pour résumer :

1- dans toutes mes pages le nécessitant, je désactive les magic_quote
set_magic_quotes_runtime(0);
2- je traite mes données avec :
$sMaVarialble = mysql_real_escape_string(trim(htmlspecialchars($_POST["mon_champs"])));
3- pour réafficher mes données, je les insère tel quel (puisque mysql_real_escape_string a été utilisé).

Cette solution vous parait-elle correcte ?

Merci encore.

par Ultiny » 18 févr. 2006, 19:01

Tu as une directive de configuration qui te permettra de les désactiver dans tes scripts.

set_magic_quotes_runtime(0);

par Ouaibou » 18 févr. 2006, 18:50

Salut,

1) Je sais pas si c'est la meilleur. Je ne sais pas si il existe aussi une solution ultime, mais la tienne semble assez bien.

2) Effectivement il n'est pas nécessaire d'utiliser mysql_real_escape_string si les magic quotes sont activées.

Si tu utilise mysql_real_escape_string il n'est pas nécessaire d'utiliser stripslashes.

3) Si tu active/désactive les magic quotes, tes données étant déjà enregistrées, elles ont déjà été formaté donc ca ne les modifiera pas.

Le mieux je penses, dans le cas ou tu sais pas si les magic_quotes sont activées ou pas, serait de faire deux fonctions :

- Une parse tes données si les magic quotes ne sont pas activées. Dans le cas contraire elle fait rien.
- Une qui "déparse" tes données si les magic quotes ne sont pas activées. Dans le cas contraire elle fait rien.

@+

Traitement des données d'un formulaire pour BDD

par Eagle » 18 févr. 2006, 16:29

Bonjour à tous :D ,

Bon j'ai plusieurs soucis... je dirais même que je suis un peu perdu ! :?
J'espère juste que je suis dans le bon forum.... :) , mais mon problème, même s'il y a du PHP concerne bien l'enregistrement dans la BDD.

J'utilise PHP4 et MySQL 4.1 sous Apache.
Mes questions sont les suivantes :

1- Quelle est la meilleure solution pour traiter les données avant envoie dans la BDD (caractères spéciaux, guillemets...) ?
J'ai lu qu'il fallait désormais utiliser la fonction "mysql_real_escape_string"...
Donc en gros il faut quand même cumuler tout du style :
$sMaVarialble = mysql_real_escape_string(trim(htmlspecialchars($_POST["mon_champs"])));
Dans ce cas là, il n'y a plus besoin d'utiliser la fonction "addslashes()" ?

2- Mon autre problème concerne le fameux paramètre magic_quote.
Il semble qu'il existe bien un moyen de détecter si oui ou non il est activé sur le serveur.
Dans ce cas là, il n'est plus nécessaire d'utiliser la fonction "mysql_real_escape_string" puisque le serveur le fait lui même... non ?

En revanche, dans tous les cas de figure, il faut bien exécuter la fonction "stripslashes()" pour l'affichage des données ?

3- Dans le cas où magic_quote était activé, que des enregistrements ont déjà été faits, et que l'on désactive les magic_quote... que se pass-t-il pour l'affichage des données déjà enregistrées ? Ne restera-t-il pas des "\" en trop ?

Merci de vos réponses car je suis vraiment perdu dans toutes ces documentations et méthodes... :)