Souci sur le traitement d'un formulaire

Carpediem
Invité n'ayant pas de compte PHPfrance

11 nov. 2013, 18:06

Bonjour à toutes et à tous,

Je suis sur le point de finaliser le site pour ma copine coiffeuse à domicile en local. Sur le traitement de mes formulaires (j'ai repris la même base pour tous), un petit souci fait que lorsque on ne rempli pas les champs demandés, mon message d'erreur ne s'affiche pas et pourtant aucune erreur php n'est détectée. Je pense probablement à un souci d'imbrication dans mes conditions mais étant débutant dans le monde de la programmation, je suis un peu perdu. Je vous joint ci dessous le formulaire puis le script php. Merci d'avance pour votre aide.

Cordialement

Formulaire html :
<div id="rdv">
<h3>Formulaire pour prendre rendez-vous ou en annuler un.</h3>
<form action="recu_rdv.php" enctype="multipart/form-data" method="post" id="rdv0">
  <p><i>Complétez le formulaire. Les champs marqué par </i><em>*</em> sont <em>obligatoires</em></p>
  <p>
  <fieldset>
    <legend>Vos coordonnées</legend>
      
      <label for="prdv">Objet :<em>*</em></label>
      <select name="objet" id="prdv">
        <option value="demande">Prendre Rendez-Vous</option>
        <option value="annulation">Annuler Un Rendez-Vous</option>
      </select><br/>
      
      <label for="civilite">Civilité :<em>*</em></label> 
     <select name="civilite" id="civilite">
        <option value="Madame">Madame</option>
        <option value="Mademoiselle">Mademoiselle</option>
        <option value="Monsieur">Monsieur</option>
     </select><br/>
      
      <label for="nomcontact">Votre Nom :<em>*</em></label>
      <input type="text" id="nomcontact" name="nom"><br/>
      
      <label for="prenomcontact">Votre Prénom :<em>*</em></label>
      <input type="text" id="prenomcontact" name="prenom"><br/>
      
      <label for="email">Votre E-mail :<em>*</em></label>
      <input type="email" id="email" name="email" placeholder="Exemple : [email protected]"><br/>
      
      <label for="tel">Votre N° De Téléphone :<em>*</em></label>
      <input type="text" id="tel" name="telephone" placeholder="Exemple : 0616171819"><br/>
      
      <label for="adresse">Votre Adresse :<em>*</em></label>
      <input type="text" id="adresse" name="adresse"><br/>
      
      <label for="cp">Votre Code Postal :<em>*</em></label>
      <input type="text" id="cp" name="cp" placeholder="Exemple : 16000"><br/>
      
      <label for="ville">Votre Ville :<em>*</em></label>
      <input type="text" id="ville" name="ville"><br/>
      
      <label for="date">Date désirée :<em>*</em></label>
      <input type="text" id="date" name="date" placeholder="Exemple : 15/11/2013"><br/>
      
      <label for="heure">Heure désirée :<em>*</em></label>
      <input type="text" id="heure" name="heure" placeholder="Exemple : 11:30"><br/>
      
      <label for="presta">Prestation souhaité :<em>*</em></label>
      <input type="text" id="presta" name="prestation" placeholder="Exemple : Coupe + Brushing"><br/>      
      
  </fieldset>
  
    <fieldset>
  
  <legend>Votre message :<em>*</em></legend>
  

    <textarea name="message" rows="7" cols="47">Apportez ici plus de détail notamment sur l'accés à votre éventuel résidence ou un digicode...
    </textarea>
            
  </fieldset>
  
  
  <p><input type="submit" value="Envoyer le message"></p>
  </p>
  </form>
  </div>
Traitement en PHP :
<div id="rdv_ok">

<?php

if (isset($_POST['objet']) && isset($_POST['civilite']) && isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['email']) && isset($_POST['telephone']) && isset($_POST['adresse']) && isset($_POST['cp']) && isset($_POST['ville']) && isset($_POST['date']) && isset($_POST['heure']) && isset($_POST['prestation']) && isset($_POST['message']))
{
  if (is_string($_POST['objet']) && is_string($_POST['civilite']) && is_string($_POST['nom']) && is_string($_POST['prenom']) && preg_match("#^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$#", $_POST['email']) && is_numeric($_POST['telephone']) && is_numeric($_POST['cp']) && is_string($_POST['ville']) && is_string($_POST['message']))
	{
    if (!empty($_POST['objet']) && !empty($_POST['civilite']) && !empty($_POST['nom']) && !empty($_POST['prenom']) && !empty($_POST['email']) && !empty($_POST['telephone']) && !empty($_POST['adresse']) && !empty($_POST['cp']) && !empty($_POST['ville']) && !empty($_POST['date']) && !empty($_POST['heure']) && !empty($_POST['prestation']))
	   {
		echo "<h4>Bonjour,<br/><br/>
              Votre demande de rendez-vous a bien été envoyé, une réponse vous sera envoyé très rapidement.<br/><br/>
              Cordialement<br/><br/>
              Retour à la page <a href=\"index.php\">Accueil</a></h4>";
	}
	else
	{
		echo "<h3>Vous n'avez pas rempli tous les champs obligatoires du formulaire.<br/>
    Veuillez recommencer svp.<br/><br/>
    Retour à la page <a href=\"contact.php\">Contact</a></h3>";
	}}}
  
