PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 05-08-2013 08:59:22

Guy-fawkes
Membre
Inscription : 05-08-2013
Messages : 1

Où placer mes Regex ... ?

Bonjour,

Je suis relativement débutant au PHP, et je suis entrain de créer mon premier site.

JE vous explique mon problème : Mon formulaire n'a absolument aucune expression régulière ...c'est normal, j'en ai pas mis ... Et je n'arrive pas à en mettre >_< !

Alors voilà, j'ai créé une page : "contact.php", dans lequel le texte en html du formulaire y est, avec bien sûr le reste du site (Menu, header, footer ...etc.)

J'ai créé deux autres pages, qui sont : "Transfert.php", contenant le script PHP pour envoyer les données à l'adresse e-mail notée, et envoyant à la troisième page "Redirection.html", après l'envoi du formulaire.

Alors maintenant, au moment où je dois m'occuper des Regex, je me demande où les mettre : les inclure dans le fichier "Contact.php", ou dans le fichier "Transfert.php" smile

J'ai essayé dans les deux cas, et cela ne veut nullement marché, je partage avec vous les deux fichiers importants : Contact.php et Transfert.php, le fichier du traitement :


Contact.php :

<form name="monformulaire" action="transfert.php" method="post" style="margin-top : 0px; width : 900px; height : 100%; ">

 

<label style="padding-left : 15px;"><font color="#376d39">Nom complet </font></label>

<span class="form-required"><font color="black"><font color="#FE1B00">* :</font></span></br>

 

 

</br>

 

<input id="input-1" placeholder="Nom :" class="wsite-form-input wsite-input" type="text" name="nom" style="width: 170px; height ; 20px; margin-left : 15px;">

<input id="input-1" placeholder="Prénom :" class="wsite-form-input wsite-input" type="text" name="prenom" style="width: 170px; height ; 20px; margin-left : 66px;"></br></br>

 

<label style="padding-left : 15px;"><font color="#376d39">Secteur d'activité </font></label><span class="form-required"><font color="#FE1B00">* :</font></span>

</br></br>

<input id="input-1" class="secteur" type="text" name="secteur" style="width:420px; height ; 20px; margin-left : 15px;"></br></br>

 

<label style="padding-left : 15px;" for="mail"><font color="black"><font color="#376d39">E-mail </font></label>

<span class="form-required"><font color="#FE1B00">* :</font></span></br></br>

 

<input id="mail" for="mail"  class="mail" type="text" name="mail" style="width:420px; height ; 20px; margin-left : 15px;"></br>

</br>

 

<p>

 

</p>

<label style="padding-left : 15px;" for="telephone"><font color="#376d39">Numéro de téléphone </font></label>

<span class="form-required"><font color="#FE1B00" >* :</font></span></br></br>

 

<input id="telephone" name="telephone" for="telephone"  type="number" style="width:420px; height ; 20px; margin-left : 15px;">

 

</br></br>

<label style="padding-left : 15px;"><font color="#376d39">Adresse postale </font></label>

<span class="form-required"><font color="#FE1B00">* :</font></span>

 

 

</br></br>

<textarea id="adresse" name="adresse" rows="50" style="height: 50px; margin-left : 17px; width:420px; " ></textarea>

 

 

</br></br>

 

<label style="padding-left : 15px;"><font color="#376d39">Message</font></label>

<span class="form-required"><font color="#FE1B00">* :</font></span></br></br>

 

<textarea id="message" name="message" style="height: 100px; margin-left: 17px; width:420px;"></textarea>

</br></br>

 

<input type="submit" value="Soumettre" style="margin-left : 300px;">

 

<input type="reset" value="Tout effacer" style="margin-left : 15px;">

 

</form>





Transfert.php :



<?php
        $TO = "alioui.mehdi2303@gmail.com";

        $subject = "Devis";

        $h = "From: " . $TO;

            $message = $_POST['nom'];
           
           
            $message = $_POST['prenom'];
           
           
            $message = $_POST['secteur'];
           
           
            $message = $_POST['mail'];
           
           
            $message = $_POST['telephone'];
           
           
            $message = $_POST['adresse'];
           
           
           
            $message = $_POST['message'];

            while (list($key, $val) = each($_POST))

            {$message .= "$key : $val\n";}



            mail($TO, $subject, $message, $h);
               
               
            echo '<SCRIPT LANGUAGE="JavaScript">
            document.location.href="redirection.html"
            </SCRIPT>'




?>



Merci beaucoup de votre aide .. car je stagne, je n'arrive nullement à trouver le problème !

Hors ligne

#2 17-08-2013 13:12:25

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : Où placer mes Regex ... ?

salut,

Pourquoi vouloir forcément utiliser des expressions régulières ?

Ce n'est pas obligatoire, il tout a fait possible de valider un formulaire sans les utiliser.

Ton code semble être un mélange de toute les aide que tu as pu trouver sur le net, du coup je pense que tu te mélange les pinceaux wink

Le principe pour la validation d'un formulaire c'est :
1/ tester dans les tableaux $_GET ou $_POST si les infos dont l'on a besoin existe (ou pas). pour cela nous avons les fonctions isset ou empty
2/ Vérifier la cohérence des données. avec empty tu sais déjà que les variables ne sont pas vides (voir la doc pour le détail). Attention si le chiffre zéro est une valeur acceptable pour un champs de formulaire tu ne peux pas employer empty (cf doc).
Pour cela tu peux utiliser la fonction filter_var.


Amélioration possible :
* Le champ téléphone peu être de type tel plutôt que number
* Le champ mail peux être de type email plutôt que texte

exemple de validation pour ton formulaire

<?php
if (!empty($_POST['secteur']) && !empty($_POST['mail']) && !empty($_POST['telephone']) && !empty($_POST['adresse']) &&
    !empty($_POST['message']) && !empty($_POST['nom']) && !empty($_POST['prenom'])) {

    // Validation de l'email
    if(filter_var($_POST['mail'],FILTER_VALIDATE_EMAIL) === true) {
        // ok
        // validation du numéro de téléphone avec une expression régulière
        if(preg_match('^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$',$_POST['telephone'])){
            // ok
            // nom, prenom, secteur, adresse et message ne sotn pas vide, si pas de contrôle particulier on peux tout prendre pour envoyer l'email
        }else {
            // N° de téléphone KO => message d'erreur
            $TO = "alioui.mehdi2303@gmail.com";
            $subject = "Devis";
            $h = "From: " . $TO;
            $message = 'nom '.$_POST['nom'].PHP_EOL;
            $message .= 'prenom '.$_POST['prenom'].PHP_EOL;
            $message .= 'secteur '.$_POST['secteur'].PHP_EOL;
            $message .= 'email '.$_POST['mail'].PHP_EOL;
            $message .= 'telephone '.$_POST['telephone'].PHP_EOL;
            $message .= 'adresse '.$_POST['adresse'].PHP_EOL;
            $message .= 'message '.$_POST['message'].PHP_EOL;
            if(mail($TO,$subject,$message,$h)){
                // ok, redirection avec php pas besoin d'imondice html / js
                header('Location: redirection.html');
            }else {
                // erreur mail, cas assez improbable mais à traité quand même. donc un beau message d'erreur
            }
        }

    }else {
        // email KO un beau message d'erreur
    }

} else {
    // Erreur au moins un des champs obligatoire est vide
}

Pour faire bien cette validation devraient être faite sur la même page que l'affichage du formulaire, comme ça, en cas d'erreur, il est possible d'afficher un beau message d'erreur, proprement dans la page, et de pré remplir le formulaire avec ce qui à déjà été remplis. (et pourquoi pas appliquer une css sur le champs en erreur, par exemple font rouge, avec cadre rouge pour marquer l'emplacement de l'erreur).

La seul différence avec ce que j'ai fait c'est, qu'en général, on utilise le bouton submit (auquel on donne un nom) pour savoir si le formulaire est posté ou pas.

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

Pied de page des forums