Bonjour,
j'ai u problème sur mes vérification de champ obligatoire, même si je met des valeurs ça me met qu'il sont obligatoire alors que ça devrait insérer les valeurs, j'ai regarder sur plusieurs forum et testé de différente manière mais rien ne marche
que le message champ obligatoire n'apparaise plus si il y a des valeurs dans les inputs
if(isset($_POST['erg']))
{
$date = $_POST['dr'];
$dateEn = $Controleur-> retournerdateEn($date);
if(strlen($date) == 0)
{
$tableau['dr'][] = "
<div class='alert alert-warning'>
<a href='Formulaire_Reserver.php' class=close data-dismiss=alert>×</a>
<p style='text-align: center;'> date obligatoire </p>
</div>";
}
$nbPersonne = $_POST['nbpers'];
if(strlen($nbPersonne) == 0)
{
$tableau['nbpers'][] = "
<div class='alert alert-warning'>
<a href='Formulaire_Reserver.php' class=close data-dismiss=alert>×</a>
<p style='text-align: center;'> nombre de personne obligatoire </p>
</div>";
}
else if(!is_numeric($nbPersonne))
{
$tableau['nbpers'][] = "
<div class='alert alert-warning'>
<a href='Formulaire_Reserver.php' class=close data-dismiss=alert>×</a>
<p style='text-align: center;'> Nb de personne pas au bon format </p>
</div>";
}
$idResto = $_POST['idR'];
if(count($tableau) == 0)
{
$tab = array(
"date_heure_Reservation" => $dateEn,
"nbPersonnes" => $nbPersonne,
"statut" => "En attente",
"idResto" => $idResto,
"idClient" => $_SESSION['idClient']
);
$Controleur-> insertionReservation($tab);
echo "<br />
<div class='alert alert-success'>
<a href='Formulaire_Reserver.php' class=close data-dismiss=alert>×</a>
<p style='text-align: center;'> Réservation Éffectué </p>
</div>";
}
if (count($tableau) > 0)
{
foreach ($tableau as $champEnErreur => $erreursDuChamp) {
foreach ($erreursDuChamp as $erreur) {
echo $erreur;
}
}
}
}
que l'insertion se fasse si il y a des valeurs dans les inputs
date obligatoire
nombre de personne obligatoire
;) ça avance... mais ce que je t'avais dit ct de choisir l'un ou l'autre (le form englobant ou les name array ;) ) en fonction de tes besoins...
en faisant les 2 tu récupères un array... donc tes $valeur
sont des array...
enlève les crochets des names de ton formulaire, par ex : name='nbpers[]'
en name='nbpers'
et enfin tu as encore un id à modifier : id='rbt'
en id='submit_".$Reservation['idResto']."'
par exemple...
Bonjour,
Je pense que ton problème viens de strlen. Il faut faire la différence entre vide et rien.
Essaye plutôt avec ceci :
// Si date est vide alors
if(empty($date))
{
$tableau['dr'][] = "
<div class='alert alert-warning'>
<a href='Formulaire_Reserver.php' class='close' data-dismiss='alert'>×</a>
<p style='text-align: center;'> date obligatoire </p>
</div>";
}
Toujour les même messages
if(isset($_POST['erg']))
{
$date = $_POST['dr'];
$dateEn = $Controleur-> retournerdateEn($date);
if(empty($date))
{
$tableau['dr'][] = "
<div class='alert alert-warning'>
<a href='Formulaire_Reserver.php' class=close data-dismiss=alert>×</a>
<p style='text-align: center;'> date obligatoire </p>
</div>";
}
$nbPersonne = $_POST['nbpers'];
if(empty($nbPersonne))
{
$tableau['nbpers'][] = "
<div class='alert alert-warning'>
<a href='Formulaire_Reserver.php' class=close data-dismiss=alert>×</a>
<p style='text-align: center;'> nombre de personne obligatoire </p>
</div>";
}
else if(!is_numeric($nbPersonne))
{
$tableau['nbpers'][] = "
<div class='alert alert-warning'>
<a href='Formulaire_Reserver.php' class=close data-dismiss=alert>×</a>
<p style='text-align: center;'> Nb de personne pas au bon format </p>
</div>";
}
$idResto = $_POST['idR'];
if(count($tableau) == 0)
{
$tab = array(
"date_heure_Reservation" => $dateEn,
"nbPersonnes" => $nbPersonne,
"statut" => "En attente",
"idResto" => $idResto,
"idClient" => $_SESSION['idClient']
);
$Controleur-> insertionReservation($tab);
echo "<br />
<div class='alert alert-success'>
<a href='Formulaire_Reserver.php' class=close data-dismiss=alert>×</a>
<p style='text-align: center;'> Réservation Éffectué </p>
</div>";
}
if (count($tableau) > 0)
{
foreach ($tableau as $champEnErreur => $erreursDuChamp) {
foreach ($erreursDuChamp as $erreur) {
echo $erreur;
}
}
}
}
Que t'affiche un "var_dump($date);" avant le if ?
Pourrais-je avoir le formulaire (ou au moins une partie suivant la taille) ?
var_dum($date);
C:\wamp64\www\Projet_php\Resline_site\Formulaire_Reserver.php:54:string '' (length=0)
formulaire
echo"
<form method=post action='Formulaire_Reserver.php'>
<div class='table-responsive'>
<div class='col-lg-12' >
<table class='table table-bordered table-strip'>
<thead>
<tr class=success>
<th> Nom du restaurant </th>
<th> Nombre de table disponible </th>
<th> Telephone </th>
<th> Heure d'ouverture </th>
<th> Heure de fermeture </th>
<th> Date de la Reservation </th>
<th> Nombre de personne</th>
<th> Réserver </th>
</tr>
</thead>
<tbody>";
foreach ($resultats as $Reservation)
{
echo"<tr style='text-align: center;'>
<td> ".$Reservation['nomResto']." </td>
<td> ".$Reservation['nbTables']." </td>
<td> ".$Reservation['telResto']." </td>
<td> ".$Reservation['heureOuv']." </td>
<td>".$Reservation['heureFer']." </td>
<td><input type=date style='cursor: pointer' onclick='new calendar(this);' id='input1' placeholder='Date de la reservation' name=dr /></td>
<td><input type=text name=nbpers placeholder='Nombre de personne' /></td>
<td><input type=hidden name=idR value=". $Reservation['idResto'] ." /><button type=submit name=erg class='btn btn-success btn-sm btn-blockname' id=rbt><span class='glyphicon glyphicon-calendar'></span> Enregistrer Reservation </button></td>
</tr>";
}
echo"</tbody>
</table>
</div>
</div>
</form>";
Perso, je ne suis pas fan de mettre beaucoup de html dans un echo.
<form method='post' action='Formulaire_Reserver.php'>
<div class='table-responsive'>
<div class='col-lg-12' >
<table class='table table-bordered table-strip'>
<thead>
<tr class=success>
<th> Nom du restaurant </th>
<th> Nombre de table disponible </th>
<th> Telephone </th>
<th> Heure d'ouverture </th>
<th> Heure de fermeture </th>
<th> Date de la Reservation </th>
<th> Nombre de personne</th>
<th> Réserver </th>
</tr>
</thead>
<tbody>
<php foreach ($resultats as $Reservation): ?>
<tr style='text-align: center;'>
<td><?= $Reservation['nomResto']; ?></td>
<td><?= $Reservation['nbTables']; ?></td>
<td><?= $Reservation['telResto']; ?></td>
<td><?= $Reservation['heureOuv']; ?></td>
<td><?= $Reservation['heureFer']; ?></td>
<td><input type='date' style='cursor: pointer' onclick='new calendar(this);' id='input1' placeholder='Date de la reservation' name='dr' /></td>
<td><input type='text' name='nbpers' placeholder='Nombre de personne' /></td>
<td><input type='hidden' name='idR' value="<?= $Reservation['idResto']; ?>" /><button type='submit' name='erg' class='btn btn-success btn-sm btn-blockname' id='rbt'><span class='glyphicon glyphicon-calendar'></span> Enregistrer Reservation </button></td>
</tr>
<php endforeach; ?>
</tbody>
</table>
</div>
</div>
</form>
Par contre tu utlises un foreach pour lister des différents restaurants en revanche, tout tes inputs pour la date porte le même nom quelque soit le restaurant. Donc le $_POST['dr'] récupère la date du dernier input du dernier restaurant.
ok mais enfaite je suis obligé de les mettres en balise php car je les include après sur formulaire_réservation.php
<?php
include("MVC_PHP/Controleur/Controleur_site.php");
$Controleur = new affichageResto("localhost", "restline", "root", "");
$resultats = $Controleur-> affichageReservation();
include("MVC_PHP/Vues/Vues_formulaire_reservation.php");
$tableau = array();
if(isset($_POST['erg']))
{
$date = $_POST['dr'];
$dateEn = $Controleur-> retournerdateEn($date);
var_dumP($date);
if(empty($date))
{
$tableau['dr'][] = "
<div class='alert alert-warning'>
<a href='Formulaire_Reserver.php' class=close data-dismiss=alert>×</a>
<p style='text-align: center;'> date obligatoire </p>
</div>";
}
$nbPersonne = $_POST['nbpers'];
if(empty($nbPersonne))
{
$tableau['nbpers'][] = "
<div class='alert alert-warning'>
<a href='Formulaire_Reserver.php' class=close data-dismiss=alert>×</a>
<p style='text-align: center;'> nombre de personne obligatoire </p>
</div>";
}
else if(!is_numeric($nbPersonne))
{
$tableau['nbpers'][] = "
<div class='alert alert-warning'>
<a href='Formulaire_Reserver.php' class=close data-dismiss=alert>×</a>
<p style='text-align: center;'> Nb de personne pas au bon format </p>
</div>";
}
$idResto = $_POST['idR'];
if(count($tableau) == 0)
{
$tab = array(
"date_heure_Reservation" => $dateEn,
"nbPersonnes" => $nbPersonne,
"statut" => "En attente",
"idResto" => $idResto,
"idClient" => $_SESSION['idClient']
);
$Controleur-> insertionReservation($tab);
echo "<br />
<div class='alert alert-success'>
<a href='Formulaire_Reserver.php' class=close data-dismiss=alert>×</a>
<p style='text-align: center;'> Réservation Éffectué </p>
</div>";
}
if (count($tableau) > 0)
{
foreach ($tableau as $champEnErreur => $erreursDuChamp) {
foreach ($erreursDuChamp as $erreur) {
echo $erreur;
}
}
}
}
?>
il faut pour chaque input un nom différent, tu peux te servir pour cela de l'id du restaurant
si je comprend bine sur mes inputs je met
value=". $Reservation['idResto'] c'est sa?
Bonjour.
En plus de ce qu'a dit Carouge10, si tu ne définis pas la valeur de l'input pour la date, tu te retrouveras toujours avec une valeur vide pour ce champ, tout du moins tant que l'utilisateur ne le redéfinis pas manuellement.
Sans compter que sur ce même input, tu sembles utiliser du javascript dessus, sauf que si tu définis la même valeur pour l'attribut id
à plusieur éléments du DOM, tu vas avoir des problèmes du côté de javascript.
Pour rappel, la valeur d'un attribut id
dans le DOM doit être unique pour le javascript.
ok je voie se que tu veut dire Lartak mais je ne voie toujours pas commement faire enfin je cherche
ce que à proposer juste avant est très bien.
Fais de même pour le js.
Après pour le traitement, il va falloir revoir le déroulement car il faut traiter les champs vide uniquement du restaurant où l'on souhaite réserver.
je pensait plus à faire un truc de ce genre
<td><input type='checkbox' name=rest values=". $Reservation['idResto'] ." /></td>
et
champ vide
if(empty($date) && $_POST['rest'] = "")
if(empty($nbPersonne) && $_POST['rest'] = "")
si aucune erreur et checkbox sélectionné
if(count($tableau) == 0 && isset($_POST['rest']))
mais ça ne marche pas ^^", est ce que c'est la bonne écriture?
Pour comparer, il faut le double =.
De plus ce n'est la bonne méthode pour les tests sur checbox...
La doc
ok j'ai vue ta doc et tant pis je le ferais en js par contre j'ai un autre soucis d'insertion que je n'arrive pas à résoudre dans mon foreach qui est que quand je submit mes champs il n'insere plus dans la base
voici mon code
ma vue
foreach ($resultats as $Reservation)
{
echo"<tr style='text-align: center;'>
<td> ".$Reservation['nomResto']." </td>
<td> ".$Reservation['nbTables']." </td>
<td> ".$Reservation['telResto']." </td>
<td> ".$Reservation['heureOuv']." </td>
<td>".$Reservation['heureFer']." </td>
<td><input type=date style='cursor: pointer' onclick='new calendar(this);' id='input1' placeholder='Date de la reservation' name=dr /></td>
<td><input type=text name=nbpers placeholder='Nombre de personne' /></td>
<td><input type=hidden name=idR value=". $Reservation['idResto'] ." /><button type=submit name=erg class='btn btn-success btn-sm btn-blockname' id=rbt><span class='glyphicon glyphicon-calendar'></span> Enregistrer Reservation </button></td>
</tr>";
}
mon formulaire de reservation
<?php
include("MVC_PHP/Controleur/Controleur_site.php");
$Controleur = new affichageResto("localhost", "restline", "root", "");
$resultats = $Controleur-> affichageReservation();
include("MVC_PHP/Vues/Vues_formulaire_reservation.php");
if(isset($_POST['erg']))
{
$date = $_POST['dr'];
$dateEn = $Controleur-> retournerdateEn($date);
$nbPersonne = $_POST['nbpers'];
$idResto = $_POST['idR'];
$tab = array(
"date_heure_Reservation" => $dateEn,
"nbPersonnes" => $nbPersonne,
"statut" => "En attente",
"idResto" => $idResto,
"idClient" => $_SESSION['idClient']
);
$Controleur-> insertionReservation($tab);
echo "<br />
<div class='alert alert-success'>
<a href='Formulaire_Reserver.php' class=close data-dismiss=alert>×</a>
<p style='text-align: center;'> Réservation Éffectué </p>
</div>";
}
?>
Hello, ça ne peut pas fonctionner, car comme te l'ont dit et redit @Carouge10 et @Lartak si ton $resultats = $Controleur-> affichageReservation();
te renvoie plusieurs résultats tu vas boucler et définir les mêmes id et mêmes name pour tes inputs ; du coup ton fichier de traitement 'Formulaire_Reserver.php' ne récupérera que les dernières infos....
name='dr[]'
et tu fais un ti traitementet surtout, tu rename tes id pour qu'ils soient uniques, ainsi id='input". $Reservation['idResto'] ."'
ok saibe merci il recupere bien les infos ce qui donne :
foreach ($resultats as $Reservation)
{
echo"<form method=post action='Formulaire_Reserver.php'>
<tr style='text-align: center;'>
<td> ".$Reservation['nomResto']." </td>
<td> ".$Reservation['nbTables']." </td>
<td> ".$Reservation['telResto']." </td>
<td> ".$Reservation['heureOuv']." </td>
<td>".$Reservation['heureFer']." </td>
<td><input type=date style='cursor: pointer' onclick='new calendar(this);'placeholder='Date de la reservation' name='dr[]' id='input".$Reservation['idResto']."'/>
</td>
<td><input type=number placeholder='Nombre de personne' name='nbpers[]' id='input1".$Reservation['idResto']."'/></td>
<td><input type='hidden' id='input3".$Reservation['idResto']."' name='idR[]' value='".$Reservation['idResto']."'/><button type=submit name='erg' class='btn btn-success btn-sm btn-blockname' id='rbt' ><span class='glyphicon glyphicon-calendar'></span> Enregistrer Reservation
</button></td>
</tr>
</form>";
}
par contre j'ai une erreur ou il met dit
Notice: Array to string conversion in C:\wamp64\www\Projet_php\Resline_site\MVC_PHP\Modele\Modele_site.php on line 91 donc au niveau de $insert->execute($donnees);
voici ma methode insert
public function insert($tab) //méthode pour inserer dans la base
{
$champs = array();
$donnees = array();
$valeurs = array();
foreach ($tab as $cle => $valeur) {
$champs[] = $cle;
$valeurs[]= ":".$cle; //valeur = apres value
$donnees[":".$cle] = $valeur;
}
$listechamps = implode(",", $champs);
$chaineChamps = implode(",", $valeurs);
$requete = "insert into ".$this->table."(".$listechamps.") values(".$chaineChamps.");";
var_dump($donnees);
$insert = $this->pdo->prepare($requete);
$insert->execute($donnees);
}
il me dit qu'il peut le convertir en string mais il me manque quoi?
ça marche!!!! merçis lartak, Carouge10 et saibe, désolé de vous avoir dérangé, il faut que je fasse des progès pour ça ^^"