IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

calendrier résa //vérifier entrée ds mysql [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 4
    Par défaut calendrier résa //vérifier entrée ds mysql
    Bonjour,
    je suis en train de créer un calendrier de réservation qui doit vérifier qu'aucun enregistrement n'ait été fait dans mysql à la date et créneau horaire choisi. Dans ce cas, j'utilise un liste menu pour afficher les heures disponibles restantes. Problème est que je n'arrive pas à afficher le créneau dispo lorsque la date n'est pas enregistré dans mysql... Merci bcp pour votre aide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $reponse = mysql_query ("SELECT * FROM calendrier"); // Requête SQL 
    $res = mysql_query("SELECT COUNT(*) FROM calendrier WHERE date_resa = '$aaaa."-".$mm."-".$jj'");
     while ($donnees = mysql_fetch_array($reponse)) { 
    if (($donnees['heure_debut']>10 && $donnees['date_resa']==($aaaa."-".$mm."-".$jj))
     or(10>$donnees['heure_fin'] && $donnees['date_resa']==($aaaa."-".$mm."-".$jj)) 
    or(mysql_result($res)==0)) 
    {?><option value="10">10h00</option><?php break;} 
    else {break;}} 
    ?>
    J'avais bien tester en première idée ceci mais le problème est plus complexe car il est possible de réserver des durée plus de 1, 2 jusqu'à 8h pour un créneau horaire allant de 8h à 18h. J'ai retesté cette idée mais leproblème vient que seule la 1ére entrée de ma bdd est et pas les suivantes, pourtant rien à changer seules les conditions du if. Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     <?php 
    $reponse = mysql_query ("SELECT * FROM calendrier"); // Requête SQL 
    while ($donnees = mysql_fetch_array($reponse)) { 
    if (($donnees['heure_debut']==8 && $donnees['heure de fin']>10 && $donnees['date_resa']==($aaaa."-".$mm."-".$jj))
     or($donnees['heure_debut']==9 && $donnees['heure de fin']>10 && $donnees['date_resa']==($aaaa."-".$mm."-".$jj))
     or($donnees['heure_debut']==10 && $donnees['heure_fin']>10 && $donnees['date_resa']==($aaaa."-".$mm."-".$jj)))
     {break;} 
    else {?><option value="10">10h00</option><?php break;}} 
    ?>
    Je ne comprends pas d'où vient l'erreur. Merci pour votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Par défaut
    Bonjour,

    Ça aurait été super sympa pour nous d'utiliser les balises code ...

    Plusieurs petit truc :
    - Évites de faire des SELECT * tant que tu peux
    - Et les tris php qui peuvent être fait en SQL...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    //Date choisis par le user (convertie au format SQL)
    $date_resa = "2012-09-08";
     
    //Heures choisis par le user
    $heure_deb = "15:17:42";
    $heure_fin = "16:39:10";
     
    //Recherche si un RDV(apellé ici rdv_no) existe avec ces critères
    $reponse = mysql_query ("SELECT rdv_no FROM calendrier
    						WHERE date_resa = ".$date_resa."
    						AND heure_debut > ".$heure_deb."
    						AND heure_fin < ".$heure_fin."
    						GROUP BY rdv_no");
     
    //Si il y a un résultat
    if(mysql_num_rows() > 0){
    	echo 'Créneau pris';
    }else{
    	echo 'Créneau libre';
    }
     
    ?>
    En espérant t'avoir aidé.

  3. #3
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    déjà un petit rappel... il existe un opérateur sympathique qui s'utilise ainsi:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    machin between truc and bidule
    qui teste si machin est entre les bornes truc et bidule incluses (plus simple à écrire et relire que les <=,>=, etc...)

    ensuite, si tu veux savoir si 2 créneaux de valeur (temps ou autre unité) se superpose, c'est un peu plus compliqué que ce qu tu proposes...

    soient [a,b] et [c,d] 2 ensemble de valeurs continus...
    rechercher si il y a une zone commune à ceux ci (intersection non vide de ces ensembles) revient à tester qu'au moins une des 2 bornes du premier est incluse dans le second:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ... where (a between c and d) or (b between c and d)

    dans ton cas, tu as la date de résa voulue mais tu dois aussi tenir compte :
    • de l'heure de début voulu
    • de la durée

    ce qui te permet de tester directement si ton créneau est en conflit...
    2 cas alors:
    • ton créneau passe il suffit de le valider et donc de l'enregistrer...
    • il passe pas tu récupères la liste des créneaux sur la journée par exemple tu les affiches dans un tableau (ou comme que tu veux) et tu remets un formulaire de saisie d'horaire en dessous

  4. #4
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    tu crée une table avec les heures de debut potentielle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    CREATE TABLE IF NOT EXISTS `Calendar_Hours` (
      `id_hour` int(11) NOT NULL AUTO_INCREMENT,
      `Hours` time NOT NULL,
      PRIMARY KEY (`id_hour`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=12 ;
     
    --
    -- Contenu de la table `Calendar_Hours`
    --
     
    INSERT INTO `Calendar_Hours` (`id_hour`, `Hours`) VALUES
    (1, '08:00:00'),
    (2, '09:00:00'),
    (3, '10:00:00'),
    (4, '11:00:00'),
    (5, '12:00:00'),
    (6, '13:00:00'),
    (7, '14:00:00'),
    (8, '15:00:00'),
    (9, '16:00:00'),
    (10, '17:00:00'),
    (11, '18:00:00');

    la requête suivante te donne les heures "libres"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Calendar_Hours.Hours FROM `Calendar_Hours`
    LEFT JOIN
    ( SELECT Hours FROM `Calendar_Hours`, Calendrier WHERE Calendar_Hours.Hours  between heure_debut and heure_fin and
    date_resa = '2012-08-10') AS Hocc
    on 
    Calendar_Hours.Hours = Hocc.Hours
    where
    isnull (Hocc.Hours)
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    date_resa 	heure_debut 	heure_fin
    2012-08-10 	09:00:00 	10:00:00
    2012-08-10 	12:00:00 	14:00:00
    2012-08-10 	15:00:00 	16:00:00
    resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Hours 
    08:00:00 	
    11:00:00 	
    17:00:00 	
    18:00:00
    et si la date n'est pas dans la db il affiche toutes les heures
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Calendar_Hours.Hours FROM `Calendar_Hours`
    LEFT JOIN
    ( SELECT Hours FROM `Calendar_Hours`, Calendrier WHERE Calendar_Hours.Hours  between heure_debut and heure_fin and
    date_resa = '2012-08-13') AS Hocc
    on 
    Calendar_Hours.Hours = Hocc.Hours
    where
    isnull (Hocc.Hours)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Hours
    08:00:00
    09:00:00
    10:00:00
    11:00:00
    12:00:00
    13:00:00
    14:00:00
    15:00:00
    16:00:00
    17:00:00
    18:00:00
    si tu veux inclure les possibilité de prendre un rdv juste après un autre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Calendar_Hours.Hours  FROM `Calendar_Hours`
    LEFT JOIN
    ( SELECT Hours FROM `Calendar_Hours`, Calendrier WHERE Calendar_Hours.Hours  >= heure_debut and  Calendar_Hours.Hours  < heure_fin and
    date_resa = '2012-08-10') AS Hocc
    on 
    Calendar_Hours.Hours = Hocc.Hours
    where
    isnull (Hocc.Hours)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Hours
    08:00:00
    10:00:00
    11:00:00
    14:00:00
    16:00:00
    17:00:00
    18:00:00
    si tu veux gérer des rdv d'une demi-heure minimum dans Calendar_Hours : 8:00:00/8:30:00/9:00:00...
    si tu veux gérer des rdv d'un quart-heure minimum dans Calendar_Hours : 8:00:00/8:15:00/8:30:00/8:45:00/9:00:00...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 4
    Par défaut
    Bonjour,
    D'abord, je tiens à vous remercier pour les posts et le temps passé à me répondre...
    Comme mon username, l'indique je débute dans php donc merci d'avoir de l'indulgence s'il y a des erreurs dans ma codif. Voici ce que j'ai implémenté si j'ai bien compris la chose (très intéressant le between and...). Cela ne fonctionne toujours pas, ce n'est pas faute d'avoir testé. Le if(mysql_num_rows() > 0 ne doit pas être juste mais un while ($donnees = mysql_fetch_array($reponse)) ne fonctionne pas mieux....
    Je vous remercie pour votre aide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    			<?php
    			//Date choisis par le user (convertie au format SQL)
    			$date_res = "$jj-$mm-$aaaa";
     
    			$reponse = mysql_query ("SELECT Calendar_Hours.Hours FROM `Calendar_Hours` LEFT JOIN
    			( SELECT Hours FROM `Calendar_Hours`, calendrier WHERE Calendar_Hours.Hours  between heure_debut and heure_fin and
    			date_resa = '.$date_res.') AS Hocc on Calendar_Hours.Hours = Hocc.Hours where isnull (Hocc.Hours)");
    			if(mysql_num_rows() > 0)
    			{?><option value="10">10h00</option><?php break;} else {break;}
    			 ?>

  6. #6
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    tu a bien créé la table Calendar_Hours !! sinon utiliser cette requête ne donnera rien !
    corrige les ' en '+" dans '.$date_res.' (puisque ta requête sql est entre "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    			<?php
    			//Date choisis par le user (convertie au format SQL)
    			$date_res = "$jj-$mm-$aaaa";
     
    			$reponse = mysql_query ("SELECT Calendar_Hours.Hours FROM `Calendar_Hours` LEFT JOIN
    			( SELECT Hours FROM `Calendar_Hours`, calendrier WHERE Calendar_Hours.Hours  between heure_debut and heure_fin and
    			date_resa = '".$date_res."') AS Hocc on Calendar_Hours.Hours = Hocc.Hours where isnull (Hocc.Hours)");
    			if(mysql_num_rows() > 0)
    			{?><option value="10">10h00</option><?php break;} else {break;}
    			 ?>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Affichage d'un calendrier, faire travailler php ou mysql ?
    Par Neal Morse dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/04/2008, 16h28
  2. Lien entre bdd Mysql et Access ?
    Par gueud dans le forum Access
    Réponses: 1
    Dernier message: 14/03/2008, 16h13
  3. [utf8] probleme de chargement entre bd mysql et mssql
    Par ygrim dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 31/10/2007, 16h26
  4. Réponses: 5
    Dernier message: 07/06/2006, 14h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo