Bonjour,

Alors j ai créer un formulaire html et php . J'ai ajouter les champs obligatoires mais voila des que je clique pour aller sur la page on me montre que les champs ne sont pas complété et que les valeurs sont indéfinies mais une fois que j appuie sur "envoyer" il n y a plus de problème .

                <H3>Votre Logement :</H3> </br>
           <p>
             <h4> Type d'habitation</h4>
            <select name="habitation" id="habitation">
              <option value="appartement">Appartement</option>
              <option value="maison">Maison</option> </select>
      </br></br>
           <H4><label for="Code postal" >Code Postal</label></H4>
           <input type="number" name="cpostal " id="cpostal"/></br></br>
           <H4><label for="date">Date de contruction</label></H4>
           <input type="date" name="date" id="date"/></br></br>
            <h3>Vos Projets</h3></br></br>
            <h3>Votre Situation</h3></br>
           <h4> Civilité</h4>
            <select name="civilite"id="civilite" >
              <option value="mr">Mr</option>
              <option value="mme">Mme</option>
              <option value="mlle">Mlle</option>
            </select>   
               <h4><label for="nom" >Nom</label></h4>
           <input type="text" name="nom" id="nom"/></br>
            <H4><label for="prenom" >Prénom</label></H4>
           <input type="text" name="prenom" id="prenom"/></br>
            <H4><label for="email" >Email</label></H4>
           <input type="email" name="email"  id="email" /></br>
            <H4><label for="telephone" >Téléphone</label></H4>
           <input  type="tel" pattern="^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$" name="telephone" id="telephone"/></br></br>
              <input type="submit" value="envoyer"/></p>
            </form>
              <?php
$habitation=$_POST['habitation'];
//$cpostal=$_POST['cpostal'];
$date=$_POST['date'];
$civilite=$_POST['civilite'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$mail=$_POST['email'];
$tel=$_POST['telephone'];
 if (empty($_POST['date']))
    {
        echo "<font color=red>Il manque la date!<br/></font>";
    }
     if (empty($_POST['cpostal']))
    {
        echo "<font color=red>Il manque le code postal!<br/></font>";
    }
   if (empty($_POST['nom']))
    {
        echo "<font color=red>Il manque le nom!<br/></font>";
    }
      if (empty($_POST['prenom']))
    {
        echo "<font color=red>Il manque le prénom!<br/></font>";
    }
    if (empty($_POST['email']))
    {
        echo "<font color=red>Il manque votre email!<br/></font>";
    }
    if (empty($_POST['telephone']))
    {
        echo "<font color=red>Il manque le telephone!<br/></font>";
    }
else {
  header('Location: formulaire.php');
  echo "message envoyé</br>";
  $msg="$prenom $nom $mail $tel $message";
 mail('exemple@gmail.com', 'contact', $msg);
}
?>
Entourez votre code pour bien le mettre en forme

7 réponses


Tu peux un peu mieux expliquer ton code ?
Sinon, de préférence utilise

<?php
!isset($champs); //ceci
empty($champs);// que cela

?>

Tu as aussi, pour simplifier tes:

$habitation=$_POST['habitation'];
//$cpostal=$_POST['cpostal'];
$date=$_POST['date'];
$civilite=$_POST['civilite'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$mail=$_POST['email'];
$tel=$_POST['telephone'];

la fonction extract:

<?php
extract($_POST);
?>

Par exemple si un champs posté : $_POST['champ'], par la fonction extract, la variable $champ sera automatiquement créee :) soit, une ligne au lieu de tes 8 lol

Et puis je viens de comprendre ta demande, comme tu es placé sur la même pas, il faut bien utiliser la fonction isset qui te donne si une variable est définie ou non, c'est normal que quand tu postes le formulaire, l'erreur disparaît, les valeurs sont renseignées.

donc isset va definir les variable ?
et pourquoi quand je clique pour aller sur la page avec le formulaire j'ai les messages " il manque ..." pour tout les champs meme si je n'ai pas cliquer sur envoyer ?

isset ne définie pas les variables !
ça verifie si un variable est définie.

Bonsoir,
Pour faire un champ obligatoire, tu as aussi la possibilité de mettre "required" dans ta balise input en html.
Sinon pour ton php, le else que tu as fais que fonctionne que pour ton dernier if.

Voilà une façon de faire qui est simple et compréhensible

$errors = ""
// Si habitation n'existe pas OU est vide
if (!isset($_POST['habitation']) || empty($_POST['habitation']) {
$errors .= "Votre lieu est vide<br>";
}

// Si email n'existe pas OU est vide
if (!isset($_POST['email']) || empty($_POST['email']) {
$errors .= "Votre email est vide<br>";
}

...
// Si errors est vide alors on envoie le message
if (empty($errors)){
// J'envoie mon message
} else {
// Sinon j'affiche un message d'erreur
echo $errors;
}

Voilà quelque chose de simple, après il te faudra l'adapter à ton code et l'optimiser

Merci pour vos reponse j'ai pu regler mon probleme ! merci

En espérant que l'auteur lise encore ce topic :
Petite réaction à la réponse de Mehdikacim, la fonction extract doit être utilisé avec une extrème prudence, en effet cette fonction n'est présente dans PHP uniquement pour comprendre son fonctionnement (comme indiqué dans la doc). Mais pourrait être considéré comme obsolète à cause de la directive register_globals obsolète depuis PHP 5.3.*.

Donc dans le cas où nous récupérons des données utilisateurs il n'est vraiment pas conseillé d'utiliser cette fonction (sur des $_POST, $_FILES, $_GET) (ne jamais faire confiance à l'utilisateurs.. xD)

Infos et sources :
Un topic Openclassroom où on en parle
La doc de php qui t'expliquera ceci mieux que moi