Méthode de test d'un IF sur un Variable ?

Eléphant du PHP | 55 Messages

21 avr. 2011, 07:56

Bonjour,

Je tente de comprendre, j'ai cet exemple de tuto :
<form name="inscription" method="post" action="joe001.php">
Pseudo ? <input type="text" name="pseudo"/> <br/>
Ville ? <input type="text" name="ville"/><br/>
<input type="submit" name="valider" value="OK"/>
</form>
Puis ce test en PHP
<?php
if(isset($_POST["valider"]))
{
$pseudo=$_POST["pseudo"];
$ville=$_POST["ville"];
echo "Vous êtes : ". $pseudo."  de  ". $ville."<br/>";
}
?>

C'est là ou je ne comprends plus, car ce test me semble plus qu'incomplet, d'autant que quand on clique sans rien écrire dans une des deux zones de texte, ça passe aussi, bonjour le test du tutoriel ! Si la zone accepte le <return> il devient inutile de tester le bouton, ce qu'il faut tester c'est la longueur des variables après cadrage et retassement, habituellement en programmation on ferait la chose suivante :

<?php
// on retasse si jamais il n'y avait que du blanc !
$_POST["pseudo"] = retasseDroiteEtGauche($_POST["pseudo"])
$_POST["ville"] = retasseDroiteEtGauche($_POST["ville"])

// on coupe à la longueur décidée, ici 16 octets :
if longueur $_POST["pseudo"] > à 16 octets Alors longueur($_POST["pseudo"] = 16 octets)
if longueur $_POST["ville"] > à 16 octets Alors longueur($_POST["ville"] = 16 octets)

// Test final pour acceptation ou rejet
if longueur $_POST["pseudo"] < 2 or longueur $_POST["ville"] < 2 then exit sub
// echo ... affiche le résultat
?>



Quelqu'un veut-il bien avoir l'amabilité de me remettre ça en php que je comprenne comment bien tester une saisie ?

Merci beaucoup, cordialement.

Joe.
.
.
Cordialement.

Joe.
.

ViPHP
xTG
ViPHP | 7331 Messages

21 avr. 2011, 08:09

Le test du tutorial que tu as récupéré ne sert qu'à vérifier que l'utilisateur provient bien du formulaire.
Il teste l'existence des variable (fonction isSet()).

Pour tester le vide on peut utiliser la fonction : empty()
Pour tester une longueur on peut utiliser la fonction strlen() qui compte le nombre de caractères (1 caractère = 1 octet).
Pour le tassement je suppose que tu fais référence à la suppression d'espaces à droite et à gauche : trim()

Donc cela donnerai :
if( isSet($_POST['pseudo']) && isSet($_POST['ville']) ) // vérification existence variable
{
  // tassement
  $pseudo = trim($_POST['pseudo']);
  $ville = trim($_POST['ville']);

  // Vérification du vide
  if( !empty($ville) && !empty($pseudo) )
  {
    // Vérification longueur max
    if( strlen($ville) > 16 )
      $ville = substr($ville,0,16); // on ne prend que les 16 premiers caractères
    if( strlen($pseudo) > 16 )
      $pseudo = substr($pseudo,0,16); // on ne prend que les 16 premiers caractères

     // Vérification longueur min
    if( strlen($ville) < 2 || strlen($pseudo) < 2 )
      echo "La ville et le pseudo doivent comporter plus de 2 caractères.";
    else
      echo "Vous êtes : $pseudo  de  $ville";
  }
  else
    echo "Les champs pseudo et ville ne peuvent être vides.";
}

ViPHP
ViPHP | 2577 Messages

21 avr. 2011, 08:19

Bonjour,

isset() permet de vérifier si la variable est définie. C'est vivement conseillé sur les variables $_POST qui proviennent d'un formulaire et/ou de l'url ($_GET)

Pour supprimer les blancs : trim() (voir aussi ltrim et rtrim dans certain cas)

Pour la longueur d'une chaine : strlen()

Pour découper une chaine : substr()

Pour la doc sur les fonctions : http://www.php.net

L'exemple que tu cites est bien, il permet de voir comment récupérer les variables. Après à toi de voir comment tu gère l'enchainement de tes traitements entre les affichages, les controles et les les maj. On peut faire la même chose avec PHP qu'avec ASP ; dans le meilleur comme le pire.

Eléphant du PHP | 55 Messages

21 avr. 2011, 19:21

Cher amis, un grand merci pour vos réponses, dont je n'ai pas été avisé par mail, faut que je vois ça...

Il y a un seul truc qui me manque, c'est le <Return> ou équivalent, en effet dans une fonction PHP, comment sortir avant d'arriver au bout ?

Merci encore, au plaisir, cordialement.

Joe.
.
.
Cordialement.

Joe.
.