8791 sujets

Développement web côté serveur, CMS

Bonjour,

Ayant réalisé un formulaire (nom, prénom, téléphone, e-mail et message), j'essaie d'améliorer mon code de départ. Trois champs sont requis : le nom, le mail et le message que doit laisser l'internaute. J'ai placé une regex pour vérifier le format du n° de tél. Cependant, lorsque je décide de ne rien mettre dans le champ "téléphone" (et l'internaute est en droit de ne rien mettre à cet endroit car le champ n'est pas requis), le message qui annonce le mauvais "format" du téléphone apparaît (hors, j'ai spécifié au début du code que le cas à traiter était celui où la variable qui est censé accueillir le n° de tél. était spécifiée, donc contenant une donnée).
Quelqu'un aurait-il une idée de la source du problème ?

Le code :


<?php
        
        if (isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['telephone']) && isset($_POST['mail']) && isset($_POST['texte'])) //on vérifie que la variable 'mail' contient une donnée
        {
        // On rend inoffensives les balises HTML que le visiteur a pu rentrer
        $_POST['nom'] = htmlspecialchars($_POST['nom']);
        $_POST['prenom'] = htmlspecialchars($_POST['prenom']);
        $_POST['telephone'] = htmlspecialchars($_POST['telephone']);
        $_POST['mail'] = htmlspecialchars($_POST['mail']); 
        $_POST['texte'] = htmlspecialchars($_POST['texte']);
        
        //si le téléphone n'a pas été rentré sous la forme imposée par la regex, un script l'annonce, puis l'internaute est redirigé vers le formulaire
        if (!preg_match("#^0[1-9]([-. ]?[0-9]{2}){4}$#", $_POST['telephone']))
        {
            ?>
      <script>
            alert("le téléphone n'est pas valide ! Veuillez le saisir à nouveau.");          
            document.location.replace('contact.html');
        </script>
                
        <?php
        
        }
        //si le mail n'a pas été rentré sous la forme imposée par la regex, un script l'annonce, puis l'internaute est redirigé vers le formulaire
        if (!preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail'])) 
        {
        
        ?>
      <script>
            alert("l'adresse mail n'est pas valide ! Veuillez la saisir à nouveau sous la forme aa@a.aa (de 2 à 4 lettres après le point)");          
            document.location.replace('contact.html');
        </script>
                
        <?php
        
        }
        
        
        
            ?>
        <script>
            alert("Votre demande a été prise en compte.");
            document.location.replace('site_machinTruc.html');
        </script>
            
        
        <?php                          
                  
}
       ?>
Tu as mis au début de ton code :
isset($_POST['telephone'])


Donc il faut que ta variable "telephone" existe, ce qui n'est pas le cas si tu ne la remplis pas.

Enlève ça et ça devrait rouler.
Salut Skoua,

Merci pour ta réponse. J'ai enlevé
isset($_POST['telephone'])
, ça ne fonctionne toujours pas.
Et justement, puisque la variable n'est pas remplie et donc qu'elle n'existe pas, pourquoi le code entre les accolades est exécuté (c-à-d pourquoi le message signalant l'erreur de format de téléphone est-il exécuté ?) ?
Modifié par atari54 (25 Apr 2012 - 08:59)
Il faut que tu ajoutes

isset($_POST['telephone'])

dans

if (!preg_match("#^0[1-9]([-. ]?[0-9]{2}){4}$#", $_POST['telephone']))
Merci pour ta réponse WebD. Par contre, je ne crois pas que ce soit la bonne solution. Un un internaute d'un autre forum m'a proposé ceci, qui fonctionne parfaitement :


if (!empty($_POST['telephone']))
            {    
            //si le téléphone n'a pas été rentré sous la forme imposée par la regex, un script l'annonce, puis l'internaute est redirigé vers le formulaire
            if (!preg_match("#^0[1-9]([-. ]?[0-9]{2}){4}$#", $_POST['telephone'])) 
            {
            ?>
            <script>
                alert("le téléphone n'est pas valide ! Veuillez le saisir à nouveau.");          
                document.location.replace('contact.html');
            </script>
                
            <?php        
            }
            }


Ce qui me manquait, c'est ça :
if (!empty($_POST['telephone']))


Ce qui signifie "dans le cas où la variable n'est pas vide". Au départ, je pensais que c'était le isset() qui avait cette signification. Mais en fait, isset() signifie "dans le cas où la variable existe", et dans le cas du téléphone, cette variable existe bien (c'est le champ "téléphone"), même si elle est vide, d'où l'exécution du code se trouvant dans les accolades et donc l'apparition intempestive du message d'erreur.