Vérification d'un numéro de Téléphone - Formulaire

Invité
Invité n'ayant pas de compte PHPfrance

27 janv. 2009, 15:06

Bonjour,

Je cherche à vérifier que le numéro de téléphone soit correct dans mon formulaire.

Jusque la pas de soucis, mais j'aimerais réduire la possibilité de ne rentrer que 10 numéros pour que ce soit validé.

Voici mon pti bout de code :

Code : Tout sélectionner

elseif (empty($_POST["tel"])) { // il manque le tel de l'expéditeur $erreur="<p>Saisissez votre numéro de téléphone...</p>"; } elseif (!eregi("[0-9]",$_POST["tel"])){ // le tel n'est pas valide $erreur="<p>Votre numéro de téléphone n'est pas valide...</p>"; }

Merci !

...

smile je pense avoir trouvé ...

Code : Tout sélectionner

{1-10}
En fait non

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 janv. 2009, 15:49

En version simple, tu peux utiliser strlen() pour déterminer la taille d'une chaine...

Avec les expressions régulières, il te faut effectivement définir un masque correspondant à ce que tu veux tester : "[0-9]{1,10}" équivaut à un chiffre de une à dix fois.
Si tu veux exactement 10 chiffres, tu définis ton masque ainsi : "[0-9]{10}"
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

27 janv. 2009, 16:03

En version simple, tu peux utiliser strlen() pour déterminer la taille d'une chaine...

Avec les expressions régulières, il te faut effectivement définir un masque correspondant à ce que tu veux tester : "[0-9]{1,10}" équivaut à un chiffre de une à dix fois.
Si tu veux exactement 10 chiffres, tu définis ton masque ainsi : "[0-9]{10}"
Merci ^^

Par contre "[0-9]{10}" ne fonctionne pas ... j'ai déjà essayé ...

:)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 janv. 2009, 17:37

Ah bah pourtant ça doit fonctionner...
function test($str) {
  if (eregi("[0-9]{10}", $str))
	echo "ok";
  else
	echo "ko";
}

test("0123456789"); // --> affiche  "ok"
test("abcdefghij"); // --> affiche  "ko"
test("01 23 45 67 89"); // --> affiche  "ko"
...
Pour affiner d'avantage le test, tu peux également ajouter les symbole ^ et $ pour spécifier que rien ne doit précéder ou suivre tes 10 chiffres : "^[0-9]{10}$" :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

28 janv. 2009, 13:03

:cry:

Voila, mon formulaire fonctionnait "parfaitement" jusqu'au moment ou je le teste et je m'aperçois que lors de l'envoi, et bien je ne reçois que le contenu du "message" et rien d'autres ... donc en gros il ne me sert à rien ! :shock:

Je cherche comment faire mais ce n'est pas si simple ... si quelqu'un veut bien me filer un pti coup de pouce ! :)

En gros evidemment j'aimerais recevoir les données de toutes les cases ... et pas seulement le contenu du message.

