Valider en formulaire grâce à Php

Vincent33
Invité n'ayant pas de compte PHPfrance

21 sept. 2005, 13:09

Bonjour,

Je débute en Php, mais je veux valider un formulaire grâce à ce langage de programmation. Cette solution est certes plus lourde que Javascript, mais présente l'avantage de fonctionner quelques que soient la configuration des navigateurs, en "fiabilisant" les données enregistrées dans la base.

Par exemple, je veux m'assurer qu'un champ nom n'est pas vide et qu'il ne comporte pas de chiffres.

J'utilise la syntaxe suivante :

1) avant le code Html de la page
function invalidenomvide()
{
if(empty($_SESSION[nom]))
echo 'le nom ne peut être vide';
}

function invalidenomnumerique()
{
if((!ereg("^[:alpha:]|[:punct:]|[:space:]$",($_SESSION['nom']))) && (! empty($_SESSION['nom'])))
echo 'le nom ne peut comporter de chiffres.';
}
2) dans le code Html de la page
echo invalidenomvide();
echo invalidenomnumerique();
<input type="text" name="nom" id="nom" maxlength="30" tabindex="4" value="<?php echo"$_SESSION[nom]" ?>" />
Si le nom n'a pas été compléte ou comporte des chiffres, le champ "nom"apparaît vide, précédé du message d'erreur ad hoc.

A l'origine, j'avais pensé intégrer le code de vérification dans le corps de la page Html, mais mon code était devenu illisible. C'est pourquoi, j'ai préféré recourir à des fonctions.

La fonction "invalidenomnumerique" est suivi d'un ET logique pour détecter que le champ n'est pas vide. Sinon, le message d'erreur "le nom ne peut comporter de chiffres" apparaît systématiquement, en plus du message "le nom ne peut pas être vide".

J'ai essayé de construire une expression régulière, car je n'en ai trouvé aune vraiment satisfaisante sur le Net. Un patronyme peut comporter un tiret, une apostrophe, un espace, une particule qui débute par une minuscule suivi du qui débute par une majuscule (von Karajan)...

Je me pose les questions suivantes :

1) Pour le code de vérification

Pourquoi ne parviens-je à simplifier l'expression en ajoutant après mon if (= première condition, le nom de ne doit pas être vide) un elseif (= seconde condition, le nom ne doit pas comporter de chiffres) ?

Existerait-il une programmation plus élégante ?

2) Pour l'expression régulière

Puis-je raffiner cette expression ? Pourrait-elle détecter si le champ est vide (ça m'éviterait d'ajouter le ET) ? J'ai essayé d'ajouter un
[:blank:]
mais il ne fonctionne pas.

Enfin, mon expression ne fonctionne pas sur l'utilisateur indique "75(espace)75" ? Pourquoi ?

Merci pour vos conseils, et pardon pour ce post un peu long.

Cordialement,

Vincent

Mammouth du PHP | 19672 Messages

21 sept. 2005, 13:12

beaucoup plus simplement:
if(empty($var))
{
    // la variable ne contient qu'une chaîne vide
}
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: