Carouge10,
il y a 9 ans
il faut pour chaque input un nom différent, tu peux te servir pour cela de l'id du restaurant
regisDevweb,
il y a 9 ans
si je comprend bine sur mes inputs je met
value=". $Reservation['idResto'] c'est sa?
regisDevweb,
il y a 9 ans
euh name"nbpers. $Reservation['idResto']." plutot non?
Carouge10,
il y a 9 ans
d'accord, cela ne résoud pas le problème que je t'ai dis en fin de mon précédent post
regisDevweb,
il y a 9 ans
c'était juste pour te montrer ou était l'include mais je cherche une solution
Carouge10,
il y a 9 ans
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>";
}
regisDevweb,
il y a 9 ans
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;
}
}
}
}
Carouge10,
il y a 9 ans
Que t'affiche un "var_dump($date);" avant le if ?
Pourrais-je avoir le formulaire (ou au moins une partie suivant la taille) ?
regisDevweb,
il y a 9 ans
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>";
Carouge10,
il y a 9 ans
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.
regisDevweb,
il y a 9 ans
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;
}
}
}
}
?>
Lartak,
il y a 9 ans
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.
regisDevweb,
il y a 9 ans
ok je voie se que tu veut dire Lartak mais je ne voie toujours pas commement faire enfin je cherche
Carouge10,
il y a 9 ans
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.
regisDevweb,
il y a 9 ans
avec des chekbox est ce que sa serais mieux?
Carouge10,
il y a 9 ans
oui pourquoi pas et ensuite dans le traitement, tu test si c'est coché.
regisDevweb,
il y a 9 ans
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?
Carouge10,
il y a 9 ans
Pour comparer, il faut le double =.
De plus ce n'est la bonne méthode pour les tests sur checbox...
La doc
regisDevweb,
il y a 9 ans
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>";
}
?>
saibe,
il y a 9 ans
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....
- si tu ne veux réserver que pour un seul resto, tu peux englober chaque tr avec ton form
- ou si tu veux faire plusieurs réservations tu name tes inputs en array, comme ça
name='dr[]'et tu fais un ti traitement
et surtout, tu rename tes id pour qu'ils soient uniques, ainsi id='input". $Reservation['idResto'] ."'
regisDevweb,
il y a 9 ans
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?
saibe,
il y a 9 ans
;) ç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...
regisDevweb,
il y a 9 ans
ç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 ^^"