Voici mon code :
<?php
// Dans la ligne qui suit l'adresse email à laquelle les messages devront être envoyés
$email_webmaster = "[email protected]";
// === traitement des données du formulaire ============================================================
if (isset($_POST["envoyer"])){
// le formulaire a été soumis
        $etat = "erreur";
// Valeur par défaut. Prendra la valeur "ok" s'il n'y a pas d'erreur
// --- mise en forme des champs saisis dans le formulaire lors de sa soumission ---
		if (isset($_POST["nom"])) {
                 $_POST["nom"]=trim(stripslashes($_POST["nom"]));
        }
		if (isset($_POST["prenom"])) {
                 $_POST["prenom"]=trim(stripslashes($_POST["prenom"]));
        }
		if (isset($_POST["adresse"])) {
                 $_POST["adresse"]=trim(stripslashes($_POST["adresse"]));
        }
		if (isset($_POST["tel"])) {
                 $_POST["tel"]=trim(stripslashes($_POST["tel"]));
        }
        if (isset($_POST["email_expediteur"])) {
                 $_POST["email_expediteur"]=trim(stripslashes($_POST["email_expediteur"]));
        }
        if (isset($_POST["message"])) {
                 $_POST["message"]=trim(stripslashes($_POST["message"]));
        }
        // --- test de la validité des champs saisis ---
       
		if (empty($_POST["nom"])) {
// le nom est vide
                 $erreur="Saisissez votre nom...";
        }
		elseif (empty($_POST["prenom"])) {
// le prenom est vide
                 $erreur="Saisissez votre prénom...";
        }
		elseif (empty($_POST["adresse"])) {
// l'adresse est vide
                 $erreur="Saisissez votre adresse...";
        }
		elseif (empty($_POST["tel"])) {
// il manque le tel de l'expéditeur
                 $erreur="Saisissez votre numéro de téléphone...";
        }
		elseif (!eregi("[0-9]",$_POST["tel"])){   
// le tel n'est pas valide
                 $erreur="Votre numéro de téléphone n'est pas valide...";
        }
		elseif (empty($_POST["email_expediteur"])) {
// il manque l'email de l'expéditeur
                 $erreur="Saisissez votre adresse email...";
        }
        elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$",$_POST["email_expediteur"])){
// l'adresse e-mail n'est pas valide
                 $erreur="Votre adresse e-mail n'est pas valide...";
        }
		elseif (empty($_POST["message"])) {
// le message est vide
                 $erreur="Saisissez votre message...";
        }
        else {
// --- tous les champs sont correctement remplis: on pourra envoyer le mail ---
                 $etat="ok";
        }
}
else {
// --- le formulaire n'a pas été soumis ---
           $etat="attente";
}
// === fin de traitement des données du formulaire =======================================================
?>
<h2>Formulaire E-mail</h2>
<p>Contactez moi en remplissant le formulaire* ci-dessous pour m'envoyer vos demande de devis ou vos commandes</p>
<?php
if ($etat!="ok"){// le formulaire n'a pas été soumis, ou soumis avec une erreur
         if ($etat=="erreur"){
//le formulaire a été soumis avec une erreur
                         echo "<p><strong>".$erreur."</strong></p>\n";
// afficher le message d'erreur
         }
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>?page=mail">

<div class="form1">
<fieldset>

<p>
<label for="mr"><input type="radio" name="genre" value="monsieur" id="monsieur" />Mr</label>
<label for="mme"><input type="radio" name="genre" value="madame" id="madame" />Mme</label>
<label for="mlle"><input type="radio" name="genre" value="mademoiselle" id="mademoiselle" />Mlle</label>
</p>

<p>
<label for="nom">Nom : </label><span style="color: #cc0000;">*</span><br />
<input type="text" size="20" maxlength="50" name="nom" id="nom" value="<?php
if (!empty($_POST["nom"])) {
// le titre du message a été saisi: le réafficher
echo htmlspecialchars($_POST["nom"],ENT_QUOTES);
}
?>" />
</p>

<p>
<label for="prenom">Prénom : </label><span style="color: #cc0000;">*</span><br />
<input type="text" size="20" maxlength="50" name="prenom" id="prenom" value="<?php
if (!empty($_POST["prenom"])) {
// le titre du message a été saisi: le réafficher
echo htmlspecialchars($_POST["prenom"],ENT_QUOTES);
}
?>" />
</p>

<p>
<label for="adresse">Adresse : </label><span style="color: #cc0000;">*</span><br />
<input type="text" size="20" maxlength="125" name="adresse" id="adresse" value="<?php
if (!empty($_POST["adresse"])) {
// le titre du message a été saisi: le réafficher
echo htmlspecialchars($_POST["adresse"],ENT_QUOTES);
}
?>" />
</p>

<p>
<label for="tel">Téléphone : </label><span style="color: #cc0000;">*</span><br />
<input type="text" size="20" maxlength="50" name="tel" id="tel" value="<?php
if (!empty($_POST["tel"])) {
// le titre du message a été saisi: le réafficher
echo htmlspecialchars($_POST["tel"],ENT_QUOTES);
}
?>" />
</p>

<p>
<label for="email_expediteur">Votre mail : </label><span style="color: #cc0000;">*</span><br />
<input type="text" size="20" maxlength="50" name="email_expediteur" id="email_expediteur" value="<?php
if (!empty($_POST["email_expediteur"])) {
// l'adresse email de l'expéditeur a été saisie: la réafficher
echo htmlspecialchars($_POST["email_expediteur"],ENT_QUOTES);
}
?>" />
</p>

</fieldset>

</div>

<div class="form2">

<fieldset>

<p>
<label for="devis"><input type="radio" name="choice" value="devis" id="devis" />Devis</label>
<label for="commande"><input type="radio" name="choice" value="commande" id="commande" />Commande</label>
</p>

<p><label for="modele">Modèle :</label><br />
<input name="modele" type="text" size="20" maxlength="50" />
</p>

<p><label for="quantite">Quantité :</label><br />
<select name="quantite">
<option value="choix" selected="selected">Choisissez la quantité</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="5">6</option>
<option value="5">7</option>
<option value="5">8</option>
<option value="5">9</option>
<option value="5">10</option>
</select>
</p>

<p><label for="taille">Taille :</label><br />
<select name="taille">
<option value="choix" selected="selected">Choisissez une taille</option>
<option value="s">S</option>
<option value="m">M</option>
<option value="l">L</option>
<option value="xl">XL</option>
<option value="xxl">XXL</option>
<option value="xxxl">XXXL</option>
</select>
</p>

<p>
<label for="message">Message : </label><span style="color: #cc0000;">*</span><br />
<textarea name="message" id="message" cols="30" rows="3"><?php
if (isset($_POST["message"])) {
// le message a été saisi: le réafficher
echo htmlspecialchars($_POST["message"],ENT_QUOTES);
}
?>
</textarea>
</p>

</fieldset></div>

<p><div class="envoyer"><input type="hidden" name="envoyer" value="envoyer" /><input type="image" name="envoyer" src="visuels/images/envoyer.png" width="105" height="45" alt="Validation du formulaire" value="envoyer" />
<span style="visibility: hidden;"><input type="submit" value="envoyer" title="Validation du formulaire" /></span></div></p></form>

<?php
}
else {
// le formulaire a été soumis sans erreur, on envoie le mail
        $entete = "From: ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">\n";
        $entete .= "MIME-Version: 1.0";
        if (@mail($email_webmaster,$_POST["titre"],$_POST["message"],$entete)){
// mail envoyé
                echo "<p>Votre message a été envoyé.<br/>\n";
                echo "<a href=\"" . $_SERVER["PHP_SELF"] . "?page=mail\">Envoyer un autre message...</p></a>\n";
        }
        else {
// erreur lors de l'envoi du mail
                echo "<p><strong>Un problème s'est produit lors de l'envoi du message.</strong></p>\n";
                echo "<a href=\"" . $_SERVER["PHP_SELF"] . "?page=mail\"><p>Envoyer un autre message...</p></a>\n";
        }
}
?>
Ps : je pense que mon problème se situe dans la dernière portion de code php tout en bas ..., j'ai déjà essayé pas mal de solutions mais je n'y parviens pas ...

Merci à vous !

Eléphant du PHP | 422 Messages

28 janv. 2009, 13:17

Pourquoi ne pas traiter ça en javascript et HTML au niveau du formulaire ?

1) Limiter le champ de saisie à 10 caractères
2) Effectuer un contrôle sur les keypressed et n'autoriser que les chiffres

Invité
Invité n'ayant pas de compte PHPfrance

28 janv. 2009, 14:15

Pourquoi ne pas traiter ça en javascript et HTML au niveau du formulaire ?

1) Limiter le champ de saisie à 10 caractères
2) Effectuer un contrôle sur les keypressed et n'autoriser que les chiffres
Effectivement je n'y avais même pas pensé ! et je pense que ce serait le plus simple :)

Merci à vous

ViPHP
ViPHP | 1996 Messages

28 janv. 2009, 16:58

Oui mais version HTML, on peut encore mettre plus que necessaire avec cerains browzer internet.

Essaye ce truc simple (comme suggéré par Maître Ryle)
$tel = (is_numeric($_POST["tel"]) ? $_POST["tel"] : "" ; //car les retours de formulaire sont toujours des chaines
if (is_int($tel) && strlen($tel) == 10) 
{
}
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

28 janv. 2009, 20:00

Tu peux aussi supprimer tous les caractères non numériques, puis vérifier si ton numéro a le bon nombre de caractères :
$telephone = preg_replace("/[^0-9]/", "", $telephone);
Ca permet à l'utilisateur de saisir comme il le souhaite (avec des points, des espaces, des parenthèses etc. et toi de le reformatter ensuite comme bon te semble :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...