Technogreg Posté 25 Avril 2007 Posté 25 Avril 2007 (modifié) Bonjour, j'ai un formulaire avec plusieurs champs me renvoyant plusieurs variables en POST. Mon script de vérification en PHP m'a l'air correct mais il ne fonctionne pas, j'ai deux bogues : - Si je laisse la valeur 0 dans les deux champs "adultes" et "enfants" j'ai droit à une page blanche lors de l'appui sur "Envoyer". - Et il faut obligatoirement que j'ai un valeur différente de 0 pour chacun des champs de "Nombres de chambres" pour pouvoir envoyer. Hors le fonctionnement que je souhaite est totalement différent, il faudrais que je puisse envoyer le formulaire avec seulement un des champs de "Nombre de chambres" différent de 0 et un seul champ de "Nombre de personnes" différent de 0. Voici le code de ma page HTML et de mon script (si au passage vous avez des suggestions d'optimisation je suis preneur) : HTML <table align="center"> <tr> <td> Nom * : </td> <td><form action="verif.php" method="post"> <input type="text" name="nom" value= "<?php if(isset($_SESSION['nom'])){echo $_SESSION['nom'];}?>" /> </td> <td> Prénom * : </td> <td> <input type="text" name="prenom" value= "<?php if(isset($_SESSION['prenom'])){echo $_SESSION['prenom'];}?>" /> </td> </tr> <tr> <td> Mail * : </td> <td> <input type="text" name="mail" value= "<?php if(isset($_SESSION['mail'])){echo $_SESSION['mail'];}?>" /> </td> <td> Téléphone * :<br /> </td> <td> <input type="text" name="tel" value= "<?php if(isset($_SESSION['tel'])){echo $_SESSION['tel'];}?>" /> </td> </tr> <tr> <td> Date d'arrivée * : </td> <td colspan="3"> <select name="arrivee_j"> <option selected="selected"><?php if(isset($_SESSION['arrivee_j'])){echo $_SESSION['arrivee_j'];}else{echo ("--");}?></option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> <option>7</option> <option>8</option> <option>9</option> <option>10</option> <option>11</option> <option>12</option> <option>13</option> <option>14</option> <option>15</option> <option>16</option> <option>17</option> <option>18</option> <option>19</option> <option>20</option> <option>21</option> <option>22</option> <option>23</option> <option>24</option> <option>25</option> <option>26</option> <option>27</option> <option>28</option> <option>29</option> <option>30</option> <option>31</option> </select> <select name="arrivee_m"> <option selected="selected"><?php if(isset($_SESSION['arrivee_m'])){echo $_SESSION['arrivee_m'];}else{echo ("--");}?></option> <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> <select name="arrivee_a"> <option selected="selected"><?php if(isset($_SESSION['arrivee_a'])){echo $_SESSION['arrivee_a'];}else{echo ("--");}?></option> <?php $annee=date("Y"); for($i=0; $i<=9; $i++){ echo ("<option>$annee</option>"); $annee++; } ?> </select> </td> </tr> <tr> <td> Date de départ * : </td> <td colspan="3"> <select name="depart_j"> <option selected="selected"><?php if(isset($_SESSION['depart_j'])){echo $_SESSION['depart_j'];}else{echo ("--");}?></option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> <option>7</option> <option>8</option> <option>9</option> <option>10</option> <option>11</option> <option>12</option> <option>13</option> <option>14</option> <option>15</option> <option>16</option> <option>17</option> <option>18</option> <option>19</option> <option>20</option> <option>21</option> <option>22</option> <option>23</option> <option>24</option> <option>25</option> <option>26</option> <option>27</option> <option>28</option> <option>29</option> <option>30</option> <option>31</option> </select> <select name="depart_m"> <option selected="selected"><?php if(isset($_SESSION['depart_m'])){echo $_SESSION['depart_m'];}else{echo ("--");}?></option> <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> <select name="depart_a"> <option selected="selected"><?php if(isset($_SESSION['depart_a'])){echo $_SESSION['depart_a'];}else{echo ("--");}?></option> <?php $annee=date("Y"); for($i=0; $i<=9; $i++){ echo ("<option>$annee</option>"); $annee++; } ?> </select> </td> </tr> <tr> <td> Nombre de chambres * : </td> <td colspan="3"> <select name="single"> <option selected="selected"><?php if(isset($_SESSION['single'])){echo $_SESSION['single'];}else{echo ("0");}?></option> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> <option>7</option> <option>8</option> <option>9</option> <option>10</option> </select> Single <select name="twin"> <option selected="selected"><?php if(isset($_SESSION['twin'])){echo $_SESSION['twin'];}else{echo ("0");}?></option> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> <option>7</option> <option>8</option> <option>9</option> <option>10</option> </select> Double <select name="double"> <option selected="selected"><?php if(isset($_SESSION['double'])){echo $_SESSION['double'];}else{echo ("0");}?></option> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> <option>7</option> <option>8</option> <option>9</option> <option>10</option> </select> Twin <select name="superieure"> <option selected="selected"><?php if(isset($_SESSION['superieure'])){echo $_SESSION['superieure'];}else{echo ("0");}?></option> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> <option>7</option> <option>8</option> <option>9</option> <option>10</option> </select> Supérieure </td> </tr> <tr> <td> Nombre de personnes * : </td> <td colspan="3"> <select name="adultes"> <option selected="selected"><?php if(isset($_SESSION['adultes'])){echo $_SESSION['adultes'];}else{echo ("0");}?></option> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> <option>7</option> <option>8</option> <option>9</option> <option>10</option> </select> Adultes <select name="enfants"> <option selected="selected"><?php if(isset($_SESSION['enfants'])){echo $_SESSION['enfants'];}else{echo ("0");}?></option> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> <option>6</option> <option>7</option> <option>8</option> <option>9</option> <option>10</option> </select> Enfants </tr> <tr> <td colspan="2" align="center"> <input type="submit" value="Envoyer"></input> </td> </tr> <tr> <td colspan="2" id="avertissement"> * champs obligatoires </td> </tr> </table> PHP <?phpsession_start();require("config.php");if (isset($_POST['nom']) AND isset($_POST['prenom']) AND isset($_POST['mail']) AND isset($_POST['tel']) AND isset($_POST['arrivee_j']) AND isset($_POST['arrivee_m']) AND isset($_POST['arrivee_a']) AND isset($_POST['depart_j']) AND isset($_POST['depart_m']) AND isset($_POST['depart_a']) AND isset($_POST['single']) AND isset($_POST['twin']) AND isset($_POST['double']) AND isset($_POST['superieure']) AND isset($_POST['adultes']) AND isset($_POST['enfants'])){ if (!empty($_POST['nom']) AND !empty($_POST['prenom']) AND !empty($_POST['mail']) AND !empty($_POST['tel']) AND !empty($_POST['arrivee_j']) AND $_POST['arrivee_j']!="--" AND !empty($_POST['arrivee_m']) AND $_POST['arrivee_m']!="--" AND !empty($_POST['arrivee_a']) AND $_POST['arrivee_a']!="--" AND !empty($_POST['depart_j']) AND $_POST['depart_j']!="--" AND !empty($_POST['depart_m']) AND $_POST['depart_m']!="--" AND !empty($_POST['depart_a']) AND $_POST['depart_a']!="--" AND !empty($_POST['single']) AND !empty($_POST['twin']) AND !empty($_POST['double']) AND !empty($_POST['superieure'])){ if ($_POST['single']!="0" OR $_POST['twin']!="0" OR $_POST['double']!="0" OR $_POST['superieure']!="0"){ if($_POST['adultes']!="0" OR $_POST['enfants']!="0"){ if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail'])){ $mail=str_replace(array("\r", "\n" ), '', $_POST['mail']); $sujet="Réservation via le site internet"; $tel=$_POST['tel']; $message="Mr ou Mme ".$_POST['prenom']." ".$_POST['nom']." (".$tel.") souhaiterais réserver : \n".$_POST['single']." chambre(s) de type Single, \n".$_POST['twin']." chambre(s) de type Twin, \n".$_POST['double']." chambre(s) de type Double, \n".$_POST['superieure']." chambre(s) de type Supérieure \ndu ".$_POST['arrivee_j']."-".$_POST['arrivee_m']."-".$_POST['arrivee_a']." au ".$_POST['depart_j']."-".$_POST['depart_m']."-".$_POST['depart_a']." \npour ".$_POST['adultes']." adultes et ".$_POST['enfants']." enfants"; $headers ="From: ".$mail."\r\n"; mail($mailto, $sujet, $message, $headers); unset($_SESSION['nom']); unset($_SESSION['prenom']); unset($_SESSION['mail']); unset($_SESSION['sujet']); unset($_SESSION['message']); unset($_SESSION['tel']); header('location: Reservations.php?statut=OK' ); exit; } else { $_SESSION['nom']=$_POST['nom']; $_SESSION['nom']=$_POST['prenom']; $_SESSION['mail']=$_POST['mail']; $_SESSION['tel']=$_POST['tel']; $_SESSION['arrivee_j']=$_POST['arrivee_j']; $_SESSION['arrivee_m']=$_POST['arrivee_m']; $_SESSION['arrivee_a']=$_POST['arrivee_a']; $_SESSION['depart_j']=$_POST['depart_j']; $_SESSION['depart_m']=$_POST['depart_m']; $_SESSION['depart_a']=$_POST['depart_a']; $_SESSION['single']=$_POST['single']; $_SESSION['twin']=$_POST['twin']; $_SESSION['double']=$_POST['double']; $_SESSION['superieure']=$_POST['superieure']; $_SESSION['adultes']=$_POST['adultes']; $_SESSION['enfants']=$_POST['enfants']; if ($_POST['tel']!=""){$_SESSION['tel']=$_POST['tel'];} header('location: Reservations.php?statut=mail_failed' ); exit; } } } } else { $_SESSION['nom']=$_POST['nom']; $_SESSION['prenom']=$_POST['prenom']; $_SESSION['mail']=$_POST['mail']; $_SESSION['tel']=$_POST['tel']; $_SESSION['arrivee_j']=$_POST['arrivee_j']; $_SESSION['arrivee_m']=$_POST['arrivee_m']; $_SESSION['arrivee_a']=$_POST['arrivee_a']; $_SESSION['depart_j']=$_POST['depart_j']; $_SESSION['depart_m']=$_POST['depart_m']; $_SESSION['depart_a']=$_POST['depart_a']; $_SESSION['single']=$_POST['single']; $_SESSION['twin']=$_POST['twin']; $_SESSION['double']=$_POST['double']; $_SESSION['superieure']=$_POST['superieure']; $_SESSION['adultes']=$_POST['adultes']; $_SESSION['enfants']=$_POST['enfants']; if ($_POST['tel']!=""){$_SESSION['tel']=$_POST['tel'];} header('location: Reservations.php?statut=empty_form' ); exit; }}?> Edit Modérateur : Merci d'utiliser CODEBOX pour les codes longs (et très longs) Modifié 26 Avril 2007 par Dan
eclectyc Posté 25 Avril 2007 Posté 25 Avril 2007 Jour' ! Heu, juste comme ça, j'espère que c'est pas le vrai code de la page !? Il manque des fermetures de balise, notamment celle du formulaire !? PS : je te conseille de vérifier tes champs avec du javascript... dans un premier temps
eclectyc Posté 25 Avril 2007 Posté 25 Avril 2007 Bon alors.... 1. pour éviter le code rébarbatif avec de trop grandes accolades.... tester tout de suite des variables qui mettent potentiellement fin au script... genre if (testVide) {header(...);exit();} 2. Vérifie bien la fonction header() que personnellement je trouve assez capricieuse... 3. ne pas imbriquer des balises genre <td><form>...</td></form> 4. Attention : Ton option est dupliquée si $single n'est pas définie. <option selected="selected"><?php if(isset($_SESSION['single'])){echo $_SESSION['single'];}else{echo ("0");}?></option><option>0</option> 5. Pour l'instant je vois que ça...
Technogreg Posté 25 Avril 2007 Auteur Posté 25 Avril 2007 Alors d'abord merci de te pencher sur mon problème. 1. Je vais faire attention pour le chevauchement de balise 2. J'ai bien vu que l'option zéro est dupliquée mais avant ton intervention je ne savais pas comment résoudre le problème. Merci 3. Pourrais-tu m'expliquer ce que m'apporte ta proposition de tester d'abord les variables mettant fin au script ? Merci encore
Technogreg Posté 26 Avril 2007 Auteur Posté 26 Avril 2007 (modifié) En fait je suis en train d'épurer un peu mon code, mais j'ai bien cibler ce qui ne marche pas. Ce sont mes conditions à rallonge. Comment puis-je dire le plus simplement possible que je veux que chaque champs ai une valeur et que pour les champs "single","twin","double","superieure" il en faut impérativement au moins un différent de zéro et idem pour "adultes & "enfants"? Modifié 26 Avril 2007 par Technogreg
Technogreg Posté 26 Avril 2007 Auteur Posté 26 Avril 2007 Je viens de trouver la solution, il fallais que je mette des parenthèses à chacune des conditions. Merci quand même
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant