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 :

Agenda : MySQL et plages horaires [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de berti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 239
    Par défaut Agenda : MySQL et plages horaires
    rebonjour à tous, je suis en train de créer un agenda en ligne sur des bases trouvées à droite et à gauche. Mon problème est dans un test si un rdv existe déjà sur une plage horaire pour un membre. Mon souci est que le test se fait pour toute la base. Donc je ne peux créer qu'un rendez-vous par heure pour n'importe quel membre.
    - Le membre "A" a créé un rdv le 29/02/2008 de 14h à 17h
    - Le membre "B" veux créer un rdv le 29/02/2008 de 14h à 17h, il ne peut pas.

    je poste un bout du code

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    	function rtrn_month_daynb($dmonth, $dyear) 
        {      
            return date("t",mktime(0,0,0,$dmonth,1,$dyear)); //caractère t =>nombre de jours dans le mois
        }
     
        veriflogin();
     
        if(isset($_POST['valider']))
        {		
    		$debut=mktime($_POST['heure'],$_POST['minute'],0,$_POST['mois'],$_POST['jour'],$_POST['an']);
     
    		if($_POST['choix']=="choix1")
       		  	$fin=mktime($_POST['heure']+$_POST['heure1'],$_POST['minute']+$_POST['minute1'],0,$_POST['mois'],$_POST['jour']+$_POST['jour1'],$_POST['an']);
    		else
    			$fin=mktime($_POST['heure2'],$_POST['minute2'],0,$_POST['mois2'],$_POST['jour2'],$_POST['an2']);
     
            if($debut>$fin)
    			$msg="Les valeurs saisies sont invalides. La date de fin de rendez-vous précéde celle du début.";
    		elseif($debut==$fin)
    			$msg="Veuillez saisir la durée du rendez vous.";
    		else
            {
    // JE M'ARRACHE LES CHEVEUX ICI, JE VOIS PAS L'ERREUR
            	$sql = "SELECT intitule_rdv, UNIX_TIMESTAMP(date_debut) as stamp_deb, UNIX_TIMESTAMP(date_fin) as stamp_fin FROM rdv "
            	."WHERE id_rdv like '".$id."-%' "
            	//ca commence avant et ca fini apres le début
    			."AND ('$debut'<=UNIX_TIMESTAMP(date_debut) AND '$fin'>UNIX_TIMESTAMP(date_debut)) "
    			//ca commence entre les 2
    			."OR ('$debut'>=UNIX_TIMESTAMP(date_debut) AND '$fin'<UNIX_TIMESTAMP(date_fin));";
     
            	$req=mysql_query($sql,$connec) or die("erreur rere-> ".mysql_error());
     
            	//si le rdv empiete sur un autre
        		if (mysql_num_rows($req)!=0)
        		{
        			$rec=mysql_fetch_array($req);
        			$msg="$id - Impossible de créer le rendez-vous : <br>"
        				."le créneau fourni empiète sur celui du rendez-vous ".$rec['intitule_rdv']."<br>"
    					."prévu ".afficheCreneau($rec['stamp_deb'],$rec['stamp_fin']).".";
        		}
        		else
        		{
            		//ajout du rdv
            		$query="select max(id_rdv) as id_rdv from rdv where id_rdv like '".$id."-%';";
            		$exec=mysql_query($query,$connec) or die("erreur -> ".mysql_error());
            		$rec=mysql_fetch_array($exec);
            		$POS= strstr($rec['id_rdv'],"-");
            		$numsuivant=substr($POS,1);
            		$numsuivant=$numsuivant+1;
            		$numsuivant=sprintf("%04d",$numsuivant);
            		$rdvsuivant=$id."-".$numsuivant;
            		$datedeb=date("Y-m-d H:i:s",$debut);
            		$datefin=date("Y-m-d H:i:s",$fin);
            		if ($_POST['titrerdv']=="")
            		{
            			$_POST['titrerdv']="pas de titre";
            		}
            		$query="INSERT INTO `rdv` ( `id_rdv` , `intitule_rdv` , `desc_rdv` , `date_debut` , `date_fin` )	VALUES ('".$rdvsuivant."', '".$_POST['titrerdv']."', '".$_POST['desc']."', '".$datedeb."', '".$datefin."');";
            		$exec=mysql_query($query,$connec) or die("erreur -> ".mysql_error());

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    bonjour

    Histoire d'être sûre : un membre B ne peut pas prendre un rendez-vous sur une plage déjà occupée par un autre rendez-vous. Donc la prise de rendez-vous est impossible si :
    - le nouveau rdz commence après le début et avant la fin d'un autre rendez-vous
    - le nouveau rdz termine après le début et avant la fin d'un autre rendez-vous
    Si c'est bien le cas, je crois que tu fais ta requête à l'envers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = "SELECT intitule_rdv, UNIX_TIMESTAMP(date_debut) as stamp_deb, UNIX_TIMESTAMP(date_fin) as stamp_fin FROM rdv WHERE id_rdv like '".$id."-%' ";
            	//le nouveau commence entre le début et la fin d'un rendez-vous existant
      $sql .= "AND ('$debut'>=UNIX_TIMESTAMP(date_debut) AND '$debut' < UNIX_TIMESTAMP(date_fin)) " ;
    	//ou le nouveau se termine entre le début et la fin d'un rendez-vous existant
      $sql .= "OR ('$fin>=UNIX_TIMESTAMP(date_debut) AND '$fin'<UNIX_TIMESTAMP(date_fin));";
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre éclairé Avatar de berti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    239
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 239
    Par défaut
    J'ai trouvé j'avais un problème de parenthèses. MErci Celira pour tes conseils...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            	$sql = "SELECT intitule_rdv, UNIX_TIMESTAMP(date_debut) as stamp_deb, UNIX_TIMESTAMP(date_fin) as stamp_fin FROM rdv "
    			."WHERE id_rdv like '".$id."-%' "
    			//ca commence avant et ca fini apres le début
    			."AND (('$debut'<=UNIX_TIMESTAMP(date_debut) AND '$fin'>UNIX_TIMESTAMP(date_debut)) "
    			//ca commence entre les 2
    			."OR ('$debut'>=UNIX_TIMESTAMP(date_debut) AND '$debut'<UNIX_TIMESTAMP(date_fin)));";

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 99
    Par défaut
    Salut berti ,

    je suis actuelement plusieur piste pour me décider pour projet perso a la fac, j'avais pensé a un agenda en ligne entre autre mais j'avoue que je suis resté un peu perplexe quand j'ai voulu faire les shema de la base de donnée.

    Cela te dérangerait il de me faire partager la strucutre de ta table ou de m'expliquer comment tu as agencé tout ca?

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

Discussions similaires

  1. Création d'un agenda (plage horaire)
    Par LeSchtroumpf dans le forum Android
    Réponses: 2
    Dernier message: 03/12/2012, 20h01
  2. [MySQL] enregistrer une plage horaire dans base de données mysql
    Par johan0510 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 25/08/2010, 16h18
  3. calcul délais entre deux dates avec plages horaires
    Par leila eco dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 03/01/2007, 16h51
  4. [debutant] intersection de deux plages horaires
    Par absolut75 dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 24/05/2006, 13h03
  5. [SQL2005] plages horaires
    Par The_badger_man dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/05/2006, 12h30

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