PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 08-05-2012 17:05:52

pierre3401
Banni(e)
Lieu : Bruxelles - Belgique
Inscription : 08-05-2012
Messages : 11

verifications de données

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

     
<?php
include('../connect_base.php'); ?>
<html>
<head>
<title>Ajouter reservation</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../lien.css" rel="stylesheet" type="text/css"> </head> <body bgcolor="#fffcd9" marginheight="25" leftmargin="25">
<?php
 //récupération des données à modifier

$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

#2 08-05-2012 17:52:52

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : verifications de données

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

#3 08-05-2012 18:08:54

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : verifications de données

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

#4 08-05-2012 18:25:21

pierre3401
Banni(e)
Lieu : Bruxelles - Belgique
Inscription : 08-05-2012
Messages : 11

Re : verifications de données

Oui, je recupere bien les donnees.
Je l'ai même verifié dans mon script

 echo("<span class=\"style4\">L'ajout a ete correctement effectue $datedep</span>") ;

C'est pourquoi je suis perdu


Humble débutant...

Hors ligne

#5 08-05-2012 18:58:03

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : verifications de données

Jc a écrit :

- 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

#6 08-05-2012 19:08:28

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : verifications de données

pierre3401 a écrit :

//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

#7 08-05-2012 19:23:39

pierre3401
Banni(e)
Lieu : Bruxelles - Belgique
Inscription : 08-05-2012
Messages : 11

Re : verifications de données

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

#8 08-05-2012 19:29:01

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : verifications de données

pierre3401 a écrit :

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

pierre3401 a écrit :

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

#9 08-05-2012 19:34:06

pierre3401
Banni(e)
Lieu : Bruxelles - Belgique
Inscription : 08-05-2012
Messages : 11

Re : verifications de données

Jc a écrit :

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...
neutral


Humble débutant...

Hors ligne

#10 08-05-2012 19:36:19

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : verifications de données

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

#11 08-05-2012 19:37:38

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : verifications de données

smile


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#12 08-05-2012 19:38:56

pierre3401
Banni(e)
Lieu : Bruxelles - Belgique
Inscription : 08-05-2012
Messages : 11

Re : verifications de données

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

#13 08-05-2012 20:44:33

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : verifications de données

Bonsoir,

Désolé mais on n'a rien vu sad

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.

roll


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#14 09-05-2012 06:23:37

pierre3401
Banni(e)
Lieu : Bruxelles - Belgique
Inscription : 08-05-2012
Messages : 11

Re : verifications de données

Jc a écrit :

Bonsoir,

Désolé mais on n'a rien vu sad

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.

roll

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

#15 09-05-2012 07:36:15

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : verifications de données

pierre3401 a écrit :

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

#16 09-05-2012 09:55:05

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : verifications de données

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 wink

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

#17 09-05-2012 13:40:37

pierre3401
Banni(e)
Lieu : Bruxelles - Belgique
Inscription : 08-05-2012
Messages : 11

Re : verifications de données

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 hmm
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 sad
Enfin, question: comment la réonse se traduit-elle dans ma page php ?


Humble débutant...

Hors ligne

#18 09-05-2012 20:56:06

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : verifications de données

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

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

Pied de page des forums