try
{
    $bdd = new PDO('mysql:host=localhost;dbname=coiffure', 'root', '');
    $bdd->query("SET NAMES UTF8"); 
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$req = $bdd->prepare ('INSERT INTO rdv(ID, objet, civilite, nom, prenom, email, telephone, adresse, cp, ville, date, heure, prestation, message) 
                              VALUES(:ID, :objet, :civilite, :nom, :prenom, :email, :telephone, :adresse, :cp, :ville, :date, :heure, :prestation, :message)');
$req->execute(array(
    'ID' => NULL,
    'objet'=>$_POST['objet'],
    'civilite'=>$_POST['civilite'],
    'nom'=>$_POST['nom'],
    'prenom'=>$_POST['prenom'],
    'email'=>$_POST['email'],
    'telephone'=>$_POST['telephone'],
    'adresse'=>$_POST['adresse'],
    'cp'=>$_POST['cp'],
    'ville'=>$_POST['ville'],
    'date'=>$_POST['date'],
    'heure'=>$_POST['heure'],
    'prestation'=>$_POST['prestation'],
    'message'=>$_POST['message']));

?>



</div>

Eléphant du PHP | 77 Messages

11 nov. 2013, 18:33

Pour moi déjà la suite de ISSET ne sert à rien, dès l'instant où tu valides ton formulaire avec des champs textes ils sont présents.

Donc je commencerais par tester que j'arrive bien depuis la bonne page (celle où il y a le formulaire), sinon j'éjecte. Et si tu arrives donc bien de la bonne page, tes variables POST existent obligatoirement.

Ensuite, ton imbrication est beaucoup trop complexe et franchement illisible.

Pour construire déjà correctement le truc, commences par rassembler tes variables par type (numeric, string...) et mets-les dans un tableau. Ensuite, tu testes chaque valeur du tableau et tu break si une des valeurs est incorrecte. Pour savoir où t'en es, tu initialise une variable booleene à true que tu changes à false si t'es en erreur.
$lBool = true;
$lStrings = array($_POST['nom'], $_POST['prenom'], ...);
foreach($lStrings AS $lOneString){
     if(!is_string($lOneString)){
          echo 'champs texte incorrect';
         $lBool = false;
         break;
     }
}
//Je suis toujours à true, je continue...
if($lBool){
     $lNumerics = array($_POST['telephone'], $_POST['cp'], ...);
     foreach($lNumerics AS $lOneNumeric){
          if(!is_string($lOneNumeric)){
               echo 'champs numérique incorrect';
              $lBool = false;
              break;
         }
    }
}
//Toujours à true ? on continue
if($lBool){
//traitement suivant
}

Après il faut finaliser pour détecter quel champs est en erreur exactement (nom, prenom...), tester les variables avec des preg_match...

Et si à la fin t'es toujours à true alors tu envoies le formulaire.
Développeur PHP/Javascript/HTML

Mes sites perso :
construire une piscine => http://www.construire-sa-piscine.com
Le cadre végétal => http://www.cadre-vegetal.org

Carpediem
Invité n'ayant pas de compte PHPfrance

11 nov. 2013, 19:50

Bonsoir,

Merci pour votre réponse. Effectivement mon code est un peu "bordélique" et je ne cherche qu'à m'améliorer. Je me penche sur le problème dans la semaine avec ce que vous m'avez indiqué et je repasserais vous dire si tout s'est bien passé début de semaine prochaine.

Cordialement

Carpediem
Invité n'ayant pas de compte PHPfrance

15 nov. 2013, 02:13

Bonjour,

Après x heures dessus, je ne comprends définitivement rien, il y a des choses comme ça ou quand ça ne veut pas, il faut pas chercher. Je vais le laisser tel quel du moment que je reçois les messages des gens. j’espère ne jamais avoir de problème.

Merci encore

Morgane

Mammouth du PHP | 2278 Messages

15 nov. 2013, 14:09

Une proposition de formulaire plus facile à exploiter:

<!-- Je suis partisan de créer deux formulaires un pour prendre un pour annuler.
Ci-dessous pour prendre.
En utilisant required ="required" pour les champs texte, et des select quand c'est possible, on réduit le besoin de tests
ultérieurs.
J'ai ajouté des champs faculttaifs sur l'adresse

-->
<div id="rdv">
<h1> Coiffure à domicile MonCoiffeur</h1>
<h2>Prendre rendez-vous.</h2>
<form action="recu_rdv.php" enctype="multipart/form-data" method="post" id="rdv0">
   <fieldset>
     <legend>Votre identité</legend>     
       <label for="civilite">Civilité :</label> 
      	<select name="civilite" id="civilite">
	         <option selected = "selected" value="Madame">Madame</option>
	         <option value="Mademoiselle">Mademoiselle</option>
	         <option value="Monsieur">Monsieur</option>
      </select>
      
       <label for="nom">Votre nom :</label>
       <input required ="required" type="text" size = "40" name="nom">
       
       <label for="prenom">Votre prénom :</label>
       <input type="text" required = "required" size = "40" name="prenom"><br/>
       
       <label for="email">Votre E-mail sous cette forme :</label>
       <input type="email" required="required"  name="email" placeholder="[email protected]"><br/>
       
       <label for="tel">Votre N° de téléphone sous cette forme :</label>
       <input type="text" required = "required" name="telephone" size ="14" placeholder="06 16 17 18 19"><br/>
 </fieldset>
 <fieldset>
	<legend>Votre résidence si nécessaire</legend>
  		<label for ="residence">Nom de résidence</label>
  		<input type="text" name ="residence" size = "30" />
  
  		<label for "batiment">Bâtiment si nécessaire</label>
   		<input type="text" name ="batiment" size = "3" />      			
 
 		<label for "batiment">Escalier si nécessaire</label>
   		<input type="text" name ="escalier" size = "3" />      			
 
 		<label for ="etage">Etage si nécessaire</label>
   		<input type="text" name ="etage" size = "3" />
 
   		<label for ="digicode">Digicode si nécessaire</label>  
  		 <input type="text" name ="digicode" size = "5" />      		     			      			
</fieldset>
  <fieldset> 
  	<legend>Dans tous les cas</legend>    				
  	<label for="adresse">Numéro :</label>
       				<input type="text" size = "5" name="numero">
       				
       				<select name = "genre_voie">
						<option selected= "selected">rue</option>
						<option>avenue</option>>
						 <option>boulevard</option>  
						<option>allée(s)</option>
						<option>place</option>>
						 <option>square</option>  
						  <option>route</option>
						<option>chemin</option>>
       				</select>
       				<input type = "text" name ="nom_voie" size = "50" required = "required" placeholder =" des papillons" />
       				<br />
       				
       <label for="cp">Code Postal :</label>
       <input type="text" required="required" name="cp" size="5" placeholder="16000">
       
       <label for="ville">Votre Ville :</label>
       <input type="text" required ="required" size = "50" name="ville">
</fieldset>
<fieldset>
	<legend>Choix du rendez-vous</legend>
       <label for="date">Date désirée :</label>
       <select required = "required" name = "quantieme">
       		<option>1</option>
            <option>2</option>
            <option>3</option>
            <option>4</option>
       </select>
       /
     <select required = "required" name = "mois">
       		<option>1</option>
            <option>2</option>
            <option>3</option>
            <option>4</option>
       </select>
       /
 		<select required = "required" name = "annee">
       		<option>2013</option>
            <option>2014</option>
            <option>2015</option>
            <option>2016</option>
       </select>            

       <label for="heure">Heure désirée :</label>
       <select required = "required" name = "heure">
       		<option>9h</option>
     		<option>9h 30</option>      		
            <option>10h</option>
            <option>10h 30</option>
            <option>11h</option>
       </select>      
      
       <label for="presta">Prestation souhaitée : </label>
       
   <select required = "required" name = "presta">
       		<option>shampoing</option>
     		<option>shampoing coupe brushing</option>      		
            <option>shampoing coupe couleur brushing</option>
            <option>permanente</option>
       </select>      
       
   </fieldset>
   
     <fieldset>
   
   <legend>Votre message si une information doit être ajoutée :</legend>
   

     <textarea name="message" rows="5" cols="80">
     </textarea>
             
   </fieldset>
   
   
   <p><input type="submit" value="Envoyer le message"></p>
   </p>
   </form>
   </div>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Carpediem
Invité n'ayant pas de compte PHPfrance

17 nov. 2013, 23:56

Bonsoir,

Excuse moi pour cette réponse tardive, j'ai passé pas mal d'heure dessus afin de faire un formulaire pas trop dégueu. je suis parti de ton idée qui m'a permis de me remotiver. J'avais dans la tête que le required était déprécié xhtml c'est pour cela que je ne l'utilisais pas. Enfin bref, merci à toi et voici les codes complet et fonctionnelles a 100%

Voila le formulaire :
<div id="rdv">
<h3>Formulaire pour prendre rendez-vous.</h3>
<form action="recu_rdv.php" enctype="multipart/form-data" method="post">
  <p><i>Complétez le formulaire. Les champs marqué par </i><em>*</em> sont <em>obligatoires</em></p>
  <p>
  <fieldset>
    <legend>Vos coordonnées</legend>
           
      <label for="civilite">Civilité :<em>*</em></label> 
     <select name="civilite" id="civilite" required ="required">
        <option value="Madame">Madame</option>
        <option value="Mademoiselle">Mademoiselle</option>
        <option value="Monsieur">Monsieur</option>
     </select>
     
     <label for="nomcontact">Nom :<em>*</em></label>
      <input type="text" id="nomcontact" maxlength="40" name="nom" required ="required">
      
     <label for="prenomcontact">Prénom :<em>*</em></label>
     <input type="text" id="prenomcontact" maxlength="40" name="prenom" required ="required">
      
     <label for="email">E-mail :</label>
     <input type="email" id="email" name="email" placeholder="Exemple : [email protected]" required ="required"><br/>

      <label for="tel">N° De Téléphone :<em>*</em></label>
      <input type="text" id="tel" name="telephone" maxlength="14" placeholder="Exemple : 0616171819" required ="required">
      
      <label for="adresse">Adresse :<em>*</em></label>
      <input type="text" id="adresse" maxlength="50" name="adresse" required ="required"><br/>
      
      <label for="cp">Code Postal :<em>*</em></label>
      <input type="text" id="cp" size = "5" name="cp" placeholder="Exemple : 16000" required ="required">
      
      <label for="ville">Votre Ville :<em>*</em></label>
      <input type="text" id="ville" maxlength="50" name="ville" required ="required"><br/>
      
</fieldset>


<fieldset>
    <legend>Votre Prestation</legend>
    
<div id="prestation">

<label for="jour">Date Désirée :<em>*</em></label>    
<?php      
      $selected = '';
 

  echo '<select id="jour" name="jour" required = "required">',"\n";
  for($i=1; $i<=31; $i++)
  {

    if($i == date('d'))
    {
      $selected = ' selected="selected"';
    }

    echo "\t",'<option value="', $i ,'"', $selected ,'>', $i ,'</option>',"\n";

    $selected='';
  }
  echo '</select>',"\n";
?>

/
<select required = "required" name = "mois" id="mois">
            <option>Janvier</option>
            <option>Février</option>
            <option>Mars</option>
            <option>Avril</option>
            <option>Mai</option>
            <option>Juin</option>
            <option>Juillet</option>
            <option>Août</option>
            <option>Septembre</option>
            <option>Octobre</option>
            <option>Novembre</option>
            <option>Décembre</option>
       </select>
/
<?php

  $selected = '';
 

  echo '<select id="annee" name="annee" required = "required">',"\n";
  for($i=2013; $i<=2014; $i++)
  {

    if($i == date('Y'))
    {
      $selected = ' selected="selected"';
    }

    echo "\t",'<option value="', $i ,'"', $selected ,'>', $i ,'</option>',"\n";

    $selected='';
  }
  echo '</select>',"\n";
  
  ?>
  <a href="agenda.php" target="_blank" class="lien">&nbsp Voir l'agenda de Morgane</a>
  </div>

<div id="heure">
  
 <label for="heure">Heure désirée :<em>*</em></label>
       <select required = "required" name = "heure" id="heure">
            <option>9h</option>                  
            <option>10h</option>
            <option>10h30</option>
            <option>11</option>
            <option>11h30</option>
            <option>14h</option>
            <option>15h</option>
            <option>15h30</option>
            <option>16h</option>
            <option>16h30</option>
            <option>17h</option>
            <option>17h30</option>
            <option>18h</option>
            <option>18h30</option>
       </select>
</div>

 <label for="prestation">Prestation Désirée :<em>*</em></label> 
   <select required = "required" name = "prestation" id="prestation">
                <option>Balayage</option>
                <option>Brushing</option>
                <option>Couleur</option>
                <option>Coupe</option>
                <option>Mèches</option>
                <option>Couleur + Mèches</option>
                <option>Couleur + Brushing</option>
                <option>Coupe + Balayage</option>
                <option>Coupe + Brushing</option>
                <option>Coupe + Couleur</option>
                <option>Coupe + Mèches</option>
                <option>Couleur + Mèches + Brushing</option>               
                <option>Coupe + Couleur + Brushing</option>
                <option>Coupe + Couleur + Mèches</option>
                <option>Coupe + Balayage + Brushing</option>
                <option>Coupe + Mèches + Brushing</option>
                <option>Coupe + Couleur + Mèches + Brushing</option>
       </select>
       
       <a href="nuancier_page1.php" target="_blank" class="lien">&nbsp Voir le nuancier de couleurs</a>     
      
  </fieldset>
  
 <fieldset>
        <legend>Renseignements Complémentaires</legend>
                <label for ="residence">Nom De Résidence :</label>
                <input type="text" name ="residence" maxlength="30" />
  
                <label for "batiment">Bâtiment :</label>
                <input type="text" name ="batiment" maxlength="3" />                       
 
                <label for "batiment">Escalier :</label>
                <input type="text" name ="escalier" maxlength="3" />                       
 
                <label for ="etage">Etage :</label>
                <input type="text" name ="etage" maxlength="2" />
 
                <label for ="digicode">Digicode :</label>  
                 <input type="text" name ="digicode" maxlength="6" />                                                                      
</fieldset>
  
    <fieldset>
  
  <legend>Votre message :</legend>
  

    <textarea name="message" rows="7" cols="47">Indiquer ici tout autre information qui pourrait être utile.
    </textarea>
            
  </fieldset>
  
  <input type="hidden" name="legende1"> // petit antispam 1
  <input type="hidden" name="legende2" value="qk4e5fg6t9yu1"> // petit antispam 2
  <p><input type="submit" value="Envoyer le message" name="envoyer"></p>
  </p>
  </form>
  </div>
Voila la reception en php
<div id="rdv_ok">

<?php

$legende2=trim(stripslashes($_POST["legende2"]));
// Si le formulaire a été soumis
if (isset($_POST["envoyer"])){

    if ($legende2="qk4e5fg6t9yu1"); { 
	// On initialise notre etat à erreur, il sera changé à "ok" si la vérification du formulaire est un succès, sinon il reste à erreur
	$etat = "erreur"; 
	// On récupère les champs du formulaire, et on arrange leur mise en forme
	// trim()  enlève les espaces en début et fin de chaine
	if (isset($_POST["civilite"])) $_POST["civilite"]=trim(htmlspecialchars($_POST["civilite"])); 

	if (isset($_POST["nom"])) $_POST["nom"]=trim(htmlspecialchars($_POST["nom"])); 

	if (isset($_POST["prenom"])) $_POST["prenom"]=trim(htmlspecialchars($_POST["prenom"]));

	if (isset($_POST["email"])) $_POST["email"]=trim(htmlspecialchars($_POST["email"]));

	if (isset($_POST["telephone"])) $_POST["telephone"]=trim(htmlspecialchars($_POST["telephone"]));
  
  if (isset($_POST["adresse"])) $_POST["adresse"]=trim(htmlspecialchars($_POST["adresse"]));
  
  if (isset($_POST["cp"])) $_POST["cp"]=trim(htmlspecialchars($_POST["cp"]));
  
  if (isset($_POST["ville"])) $_POST["ville"]=trim(htmlspecialchars($_POST["ville"]));
  
  if (isset($_POST["jour"])) $_POST["jour"]=trim(htmlspecialchars($_POST["jour"]));
  
  if (isset($_POST["mois"])) $_POST["mois"]=trim(htmlspecialchars($_POST["mois"]));
  
  if (isset($_POST["annee"])) $_POST["annee"]=trim(htmlspecialchars($_POST["annee"]));
  
  if (isset($_POST["heure"])) $_POST["heure"]=trim(htmlspecialchars($_POST["heure"]));
  
  if (isset($_POST["prestation"])) $_POST["prestation"]=trim(htmlspecialchars($_POST["prestation"]));
  
  if (isset($_POST["residence"])) $_POST["residence"]=trim(htmlspecialchars($_POST["residence"]));
  
  if (isset($_POST["batiment"])) $_POST["batiment"]=trim(htmlspecialchars($_POST["batiment"]));
  
  if (isset($_POST["escalier"])) $_POST["escalier"]=trim(htmlspecialchars($_POST["escalier"]));
  
  if (isset($_POST["etage"])) $_POST["etage"]=trim(htmlspecialchars($_POST["etage"]));
  
  if (isset($_POST["digicode"])) $_POST["digicode"]=trim(htmlspecialchars($_POST["digicode"]));
  
  if (isset($_POST["message"])) $_POST["message"]=trim(htmlspecialchars($_POST["message"]));
  
  if (isset($_POST["legende1"])) $_POST["legende1"]=trim(htmlspecialchars($_POST["legende1"]));
  
  if (isset($_POST["legende2"])) $_POST["legende2"]=trim(htmlspecialchars($_POST["legende2"]));

	// Après la mise en forme, on vérifie la validité des champs
	// L'utilisateur n'a pas rempli le champ nom
	if (empty($_POST["nom"])) { 
		// On met dans erreur le message qui sera affiché
		$erreur="Vous n'avez pas entré votre nom..."; 
	}
	// L'utilisateur n'a pas rempli le champ prenom
	elseif (empty($_POST["prenom"])) {
		$erreur="Vous n'avez pas entré votre prénom...";
	}
  // L'utilisateur n'a pas rempli le champ email
	elseif (empty($_POST["email"])) {
		$erreur="Nous avons besoin de votre email pour vous répondre...";
	}
	// On vérifie si l'email est bien de la forme [email protected]
	elseif (!preg_match("$[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$",$_POST["email"])){ 
		$erreur="Votre adresse e-mail n'est pas valide...Il doit être sous la forme suivante : [email protected]";
	}
  // L'utilisateur a mal rempli le numéro de téléphone
	elseif (!preg_match("#(^\+[0-9]{2}|^\+[0-9]{2}\(0\)|^\(\+[0-9]{2}\)\(0\)|^00[0-9]{2}|^0)([0-9]{9}$|[0-9\-\s]{10}$)#", $_POST['telephone'])) {
		$erreur="Votre numéro de téléphone n'est pas valide...Il doit être sous la forme suivante : 0545123456 ou 0612345678";
	}
	// L'utilisateur n'a pas rempli le champ adresse
	elseif (empty($_POST["adresse"])) { 
		$erreur="Veuillez entrer une adresse...";
	}
  // L'utilisateur a mal rempli le code postal
	elseif (!preg_match('#^[0-9]{5}$#', $_POST['cp'])) { 
		$erreur="Votre code postal doit contenir 5 chiffres et aucune lettre...Il doit être sous la forme suivante : 16160";
	}
	// L'utilsateur n'a rentré aucune ville
	elseif (empty($_POST["ville"])) { 
		$erreur="Merci de saisir une ville...";
	}
  // L'utilsateur a eu un problème sur le champ select jour
	elseif (!is_numeric($_POST["jour"])) { 
		$erreur="Le jour demandé n'est pas un nombre...";
	}
  // L'utilsateur a eu un problème sur le champ select mois
  elseif (!is_string($_POST["mois"])) { 
		$erreur="Le mois demandé n'est pas valide...";
	}
  // L'utilsateur a eu un problème sur le champ select annee
	elseif (!is_numeric($_POST["annee"])) { 
		$erreur="L'année demandé n'est pas un nombre...";
	}
  // L'utilsateur a eu un problème sur la selection de l'heure
	elseif (!is_string($_POST["heure"])) { 
		$erreur="L'heure demandé n'est pas valide...";
	}
  // L'utilsateur a eu un problème sur la selection de la prestation
	elseif (empty($_POST["prestation"])) { 
		$erreur="La prestation demandé n'existe pas...";
	}
  // Vérification antispam 1
	elseif (!empty($_POST["legende1"])) { 
		$erreur="Erreur dans la transmission du formulaire...";
	}
	// Si tous les champs sont valides, on change l'état à ok
	else { 
		$etat="ok";
    }
	}
}


if ($etat=="ok"){ 
	// Cas où le formulaire a été soumis mais il y a des erreurs
  echo "<h4>Votre message a bien été envoyé, une réponse vous sera envoyé sous 24h.<br/><br/>
              Cordialement<br/><br/>
              Retour à la page <a href=\"index.php\">Accueil</a></h4>";
              
  try
{
    $bdd = new PDO('mysql:host=localhost;dbname=coiffure', 'root', '');
    $bdd->query("SET NAMES UTF8"); 
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

$req = $bdd->prepare ('INSERT INTO rdv(ID, civilite, nom, prenom, email, telephone, adresse, cp, ville, jour, mois, annee, heure, prestation, residence, batiment, escalier, etage, digicode, message) 
                              VALUES(:ID, :civilite, :nom, :prenom, :email, :telephone, :adresse, :cp, :ville, :jour, :mois, :annee, :heure, :prestation, :residence, :batiment, :escalier, :etage, :digicode, :message)');
$req->execute(array(
    'ID' => NULL,
    'civilite'=>$_POST['civilite'],
    'nom'=>$_POST['nom'],
    'prenom'=>$_POST['prenom'],
    'email'=>$_POST['email'],
    'telephone'=>$_POST['telephone'],
    'adresse'=>$_POST['adresse'],
    'cp'=>$_POST['cp'],
    'ville'=>$_POST['ville'],
    'jour'=>$_POST['jour'],
    'mois'=>$_POST['mois'],
    'annee'=>$_POST['annee'],
    'heure'=>$_POST['heure'],
    'prestation'=>$_POST['prestation'],
    'residence'=>$_POST['residence'],
    'batiment'=>$_POST['batiment'],
    'escalier'=>$_POST['escalier'],
    'etage'=>$_POST['etage'],
    'digicode'=>$_POST['digicode'],
    'message'=>$_POST['message']));
              }
              
elseif ($etat=="erreur"){ 
		// On affiche le message correspondant à l'erreur
		echo "<h4>$erreur</h4>Retour à la page <a href=\"index.php\">Accueil</a>"; 
	}
  
else {
    echo "<h4>Erreur dans la transmission du formulaire.Retour à la page <a href=\"index.php\">Accueil</a></h4>";
}

  

	?>
</div>
Merci encore. Le site sera mis en ligne le 21/11/2013 en principe si la fin de celui ci se déroule bien

Cordialement

Morgane

Eléphant du PHP | 77 Messages

18 nov. 2013, 00:06

Une remarque, tu stockes le message d'erreur dans une variable $erreur que tu affiches à la fin si les tests sont pas OK.

Par contre, vu comme tu fais, tu affiches seulement la "dernière" erreur du formulaire. Mais la personne peut très bien avoir fait plusieurs erreurs non ? Par exemple pas d'email et un mauvais numéro de téléphone.

Pour afficher toutes les erreurs, tu initialises $erreur AVANT le premier message (il faut une valeur avant la première concaténation):
$erreur = '';
if (empty($_POST["nom"])) {
        // On met dans erreur le message qui sera affiché
      $erreur .= "Vous n'avez pas entré votre nom....<br />";
}
//Et on continue avec tous les autres messages concaténés...
Mais ensuite tu concatènes tous les messages d'erreur suivants avec le .= :
$erreur .= "Vous n'avez pas entré votre prénom...<br />";
Et tu mets un < br / > à la fin de chaque message pour qu'il fasse un saut de page entre chaque message.

De cette façon, tu affiches toutes les erreurs.
Développeur PHP/Javascript/HTML

Mes sites perso :
construire une piscine => http://www.construire-sa-piscine.com
Le cadre végétal => http://www.cadre-vegetal.org

Carpediem
Invité n'ayant pas de compte PHPfrance

18 nov. 2013, 01:17

Bonsoir,

Oui en effet, cela n'affiche que l'erreur que le script a rencontré en premier et non pas la totalité de ceux ci. Je me penche sur le problème demain :)

Merci !

Cordialement

Morgane

Carpediem
Invité n'ayant pas de compte PHPfrance

30 nov. 2013, 16:33

Bonjour à tous,

Je n'ai pas eu le temps de modifier la gestion de mes erreurs. Je m'y mettrais dans quelques temps. Je n'ai pas eu le temps nécessaire pour pouvoir le fignoler. Vous pouvez le visiter à cette adresse http://www.prestathair.fr/ . Merci à ceux qui m'ont aidé. Aucune modification du code n'a était fait depuis mon post précédent sur le formulaire de rendez-vous et son traitement.

Ccordialement

Morgane

Mammouth du PHP | 2278 Messages

30 nov. 2013, 17:49

Joli site.
Gagnerait à:
ouvrir l'agenda non pas dans un nouvel onglet mais dans une div cachée qui se montre en cliquant (pas dur en javascript) et peut être pareil pour le nuancier
Le top du top serait d'enregistrer les RV dans une base de données (facile) qui génèrerait l'agenda automatiquement (un peu plus sportif)
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Carpediem
Invité n'ayant pas de compte PHPfrance

01 déc. 2013, 12:16

Bonjour,

Je suis archi nul en js. J'ai acheté un bouquin pour apprendre mais j'ai encore beaucoup de travail pour bien comprendre le css et le php donc je ne souhaite pas me lancer dans un nouveau langage pour le moment. Je prends note de tes remarques afin d'améliorer le site lorsque ma petite affaire aura commencer. Pour ce qui concerne les rendez vous, j'ai délibérément fait de cette façon car je ne peux laisser les gens prendre rendez directement sur le site alors que j'ai peut être eu un appel pour un rdv au même moment donc je préfère stocker la demande dans la bdd puis les appeler ou envoyer un email pour leur confirmer et ensuite je l'ajoute manuellement via google agenda mais il est vrai que j'ai pensé à cette solution au début mais j'y ai trouvé plus d'inconvénient que d'avantages.

Cordialement

Morgane

Mammouth du PHP | 2278 Messages

01 déc. 2013, 13:38

A propos de la gestion des erreurs, je viens de tester avec un email mal construit, et j'ai été renvoyé à la page d'accueil.
Il serait bien que j'aie été renvoyé au formulaire de prise de rv AVEC les valeurs déjà saisies, sinon c'est inutilisable, comme de nombreux formulaires où il faut toout resaisir en cas d'erreur.
C'dest possible en php et je sais faire...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Carpediem
Invité n'ayant pas de compte PHPfrance

07 déc. 2013, 20:18

Bonsoir,

Je n'avais pas vu ton message du 1er décembre. Je prends note, comment fait tu ? Par des cookies ? . Sinon histoire de donner quelques nouvelles, Je mets en forme sous peu la gallerie photo, je suis actuellement sur le panneau d'administration genre Cpanel pour faciliter la modification des pages, gérer les stats du site, gérer ma petite entreprise, supprimer les messages reçu sans passer par php my admin et également ajouter dans une table mailing tous les mails de contact via bouton ajouter afin de faire plus tard quelques emails pour les fêtes par exemple ou autres. Je n'ai pas trouvé de tuto sur les panneau d'admin. Je posterais le miens si il est pas trop dégueu pour ceux qui ne savent pas par ou commencer. On en ai pas encore la....Beaucoup de travail avant =). Merci beaucoup, a plus tard

Morgane

Carpediem
Invité n'ayant pas de compte PHPfrance

07 déc. 2013, 20:24

Re bonsoir,

Qu'entends tu par mal construit ? A quel endroit en particulier ?

Merci =)

Carpediem
Invité n'ayant pas de compte PHPfrance

12 janv. 2014, 11:03

Bonjour,

Je vais bientôt déployer la nouvelle version du site internet.

J'ai réussi à intégrer les cookies sur tous mes formulaires pour les champs les plus importants et les plus récurrents entre les divers formulaire.

Voici la création des cookies à la réception d'un formulaire :
<?php

if (isset($_POST["envoyer"])) { 

if ((isset($_POST["objet"]))
AND (isset($_POST["nom"]))
AND (isset($_POST["prenom"]))
AND (isset($_POST["email"]))
AND (isset($_POST["message"]))); 

{
    setcookie('objet', $_POST["objet"], time() + 600, null, null, false, true);
    setcookie('nom', $_POST["nom"], time() + 365*24*3600, null, null, false, true);
    setcookie('prenom', $_POST["prenom"], time() + 365*24*3600, null, null, false, true);
    setcookie('email', $_POST["email"], time() + 365*24*3600, null, null, false, true);
    setcookie('message', $_POST["message"], time() + 600, null, null, false, true);
}

}

?>
et l'utilisation de ceux-ci dans le formulaire correspondant :
<?php include ("header.php"); ?>

<?php
$jour = date('d');
$mois = date('m');
$annee = date('Y');
?>

<div id="signalement">
<h1>Pour signaler un problème sur le site, c'est par ici !</h1>
<form action="validation-erreur-signalement.php" method="post" enctype="multipart/form-data">
<p><i>Les champs marqué par </i><em>*</em> sont <em>obligatoires</em></p>
<input type="hidden" name="jour" value="<?php echo $jour;?>">
<input type="hidden" name="mois" value="<?php echo $mois;?>">
<input type="hidden" name="annee" value="<?php echo $annee;?>">

<p>
<fieldset>
    <legend>Vos coordonnées</legend>
    
    <label for="objet">Objet :<em>*</em></label> <input type="text" name="objet" id="objet" maxlenght="75" required="required"/><br/>
    
     <label for="civilite">Civilité :<em>*</em></label> 
     <select name="civilite" id="civilite" required="required">
        <option value="Madame">Madame</option>
        <option value="Mademoiselle">Mademoiselle</option>
        <option value="Monsieur">Monsieur</option>
     </select><br/>
     
     <input type="hidden" name="legende100" id="legende100">
     
     <label for="nom">Nom :<em>*</em></label> <input type="text" maxlenght="40" name="nom" id="nom" value="<?php if(isset($_COOKIE['nom'])){ echo $_COOKIE['nom'];  } else{}?>" required="required"/><br/>
     <label for="prenom">Prénom :<em>*</em></label> <input type="text" maxlenght="40" name="prenom" id="prenom" value="<?php if(isset($_COOKIE['prenom'])){ echo $_COOKIE['prenom'];  } else{}?>" required="required"/><br/>
     <input type="hidden" name="legende2" value="qk4e5fg6t9yu1" id="legende2">
     <label for="email">E-mail :<em>*</em></label> <input type="email" maxlenght="50" name="email" id="email" value="<?php if(isset($_COOKIE['email'])){ echo $_COOKIE['email'];  } else{}?>" required="required"/><br/>
     
</fieldset>
<fieldset>
    <legend>Votre message</legend>
        
     <label for="message">Votre message :<em>*</em></label><br/>
     <textarea name="message" maxlenght="255" value="<?php if(isset($_COOKIE['message'])){ echo $_COOKIE['message'];  } else{}?>" id="message" dir="ltr" lang="fr" ROWS="5" cols="38" required="required"></textarea>
     <p><input type="submit" value="Envoyer le message" name="envoyer"></p>
</fieldset>
</p>
</form>
</div>
J’espère que cela pourra aider quelques personnes.

A bientôt