affichage des "\" dans une zone de formulaire

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 : affichage des "\" dans une zone de formulaire

par AB » 24 août 2007, 19:56

J'utilise cette formule :

value="<?php echo (!empty($_POST['url'])) ? $_POST['url'] : '';?>

qui donne le même résultat.
pour un echo
value="<?php echo (!empty($_POST['url'])) ? htmlentities($_POST['url']) : '';?>
serait plus prudent.

par mosquitout » 23 août 2007, 19:43

Bon, ca va finir par rentrer :wink:
Merci bc pour vos conseils

par Sékiltoyai » 23 août 2007, 19:36

C'est pas équivalent mais ça marche aussi :)

par mosquitout » 23 août 2007, 17:16

J'utilise cette formule :

value="<?php echo (!empty($_POST['url'])) ? $_POST['url'] : '';?>

qui donne le même résultat.

par Sékiltoyai » 23 août 2007, 17:04

Au passage aussi, prend l'habitude de vérifier l'existence des entrées de ton formulaire avec isset :
if(isset($_POST['machin']))
ou bien
$machin = isset($_POST['machin']) ? $_POST['machin'] : '';

par AB » 23 août 2007, 15:01

Evidemment.
De toute façon tu ne peux pas récupérer des données issues de ton formulaire avant le remplissage et l'envoi de ton formulaire :wink:

par mosquitout » 23 août 2007, 14:38

Merci AB, c'est très clair :wink:
En fait je faisais une erreur en utilisant les stripslashes dès la récupération des données AVANT remplissage du formulaire.

Selon ton modèle, il faut les faire APRES validation du formulaire et avant l'enregistrement en base.

par AB » 23 août 2007, 14:34

Développement des conseils de Sékiltoyai :
//Récupération des données issues de ton formulaire
$nom =  (get_magic_quotes_gpc()) ? stripslashes($_POST['nom']) : $_POST['nom']; 

//Insertion dans une bdd
$query = "INSERT INTO user (`nom`) VALUES (mysql_real_escape_string($nom))";
...

//affichage des données récupérées dans la bdd
echo htmlentities($ligne['nom']);

//affichage direct des données issues de ton formulaire
echo htmlentities($nom);

par mosquitout » 23 août 2007, 14:24

désolé, j'ai oublié de m'enregistrer avant de répondre.

par Invité » 23 août 2007, 14:22

Ok Sekiltoyai, quant tu dis "en récupérant tes données du formulaire", en fait je peux enlever les slashes dès l'alimentation de mon formulaire !?

en suivant ce que tu me dis ca donnerai ca:
// je récupère les données
$ligne = mysqli_fetch_array($resultat);
$_POST['nomprod'] = (!get_magic_quotes_gpc()) ? stripslashes($ligne['nomprod']): $ligne['nomprod'];
$_POST['prixHT']     = (!get_magic_quotes_gpc()) ? stripslashes($ligne['prixHT']): $ligne['prixHT'];

// dans mon form j'ai 
<input type="text" name="nomprod" value="<?php echo (!empty($_POST['nomprod'])) ? $_POST['nomprod'] : '';?>" />
<input type="text" name="prixHT" value="<?php echo (!empty($_POST['prixHT'])) ? $_POST['prixHT'] : '';?>" />

// puis, après control du contenu, taille et type, si c'est ok, pour les enregistrer je fais
$nomprod = mysql_real_escape_string($_POST['nomprod']) 
// pas le prix car non string
// Puis je fais mon update ou insert
Est-ce c'est correct comme ca ?
Encore merci pour cette aide ;)

par Sékiltoyai » 23 août 2007, 12:05

Il y a mieux que de rentrer dans la bdd avec addslashes. Le mieux, c'est que dès la récupération du formulaire, tu enlèves les slashes, et que lors de l'utilisation de la donnee, si tu as besoin d'échappement, tu utilises la fonction appropriée, par exemple mysql_real_escape_string() pour échapper des données à entrer dans une base MySQL.

par mosquitout » 23 août 2007, 09:16

Ok, cimer AB et SeKiltoyai ;)
Bon pour voir si j'ai bien compris:
1) je désactive ds php.ini les magic_quotes (=> off)
2) pour rentrer des données en base à travers un formulaire, je test :
if(!get_magic_quotes_gpc())
{
      $nom = addslashes($_POST['nom']);
}
else
{
      $nom = $_POST['nom'];
}

puis fais mon insert 
3) pour afficher une données issue de ma bdd, je fais
$ligne = mysqli_fetch_array($resultat);
if(!get_magic_quotes_gpc())
{
      $_POST['nom'] = stripslashes($ligne['nom']);
}
else
{
     $_POST['nom'] = ($ligne['nom']);
}
C'est bien ca ?
Heu, une question comme ca, j'ai rentré ds ma bdd des données à la main avec des \ et des ', ca risque de fausser mon fonctionnement ca ?
Encore grand merci

par AB » 23 août 2007, 03:49

Je ne code qu'en anglais. Pense à l'internationnalisation, pense au fait que l'informatique c'est de l'anglais, donc il est logique d'écrire les programmes en anglais aussi (on ne met pas les commentaires en anglais, mais au moins le code …)
Bien entendu :wink:
Tu as du comprendre que mes remarques sont sur le mode humorisitique. Difficile de n'employer que le français sur un forum informatique, et parfois improductif. Je parlais pour un contexte plus général.

J'ai travaillé quelques années comme commercial - avec en préambule : techniques de ventes, psychologie de la communication A.T., P.N.L. etc. - et je suis effaré d'avoir constaté comment certaines techniques très simples peuvent induire des effets décisifs à court ou moyen terme.
Bien entendu, tout le monde n'est pas sensible à l'induction, mais on joue sur le nombre. Il n'est pas nécessaire d'être convaincu à 100% pour déclencher l'achat d'un produit, pas plus qu'il n'est nécessaire de convaincre tout le monde pour obtenir une majorité décisive.

Je pense, mais ça doit être l'âge (ou peut-être l'expérience), que la planète - et donc moi-même - se porteront d'autant mieux qu'il subsistera une diversité culturelle et biologique. Et c'est à mon avis un excellent indice pour la démocratie, également.

Enfin bon, on s'est un peu égaré du billet initial, mais mosquitout a certainement oublié de cliquer sur résolu.

EDIT En fait, j'avais écrit "on s'est un peu égaré du post initial" mais le correcteur automatique de Firefox m'a souligné en rouge. Merci FF. I' am damned :lol:

par Sékiltoyai » 23 août 2007, 02:35

La seule réserve que j'ai, c'est quand des mots sont directement traduisibles sans difficulté et sans équivoque. Mais bon c'est certain qu'en informatique... Je me prends même parfois à nommer des variables en anglais #-o
Je ne code qu'en anglais. Pense à l'internationnalisation, pense au fait que l'informatique c'est de l'anglais, donc il est logique d'écrire les programmes en anglais aussi (on ne met pas les commentaires en anglais, mais au moins le code …)

par AB » 23 août 2007, 02:26

Mais mon cher, ceux qui défendent le mieux la langue française ne sont pas forcément les plus stricts, car le fait d'imposer de dire courriel et non mail, de dire gomme à macher et non chewing gum, de dire planche à roulettes au lieu de skateboard, ce n'est pas servir la langue française, c'est la rendre autiste à toute évolution culturelle, et c'est la décrédibiliser vis à vis des jeunes ados boutonneux qui fument des oinj et queni leur reumeu.
Mais je m'égare, je pense avoir fait entendre mon point de vue :)
On croirait entendre le fameux linguiste dont j'ai oublié le nom...?
On est tout à fait d'accord :!:

La seule réserve que j'ai, c'est quand des mots sont directement traduisibles sans difficulté et sans équivoque. Mais bon c'est certain qu'en informatique... Je me prends même parfois à nommer des variables en anglais #-o