Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour,
Dans un systeme de reservation de vehicules je voudrais eviter de permettre les doubles reservation.
Mais le code ci-dessous ne fonctionne pas et je ne sais plus quoi faire...
Quoi qu'il arrive la reservation est validee
$individu=$_POST["nom"]; $vehicule=$_POST["matricule"]; $objectif=$_POST["objectif"]; $datedepart=$_POST["datede"];
$h=$_POST["HeureDepart"]; $HeureDepart=$h.':00:00'; if ($h==o) $HeureDepart =NULL; $h=$_POST["HeureArrivee"]; $HeureArrivee=$h.':00:00'; if ($h==o) $HeureArrivee =NULL;
$req = 'SELECT COUNT(*) FROM mission WHERE datereservation = ' . $datedepart . ' AND datefinreservation = ' . $datefin. ' AND heuredepart = ' . $heureDepart. ' AND heurearrivee = ' . $heureArrivee. '';
$resultat = mysql_query($req)or die(mysql_error());
//Test qui permet de savoir combien de résultats à trouvé la requête
if(mysql_num_rows($resultat) == 0) { /* Les dates de réservations ainsi que l'heure sont disponible. donc, tu peux faire le script de réservation */
//formate la date yyyy-mm-dd vers jj/mm/aaa
$datedepart = explode('/', $datedepart); $datedepart = array_reverse($datedepart); $datedepart = implode('-', $datedepart);
$datefin=$_POST["datefi"];
$datefin = explode('/', $datefin); $datefin = array_reverse($datefin); $datefin = implode('-', $datefin);
//requete de mise à jour
$requete="insert into mission (idvehicule, idindividu, objectifmission, datereservation, heuredepart, datefinreservation, heurearrivee) values ('".$vehicule."', '".$individu."', '".$objectif."', '".$datedepart."', '".$HeureDepart."', '".$datefin."', '".$HeureArrivee."')"; $resultat=mysql_query($requete) or die(mysql_error()); if($resultat){ echo("<span class=\"style4\">L'ajout a ete correctement effectue $datedep</span>") ; } else{ echo("<span class=\"style4\">L'ajout a échoue</span>") ;
// bouton de retour
echo "<br><br>"; echo "<form>"; echo "<input type='button' value=\"Retour\" onclick=\"window.location='liste_reservation1.php';\">"; echo "</form>";
}
else
{
/* Sinon, affichage d'une message d'erreur comme quoi, la réservation n'est pas possible car les dates et heures sont déjà prises */
echo("<span class=\"style4\">cette reservation existe</span>") ; }
// bouton de retour
echo "<br><br>"; echo "<form>"; echo "<input type='button' value=\"Retour\" onclick=\"window.location='liste_reservation1.php';\">"; echo "</form>"; } mysql_close();
?>
</body>
Merci de votre aide
Dernière modification par pierre3401 (08-05-2012 20:07:57)
Humble débutant...
Hors ligne
As-tu seulement essayé de récupérer le contenu de $req (avec un echo) pour le soumettre directement à MySQL (via phpMyAdmin, par exemple) ?
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Bonjour,
Quand on pense qu'un simple contrôle d'intégrité en base de données suffirait à remplacer un code aussi long en php qui ne fonctionne pas... mais bon. (Vous pouvez lire ce post si vous êtes interessé)
Quelques recommendations donc:
- Lorsque l'on veut effectuer une mise à jour on ne fait pas d'INSERT mais un UPDATE en base de données, sinon on crée un nouvel enregistrement => Qualité des données + intégrité des données + consistance des données => à la poubelle sans passer par la case départ.
- Évitez une double gestion des dates à la fois avec PHP et MySQL. Pour peu que les deux ne soient pas à la même heure (c'est à la mode chez les hébergeurs en ce moment), je ne vous explique pas l'état de vos données...
- Préférez donc en référentiel Date/Heure celui de votre SGBDR ne serait-ce que pour éviter de perdre des clients inutilement.
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Oui, je recupere bien les donnees.
Je l'ai même verifié dans mon script
C'est pourquoi je suis perdu
Humble débutant...
Hors ligne
- Lorsque l'on veut effectuer une mise à jour on ne fait pas d'INSERT mais un UPDATE en base de données, sinon on crée un nouvel enregistrement => Qualité des données + intégrité des données + consistance des données => à la poubelle sans passer par la case départ.
C'est moi ou quoi ?
Où as-tu vu un INSERT dans son bout de code, je n'y vois qu'un SELECT.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
//requete de mise à jour $requete="insert into mission (idvehicule, idindividu, objectifmission, datereservation, heuredepart, datefinreservation, heurearrivee) values ('".$vehicule."', '".$individu."', '".$objectif."', '".$datedepart."', '".$HeureDepart."', '".$datefin."', '".$HeureArrivee."')"; $resultat=mysql_query($requete) or die(mysql_error()); if($resultat){ echo("<span class=\"style4\">L'ajout a ete correctement effectue $datedep</span>") ; } else{ echo("<span class=\"style4\">L'ajout a échoue</span>") ;
Il l'a désactivé à cause de son problème.
Dernière modification par Jc (08-05-2012 19:09:59)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
C'est normal qu'il y ai un INSERT...Je ne veux pas modier une donnee existante je veux en ajouter.
Humble débutant...
Hors ligne
C'est normal qu'il y ai un INSERT...Je ne veux pas modifier une donnée existante je veux en ajouter.
Alors tout va bien, et vos
je voudrais eviter de permettre les doubles reservation
sont normales.
Si vous confiez à PHP le soin de gérer la qualité et l'intégrité de vos données, je vous souhaite bonne continuation.
Le problème est donc résolu.
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Il l'a désactivé à cause de son problème.
Heu non c'est pas desactivé, c'est la retranscripton du code...ici il interprete les "//"comme commentaires sur plusieurs lignes...
Humble débutant...
Hors ligne
Ou là !
On n'est pas rendu sur cette affaire !
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Par contre j'irai faire un tour sur le post.
Mais vos propos sont un peu obscurs,je ne suis qu'un humble débutant
..
D'ou ce post-ci.
Et j'ai edité mon code...
Dernière modification par pierre3401 (08-05-2012 19:44:32)
Humble débutant...
Hors ligne
Bonsoir,
Désolé mais on n'a rien vu
Ce code témoigne tout de même l'état dans lequel se trouve votre système de réservation. Ex: Impossibilité de réserver deux véhicules différents le même jour à la même heure pour ne citer que celui ci.
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Bonsoir,
Désolé mais on n'a rien vu
Ce code témoigne tout de même l'état dans lequel se trouve votre système de réservation. Ex: Impossibilité de réserver deux véhicules différents le même jour à la même heure pour ne citer que celui ci.
Aucun problèmes de ce point de vue, j'arrive parfaitement à réserver tous les véhicules (12 actuellement) le même jour à la même heure.
Par contre j'arrive aussi à réserver un seul véhicule deux fois le même jour à la même heure et/ ou dans la même plage horaire, c'est là que j'ai un problème, je veux éviter celà et je n'arrive pas à trouver comment faire.
Humble débutant...
Hors ligne
Par contre j'arrive aussi à réserver un seul véhicule deux fois le même jour à la même heure et/ ou dans la même plage horaire, c'est là que j'ai un problème, je veux éviter cela et je n'arrive pas à trouver comment faire.
Ce que cherche à te faire comprendre Jc c'est que cette problématique devrait typiquement relever des contraintes d'intégrité sur la base de données elle-même.
Par exemple avec un déclencheur (trigger) sur la table, de type ON INSERT BEFORE, qui interdirait toute insertion dans la table pour un même véhicule le même jour et pour la même plage horaire.
Il est beaucoup plus cohérent de gérer cela dans le SGBD qu'en dehors.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Je te remercie MK pour ta sollicitude, mais tu prêches un convaincu et c'est justement ce que je reproche au code de notre ami pierre3401 qui est dépourvu d'une telle structure de code au niveau SGBDR, sinon son code PHP serait structuré d'une toute autre manière et aurait un contenu bien différent, serait bien plus concis et stable de surcroit.
Entre nous, je ne suis pas en train de faire un tuto sur du dev en SGBDR épais pour des prunes
En tout cas, c'est une bonne chose de dite, ainsi je n'aurais pas à le dire à notre ami pierre3401.
Je reste néanmoins étonné qu'il arrive à faire ce qu'il dit question reservations, car comme je l'ai déjà dit, son code dit le contraire.
Pour finir et essayer d'apporter une solution à votre problème, sans une vision globale de votre code, la seule chose qui m'est possible de vous dire, est qu'il vous sera nécessaire d'intégrer dans votre vérification de plage horaire le véhicule concerné de façon à l'exclure lorsque cela est nécessaire.
++
Dernière modification par Jc (09-05-2012 09:56:40)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Ok,
J'ai fait un tour sur (Vous pouvez lire ce post si vous êtes interessé) et je vais regarder ça de plus près, mais je pense que ça va me prendre un peu de temps à comprendre
J'ai aussi regardé ceci : Php facile : les déclencheurs
Mais là aussi, il va me faloir du temps...
Ce que j'ai compris de ceci, c'est que je peut créer un déclencheur dans la base et avant que la commande INSERT ne s'exécute afin de vérifier que je n'ai pas deux fois le même enregistrement.
Encore faut-il savoir comment faire, je sais que le début de ma commande devrat-être:
"mysql> CREATE TRIGGER ???BEFORE INSERT ON mission"
Mais je ne sais pas quoi mettre à la place des "???" ni quoi mettre ensuite
Enfin, question: comment la réonse se traduit-elle dans ma page php ?
Humble débutant...
Hors ligne
Bonjour,
Cela fait plaisir (en tout cas en ce qui me concerne) de voir certaines personnes se donner du mal pour comprendre et appliquer les choses que l'on essaye de leur apprendre (Merci également à Ebouilleur )
A la place des ??? vous devez mettre un nom pour votre trigger (celui que vous souhaitez) en sachant que vous ne pouvez pas commencer par un chiffre, et que vous ne pouvez utiliser que les caractères a-zA-Z0-9 et _ . N'oubliez pas ensuite le "FOR EACH ROW" qui est obligatoire en MySQL pour un trigger.
Je profite de l'occasion pour faire une piqure de rappel sur les limitations de base de l'utilisation des triggers en MySQL
- 1 seul trigger possible par table et par évènement (BEFORE INSERT, AFTER INSERT, BEFORE UPDATE, AFTER UPDATE, BEFORE DELETE, AFTER DELETE)
- 1 seul traitement possible par trigger (avant la version 5.5 qui elle autorise un contexte de conditions multiples).
En d'autres termes
- Avant la 5.5 : BEGIN action 1, action 2, action 3 END
- A partir de la 5.5 : BEGIN IF THEN ELSE END IF; END; Avec execution possible d'une procédure distincte dans chaque partie du IF THEN ELSE.
++
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Pages :: 1