Form sans trim

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 : Form sans trim

par jyer » 03 janv. 2007, 14:52

Ben, franchement merci bcp.
Non seulement réponseS rapideS et exactes mais encore correction d'autres détails du code.
Vous faîtes vraiment fort... une excellente année 2007!

par AB » 03 janv. 2007, 14:50

...et petite amélioration, pendant que tu es dans la construction de ton formulaire tu peux rajouter la balise <label> en rajoutant l'id correspondant dans la balise <input>
C'est plus correct et quand tu cliques sur First Name *, ça positionne le curseur dans le champ correspondant.

Code : Tout sélectionner

<form action="" method="post"> <table> <tr> <td width='281'><label for="first_name">First Name *</label></td> <td width='156'> <input type='text' name='first_name' id="first_name" size='24' value="<?php if (isset($_POST['first_name'])) echo htmlentities($_POST['first_name'])?>" /> </td> </tr> <tr> <td> <input name="envoyer" type="submit" value="Envoyer" /> </td> </tr> </table> </form>
Au passage une adresse pour les fonctions php :
http://fr2.php.net/manual/fr/function.trim.php

par Invité » 03 janv. 2007, 14:46

Merci bcp.
Je vais tester ça de suite.
A+
jr

par AB » 03 janv. 2007, 14:33

J'allais le dire Ryle.

jyer, j'ai testé ça

Code : Tout sélectionner

<form action="" method="post"> <table> <tr> <td width='281'>First Name *</td> <td width='156'> <input type='text' name='first_name' size='24' value="<?php if (isset($_POST['first_name'])) echo htmlentities($_POST['first_name'])?>" /> </td> </tr> <tr> <td> <input name="envoyer" type="submit" value="Envoyer" /> </td> </tr> </table> </form>
et ça fonctionne parfaitement.
Par contre j'ai réussi à reproduire ton bug en faisant un echo sur le même code. Faits comme dit Ryle et tu n'auras pas de pb

par Ryle » 03 janv. 2007, 14:21

Et si dans le value de ton champ tu affiches directement la valeur de $vfirst_name, qu'est ce que ça donne ?

Par contre j'ai l'impression que tu fais un echo de tout ton code html, ce serait beaucoup plus simple si tu ne mettais du php que là où tu en as besoin. Au lieu de :
echo " ... 
           <tr> 
                <td width='281'>First Name *</td> 
                <td width='156'> 
                <input type='text' name='first_name' size='24' value=".htmlentities($_POST['first_name'])."> </td> 
            </tr> 
           ...";
Sort le html, ca te fera un code plus léger et surtout plus rapide a exécuter :)
<?php ... ?>
            <tr>
                <td width='281'>First Name *</td> 
                <td width='156'> 
                <input type='text' name='first_name' size='24' value="<?php echo htmlentities($_POST['first_name']); ?>"> </td> 
            </tr> 
<?php ... ?>

par jyer » 03 janv. 2007, 13:33

Ok.
Merci pour ta réponse, mais j'suis pas sûr d'avoir tout compris.
J'ai placé:
echo($_POST["first_name"]);
        echo($vfirst_name);
en fin de script. En effet, le script a renvoyé un prénom composé séparé par un espace. Les données sont donc justes. Mais lorsque que le formulaire se recharge, seul "jean" est affiché (et non jean louis).
Quid?

par Ryle » 03 janv. 2007, 13:21

Je ne comprend pas très bien et pense que tu ne cherches pas au bon endroit. La fonction trim() supprimer les espaces et tabulations (et il me semble les retours à la ligne) en début et fin de chaine uniquement :
$a = " Ma  chaine  avec       des espaces   ";
echo trim($a); // affiche "Ma  chaine  avec       des espaces"
A aucun moment elle ne te supprime des mots :)

Qu'obtiens tu lorsque tu affiches $_POST["first_name"] après avoir récupéré les données de ton formulaire ?
Quelle est la valeur de $vfirst_name (résultat du htmlentities) ?
Affiche ensuite le résultat du trim(), mais je en pense pas que cela te supprime autre chose que les espaces en début et fin de ta chaine...

Form sans trim

par jyer » 03 janv. 2007, 13:01

Bonjour,
J'suis un débutant en train de créer un site avec un formulaire.
J'ai quelques problèmes avec le traitment des données.
<tr>
	            <td width='281'>First Name *</td>
        		<td width='156'>
		        <input type='text' name='first_name' size='24' value=".htmlentities($_POST['first_name'])."> </td>
            </tr>
            <tr>
Ceci afin d'assurer que les données insérées dans le formulaire réapparaissent si PHP renvoi le formulaire pour éléments manquants. Au début j'avais mis .trim(htmlentities($_POST['...'])). comme dans le howto que j'ai chopé. Le problème est que, comme vous le savez, avec le fonction trim si le visiteur s'appelle Hubert de Montmirail, alors son nom sera résumé à "de", un brin ambarassant (surtout pour l'adresse, car on a que le premier mot qui reste).

Dans mon script, les données sont alors traitées de la manière suivante. Chaque variable du formulaire est renommé en une nouvelle variable:
$vfirst_name=htmlentities($_POST["first_name"]);
Là encore, il y avait un trim.html... que j'ai enlevé. Mais rien à faire, mes données ne sont jms complètes. J'ai parcouru tout le script, mais n'est trouvé aucune autre fonction "trim". Alors voilà mes questions:

1. Est-ce que htmlentities comprend une fonction trim?
2. Comment faire pour avoir l'intégralité de mes données?
3. J'ai entendu parlé du cross-scripting. Pour l'éviter, il suffit d'avoir une fonction "htmlentities". La fonction "trim" ne sert à rien pour se défendre contre cette faille. Vrai?

Merci bcp,
jr