Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


A quel moment effectuer la vérification?
auteur : Eric Berger
a)Avant l'envoi du formulaire
La vérification avant envoi ne peut se faire en PHP, PHP étant un langage serveur, elle devra donc être faite à l'aide d'un langage client, généralement javaScript. Cette vérification est utile dans le sens oû elle évite d'envoyé des données mal formatées vers le serveur, mais elle n'est pas fiable, car on ne peut contrèler de manière certaine le client et ce qu'il envoie (le javaScript peut être désactivé dans le navigateur, par exemple).

b)Avant enregistrement
C'est le meilleur moment pour vérifier les données, ceci assure que les données enregistrées respectent les règles fixées. La vérification avant enregistrement ne doit cependant porter que sur la validité du format des données et leur compatibilité avec les outils et supports (bdd, php).

c)Avant l'utilisation
A ce moment, les données devraient déjà être validées. Si ce n'était pas le cas, ça voudrait dire que des données invalides ont été sauvegardées, ce qui n'est pas acceptable. Il se peut cependant que des données doivent être préparées en vue d'une utilisation particulière, par exemple en supprimant les tags HTML pour l'affichage sur une page web. Dans ce cas seulement, une vérification des données se fera avant leur utilisation.


Que faut-il vérifier ?
auteur : Eric Berger
  • Les caractères interprétables par HTML et les caractères accentués ou spéciaux
    C'est la fonction htmlspecialchars() qui se charge de remplacer les caractères suivants* : & ' " < > par leur entité HTML. Cette fonction est également très utile si on veut présenter un exemple de code HTML dans une page web.

    Quant aux caractères accentués ou spéciaux, c'est la fonction htmlentities() qui est sollicitée. Elle fonctionne de la même manière que htmlspecialchars() mais s'applique à tous les caractères qui ont un équivalent en entité HTML. il est également possible d'ignorer les quote simples et doubles.

    * Il est possible de faire ignorer les quotes simple et doubles par la fonction.
  • Si on a à faire à une chaîne vide :
    Il est parfois utile de savoir si on a affaire à une chaîne vide, afin de ne pas enregistrer la donnée ou d'ajouter une valeur par défaut.
    En utilisant l'instruction suivante, il est possible de le savoir.
if(strlen($chaine) < 1){
    echo "la chaîne est vide";
} else {
    echo "la chaîne n'est pas vide";
}
lien : faq Comment se protéger de la faille XSS ?
lien : faq Comment se protéger des failles d'injection ?

Comment vérifier les données renvoyées par formulaire (POST) ?
auteur : Julp
Soit le champ de formulaire de méthode POST suivant :
<input type="text" name="mon_champ" ...>
Tester si $_POST["mon_champ"] est un entier :
if (is_numeric($_POST['mon_champ']) && (intval(0 + $_POST['mon_champ']) == $_POST['mon_champ'])) {
    echo 'Saisie correcte !';
} else {
    echo 'Saisie incorrecte !';
}
Tester si $_POST["mon_champ"] est un réel :
if(is_numeric($_POST['mon_champ'])) {
    echo 'Saisie correcte !';
} else {
    echo 'Saisie incorrecte !';
}
Tester si $_POST["mon_champ"] est une adresse email valide :
if (ereg('^.+@.+\\..+$', $_POST['mon_champ'])) {
    echo 'Email valide !';
} else {
    echo 'Email invalide !';
}

Pourquoi mes valeurs de champs textes de formulaires sont-elles coupées après le premier espace ?
auteur : Cyberzoide
La syntaxe d'un champ input de type text est la suivante :
<input type="text" name="nom" value="valeur" />
Selon la norme XHTML, les valeurs des attributs des balises doivent être délimitées par des doubles quotes.

Exemple exact :
<input type="text" name="nom" value="<?php echo $nom; ?>" />
Exemple inexact :
<input type="text" name="nom" value=<?php echo $nom; ?> />
Dans ce dernier exemple, si la variable $nom comporte des espaces, le navigateur n'interprétera pas le reste de la chaîne de caractères.

De même, si cette variable contient des doubles quotes, il faudra les déspécialiser avec la fonction addslashes(), sinon ils vont interférer avec les doubles quotes de délimitation de la valeur d'attribut.

Exemple :
<input type="text" name="nom" value="<?php echo addslashes($nom); ?>" />

Contrôler et réafficher un formulaire avec les valeurs déjà saisies
auteur : f-demu01
Pour construire un formulaire simple sur ce modèle, il faut deux choses :

1 - A chaque élément du formulaire, donner comme attribut value la variable php correspondant à l'attribut name :
echo '<input type="text" name="nounours" value="' .$_POST['nounours']. '">' ;
Attention, cette option ne fonctionne pas (ou mal) avec les champs FILE, car pour des raisons de sécurité, elle est désactivée sur la plupart des navigateurs.

2 - effectuer le traitement et l'affichage du formulaire dans la même page.
$out ="";
if(!empty($_POST['nounours']) && isset($_POST['envoi'])) 
{
    $out .= 'Traitement du formulaire...<br><a href="' .$_SERVER['PHP_SELF']. '">Retour</a>';
} 
else 
{
    // Le formulaire est envoyé mais le champ nounours n'est pas rempli
    if(isset($_POST['nounours']) && (isset($_POST['envoi'])))  
	{
        $out .= 'vous n\'avez pas rempli le champ nounours';
    }
    $out .= '<form action="' .$_SERVER['PHP_SELF']. '" method="POST" enctype="application/x-www-form-urlencoded">
                        <input type="text" name="nounours" value="' .htmlentities($_POST['nounours']). '">
                        <input type="submit" name="envoi" value="OK">
                    </form>';
}
echo $out;
lien : fr Les formulaires et PHP5, par Guillaume Rossolini
lien : faq Comment se protéger de la faille XSS ?
lien : faq Comment se protéger des failles d'injection ?

Comment afficher le contenu de POST/GET, SESSION ou SERVER ?
auteur : Forum PHP
Cela peut être utile pour vérifier le contenu des données transmises par un formulaire quelque soit la méthode ($_GET ou $_POST).
On utilise donc la fonction print_r() qui affiche des informations à propos d'une variable, de manière à ce qu'elle soit lisible.
Exemple :
Vérification sur $_GET
echo '<pre>';
print_r($_GET); // Affiche tout le contenu de la variable $_GET
echo '</pre>';
Ce code peut également être utilisé pour afficher le contenu de $_POST, $_SESSION ou $_SERVER

lien : faq Comment afficher (pour vérification) le contenu d'un tableau ?

Comment récupérer la position de la souris après un clic sur un submit de type image ?
auteur : Jérôme
D'un point de vue purement esthétique, il est parfois préférable d'utiliser un bouton image plutôt qu'un banal bouton submit pour envoyer un formulaire.
<form method="post" action="page.php">
    ...
    <input type="image" name="img_envoi" src="image_envoi.gif">
</form>
Après envoi de ce formulaire en ayant cliqué sur l'image, on récupère les coordonnées du point sur l'image, là où a été effectué le clic de souris, les coordonnées étant calculées par rapport au point 0,0 de l'image (haut gauche).
<?php
$Coords_X = $_POST["img_envoi_x"] ;
$Coords_Y = $_POST["img_envoi_y"] ;
echo 'Vous avez cliqué aux coordonnées (' . $Coords_X . ', ' . $Coords_Y . ')' ;
?>
Toutefois si vous avez attribué un effet de style (CSS) sur la balise Input, et que vous vouliez par exemple la positionner, ou simplement la faire afficher au dessus d'un autre calque vous serez face à un problème sous Firefox. En effet, il ne gère pas bien le positionnement CSS d'un tel élément HTML car il additionne le déplacement par CSS aux coordonnées envoyées (oui, c'est un bug). La solution est de placer l'INPUT dans un DIV et de positionner le DIV au moyen de la CSS.
Exemple :
Style appliqué aux éléments du formulaire
.box {
    height: 609px;
    widht: 632px;
}
.image_envoi {
    position: absolute;
    z-index: 1;
}
.image_envoi2 {
    position: absolute;
    z-index: 2;
}
Définition du fomulaire et ses composants
<form method="post" action="'.$_SERVER['PHP_SELF'].'">
    <div class="box">
      <div class="image_envoi">
        <input type="image" name="img_envoi" src="image_envoi.png">
      </div>
      <img src="tt" class="image_envoi2">
    </div>
</form>

Comment gérer un formulaire avec deux submit ?
auteur : Forum PHP
Pour savoir quel bouton submit a été cliqué, on effectue un test sur l'attribut name lors de la soumission.

Exemple :
//Définition du form
<form method="post">
	<input type="submit" name="poste" value="Envoyer" />
	<input type="submit" name="previz" value="Prévisualiser" />
</form>
//Test après soumission
if($_POST['poste']) 
{
  echo "submit Envoyer";
}
elseif($_POST['previz'])
{
  echo "submit Prévisualiser";
}

Comment vérifier qu'une chaine comporte uniquement des chiffres et des opérateurs arithmétiques
auteur : doof
Une fois de plus, on va faire appel aux expressions régulières et à la fonction preg_match.
if (preg_match('#(^[\d(]+[ +*()/\d-]*[\d)]+$)#', $txt)) {
  // c'est ok
  ...
}
Avec ce masque, il est même possible de remplacer toutes les opérations par leur résultat dans une chaine quelconque :
$txt = '(5 + 2) * 11' ;
$txt=@preg_replace('#([\d(]+[ +*()/\d-]*[\d)]+)#e', "&#39;<b>&#39;.round($0, 3).&#39;</b>&#39;", $txt);
echo $txt; // va afficher 77
Il vaut mieux vérifier avant qu'elle ne renvoie pas d'erreur (ou utiliser l'inhibiteur d'erreur), une parenthèse non fermée ou une division par zéro va entrainer une erreur.


Comment conserver la sélection d'un menu déroulant après une soumission ?
auteur : Kerod
Nous avons un SELECT généré dynamiquement. Pour obtenir et réafficher sa valeur après soumission du formulaire auquel il appartient, nous devons procéder comme l'exemple ci-dessous l'indique.
<form action="page.php" method="post">
  <select name="choix">
    <?php
      for($i = 0; $i < 10; $i++)
      {
        $selected = (isset($_POST['choix']) and $_POST['choix'] == $i)?'selected="selected"':'';
        echo '<option value="'.$i.'" '.$selected.'>'.$i.'</option>';
      }
     ?>
  </select>
  <input type="submit" value="Envoyer" />
</form>

precedent    sommaire    suivant   

Consultez les autres F.A.Q's


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2003  Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com