Aller au contenu

Sujets conseillés

Posté (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

<?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)

Modifié par Dan
Posté

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 :P

Posté

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... :P

Posté

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

Posté (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é par Technogreg
Posté

Je viens de trouver la solution, il fallais que je mette des parenthèses à chacune des conditions.

Merci quand même :P

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...