Vérification d'un nom entré en paramètre ?

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 : Vérification d'un nom entré en paramètre ?

par travisbarker » 18 mai 2006, 12:42

il faut ajouter dans la page principale un bloc pour traiter l'action "ajouter_encadrement_DB" transmise par ton formulaire d'ajout :

Ta page principale est sans doute "page_accueil_templates.php" :
<?php
...
...
if ($_POST["action"] == "ajouter_encadrement_DB"){
   //intégrer la classe
   require_once('classe_joueur.php'); 

   //Test 
   //personne valide 
   $nom = $_POST['nom']; 
   $prenom = $_POST['prenom']; 
   $personne_valide = new Personne($nom, $prenom); 
   $personne_valide->afficheToi();
}
...
...
case 'ajouter_joueur': 
        // Affichage du formulaire d'ajout 
        $tpl->display('formulaire_ajout_joueur.tpl'); 
    break;
...
...
?>
Ok ça marche comme ça !

Par contre j'aimerais bien qu'il n'y ait pas une nouvelle page qui s'affiche avec "Le nom n'est pas valide", mais que cette phrase s'affiche sur la page ou j'ai le formulaire (à coté de la case ou l'utilisateur à enré le nom par exemple)...
C'est possible ?

par sadeq » 18 mai 2006, 12:27

il faut ajouter dans la page principale un bloc pour traiter l'action "ajouter_encadrement_DB" transmise par ton formulaire d'ajout :

Ta page principale est sans doute "page_accueil_templates.php" :
<?php
...
...
if ($_POST["action"] == "ajouter_encadrement_DB"){
   //intégrer la classe
   require_once('classe_joueur.php'); 

   //Test 
   //personne valide 
   $nom = $_POST['nom']; 
   $prenom = $_POST['prenom']; 
   $personne_valide = new Personne($nom, $prenom); 
   $personne_valide->afficheToi();
}
...
...
case 'ajouter_joueur': 
        // Affichage du formulaire d'ajout 
        $tpl->display('formulaire_ajout_joueur.tpl'); 
    break;
...
...
?>

par travisbarker » 18 mai 2006, 12:05

Et voila je suis de retour...

Donc mon vérificateur fonctionne comme il faut et j'aimerais l'intégrer à ce formulaire:

Code : Tout sélectionner

{include file="header.tpl"} <form name="ajouter" method="post" action="page_accueil_templates.php"> <h3> Ajouter une personne au staff</h3> <table> <td>Nom</td> <td><input type="text" name="nom" value=""></td> </tr> <tr> <td>Prenom</td> <td><input type="text" name="prenom" value=""></td> </tr> <tr> <td>Fonction</td> <td> <select name="fonction"> <option value="1">Entraineur</option> <option value="2">Entraineur-Adjoint</option> <option value="3">Préparateur Physique</option> <option value="4">Kiné</option> <option value="5">Médecin</option> </select> </td> </tr> </table> <input type="hidden" name="action" value="ajouter_encadrement_DB"> <input type="submit" name="sauver" value="Ajouter"> </form> {include file="footer.tpl"}
Ce formulaire est en fait une template.

je voudrais donc savoir comment intéger ça :
require_once('classe_joueur.php');

//Test
//personne valide
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$personne_valide = new Personne($nom, $prenom);
$personne_valide->afficheToi();
Dans le code principal, j'ai juste ça pour l'instant :
case 'ajouter_joueur':
        // Affichage du formulaire d'ajout
        $tpl->display('formulaire_ajout_joueur.tpl');
    break;
Merci d'avance pour le coup de main !

par travisbarker » 16 mai 2006, 17:07

C'est bon ça fonctionne !

Merci à vous deux pour le coup de main et la rapidité de vos réponses !

A bientot !

par sadeq » 16 mai 2006, 16:55

hum... sadeq, au risque d'etre pesant, pourquoi ne pas utiliser :
preg_match("#[^a-zäàâëèéêïîöôûù]#", $chaine)
qui renverra vrai si un caractere n'est pas dans l'ensemble de caractere valide... je pense que l'utilisation de preg_match_all est ici plus lourde..
tu n'est pas lourd du tout puisque t'as raison encore une fois sauf que dans le cas de notre ami il faut rajouter un strtolower($chaine) pour éviter le rejet des majuscules (qu'il gère d'ailleurs ailleurs)
preg_match("#[^a-zäàâëèéêïîöôûù]#", strtolower($chaine))

par jobherzt » 16 mai 2006, 16:44

hum... sadeq, au risque d'etre pesant, pourquoi ne pas utiliser :
preg_match("#[^a-zäàâëèéêïîöôûù]#", $chaine)
qui renverra vrai si un caractere n'est pas dans l'ensemble de caractere valide... je pense que l'utilisation de preg_match_all est ici plus lourde..

par sadeq » 16 mai 2006, 16:30

désolé de jouer les rabats joie, mais
private function contientDesCaracteresAdmis($chaine) {
        if ($chaine && (preg_match("#[a-zäàâëèéêïîöôûù]#", $chaine)) return true; else return false;       
    } 
ne fonctionnera pas comme tu veux... cette fonction renverra vrai des que la chaine contiendra au moins un caractere valide.. or toi tu veux qu'il n'y ai que des caracteres valides.. donc je pense qu'il faut utiliser la fonction que je t'ai proposée... si elle ne fonctionne pas, c'est qu'il doit y avoir un probleme sur la chaine..
Non le problème, c'est que j'ai une erreur quand j'utilise la methose POST. Quand je rentre les nom et prénom directement dans le code PHP, je n'ai pas d'erreur.
jobherzt a raison, l'expression preg_match ne répond pas exactement à la validation.
Mais la solution est d'utiliser preg_match_all pour forcer la validation de tous les caractères de la chaine (sans devoir utiliser une boucle)
    private function contientDesCaracteresAdmis($chaine) { 
 		//L'expression détecte au moins un caractère non valide
                 if (preg_match_all("#[^a-zäàâëèéêïîöôûù]#", strtolower($chaine), $résultat)) return false;
		else return true;      
    } 
Remarque : le strtolower() utilisé permet d'ignorer les majuscules

Pour ce qui est de ton formulaire il faut inverser l'affectation du $nom :
Corrigé:
$nom = $_POST["nom"];

par travisbarker » 16 mai 2006, 16:10

désolé de jouer les rabats joie, mais
private function contientDesCaracteresAdmis($chaine) {
        if ($chaine && (preg_match("#[a-zäàâëèéêïîöôûù]#", $chaine)) return true; else return false;       
    } 
ne fonctionnera pas comme tu veux... cette fonction renverra vrai des que la chaine contiendra au moins un caractere valide.. or toi tu veux qu'il n'y ai que des caracteres valides.. donc je pense qu'il faut utiliser la fonction que je t'ai proposée... si elle ne fonctionne pas, c'est qu'il doit y avoir un probleme sur la chaine..
Non le problème, c'est que j'ai une erreur quand j'utilise la methose POST. Quand je rentre les nom et prénom directement dans le code PHP, je n'ai pas d'erreur.

par jobherzt » 16 mai 2006, 15:49

désolé de jouer les rabats joie, mais
private function contientDesCaracteresAdmis($chaine) {
        if ($chaine && (preg_match("#[a-zäàâëèéêïîöôûù]#", $chaine)) return true; else return false;       
    } 
ne fonctionnera pas comme tu veux... cette fonction renverra vrai des que la chaine contiendra au moins un caractere valide.. or toi tu veux qu'il n'y ai que des caracteres valides.. donc je pense qu'il faut utiliser la fonction que je t'ai proposée... si elle ne fonctionne pas, c'est qu'il doit y avoir un probleme sur la chaine..

par travisbarker » 16 mai 2006, 15:00

Suite de mon problème... :oops:

J'ai créé un fichier PHP pour que l'utilisateur entre lui-même un nom et ça donne le code suivant :
<html>
<head>
 <title>Nom et prenom</title>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>

<form action="affiche_nom_et_prenom.php" method="POST">
<p>
Entrez un nom :</br>
<input name="nom" type="text"></br>
<input type="submit" value="Valider">
</p>
</form>

<?php

require_once('classes.php');

//Recupère le nom entré et l'assigne à la variable $nom
$_POST['nom'] = $nom;

//C'est $nom qui est testé
$personne_valide = new Personne($nom, "Alex");
$personne_valide->afficheToi();

?>

</body>
<html>
Et j'obtiens "le nom n'est pas valide"...

par travisbarker » 16 mai 2006, 14:41

Moi j'utiliserais l'expression régulaire preg_match comme ça:
<?php 

class Personne { 

      private $nom; 
      private $prenom; 

      public function __construct($nom, $prenom) { 
        if ($this->verifieChaine($nom)) { 
            $this->nom = $nom;} 
            else{die('Le nom n est pas valide');} 

        if ($this->verifieChaine($prenom)) { 
            $this->prenom = $prenom;} 
            else{die('Le prenom n est pas valide');} 
    } 

    public function __tostring() { 
        return "Je suis $this->prenom $this->nom !"; 
    } 

    public function afficheToi() { 
        print $this->__tostring(); 
    } 

    public function getNom() { 
        return $this->nom; 
    } 

    public function getPrenom() { 
        return $this->prenom; 
    } 

    private function contientDesCaracteresAdmis($chaine) { 
        if ($chaine && (preg_match("#[a-zäàâëèéêïîöôûù]#", $chaine)) return true; else return false;       
    } 

    private function commenceParMajuscule($chaine) { 
            if ($chaine[0] && preg_match("#[A-Z]#", $chaine[0])) return true;  else return false;
    } 

    private function verifieChaine($chaine) { 
        if ($chaine && $this->commenceParMajuscule($chaine) && $this->contientDesCaracteresAdmis($chaine))
			return true; 
        else return false; 
    } 
} 

//Test
//personne valide
$personne_valide = new Personne("Stehlin", "Alex"); 
$personne_valide->afficheToi();

//Dans ce qui suit, déactiver un test pour tester le suivant (puisque l'erreur fait un Die)

//Nom non valide (maj manque au début)
$personne_non_valide1 = new Personne("stehlin", "Alex"); 
$personne_non_valide1->afficheToi();

//Prénom non valide (maj manque au début)
$personne_valide2 = new Personne("Stehlin", "alex"); 
$personne_valide2->afficheToi();

//Nom non valide (caractères non admis)
$personne_valide2 = new Personne("123", "Alex"); 
$personne_valide2->afficheToi();

//Prénom non valide (caractères non admis)
$personne_valide2 = new Personne("Stehlin", "123"); 
$personne_valide2->afficheToi();

?>
Remarque: pour plus d'infos sur preg_match : http://fr3.php.net/manual/fr/function.preg-match.php
Cette methode marche nickel chez moi !
Merci !

Mais je vais quand même essayer de débeuguer la première version...

par sadeq » 16 mai 2006, 14:20

Moi j'utiliserais l'expression régulaire preg_match comme ça:
<?php 

class Personne { 

      private $nom; 
      private $prenom; 

      public function __construct($nom, $prenom) { 
        if ($this->verifieChaine($nom)) { 
            $this->nom = $nom;} 
            else{die('Le nom n est pas valide');} 

        if ($this->verifieChaine($prenom)) { 
            $this->prenom = $prenom;} 
            else{die('Le prenom n est pas valide');} 
    } 

    public function __tostring() { 
        return "Je suis $this->prenom $this->nom !"; 
    } 

    public function afficheToi() { 
        print $this->__tostring(); 
    } 

    public function getNom() { 
        return $this->nom; 
    } 

    public function getPrenom() { 
        return $this->prenom; 
    } 

    private function contientDesCaracteresAdmis($chaine) { 
        if ($chaine && (preg_match("#[a-zäàâëèéêïîöôûù]#", $chaine)) return true; else return false;       
    } 

    private function commenceParMajuscule($chaine) { 
            if ($chaine[0] && preg_match("#[A-Z]#", $chaine[0])) return true;  else return false;
    } 

    private function verifieChaine($chaine) { 
        if ($chaine && $this->commenceParMajuscule($chaine) && $this->contientDesCaracteresAdmis($chaine))
			return true; 
        else return false; 
    } 
} 

//Test
//personne valide
$personne_valide = new Personne("Stehlin", "Alex"); 
$personne_valide->afficheToi();

//Dans ce qui suit, déactiver un test pour tester le suivant (puisque l'erreur fait un Die)

//Nom non valide (maj manque au début)
$personne_non_valide1 = new Personne("stehlin", "Alex"); 
$personne_non_valide1->afficheToi();

//Prénom non valide (maj manque au début)
$personne_valide2 = new Personne("Stehlin", "alex"); 
$personne_valide2->afficheToi();

//Nom non valide (caractères non admis)
$personne_valide2 = new Personne("123", "Alex"); 
$personne_valide2->afficheToi();

//Prénom non valide (caractères non admis)
$personne_valide2 = new Personne("Stehlin", "123"); 
$personne_valide2->afficheToi();

?>
Remarque: pour plus d'infos sur preg_match : http://fr3.php.net/manual/fr/function.preg-match.php

par travisbarker » 16 mai 2006, 14:02

moi non plus, je l'ai testée la :
http://www.lumadis.be/regex/test_regex.php

et ca a l'air de marcher... affiche ta variable chaine, pour voir ??
J'ai rajouté
echo $chaine;
après
private function contientDesCaracteresAdmis($chaine) {
et il m'affiche le contenu de $nom suivi de "Le nom n'est pas valide"...

par jobherzt » 16 mai 2006, 13:55

moi non plus, je l'ai testée la :
http://www.lumadis.be/regex/test_regex.php

et ca a l'air de marcher... affiche ta variable chaine, pour voir ??

par travisbarker » 16 mai 2006, 13:51

je verrais un truc du genre :
if(preg_match('#[^aäàâbcdeëèéêfghiïîjklmnoöôpqrstuûùvwxyz]#',$chaine))
{
   return faux;
}else{
   return vrai;
}
ce qui signifie exactement "si tu trouves un caractere qui n'est pas dans aäàâbcdeëèéêfghiïîjklmnoöôpqrstuûùvwxyz, retourne faux, sinon retourne vrai."
J'ai essayé avec ta methode mais ça ne marche toujours pas... et je ne vois pas ou est l'erreur...

Mon code :
private function contientDesCaracteresAdmis($chaine) {
        if(preg_match('#[^aäàâbcdeëèéêfghiïîjklmnoöôpqrstuûùvwxyz]#',$chaine)){
            $ok = false;
        } else {
            $ok = true;
        }
      return $ok;
    }