Version complète: sur le forum Webmaster Hub : Test de variables
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Technogreg
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
CODE
<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
CODE
<?php
session_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)
eclectyc
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 tongue.gif
eclectyc
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
CODE
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.
CODE
<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... tongue.gif
Technogreg
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
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"?
Technogreg
Je viens de trouver la solution, il fallais que je mette des parenthèses à chacune des conditions.

Merci quand même tongue.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.