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 :

problème de syntaxe sur la récupération des données [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Par défaut problème de syntaxe sur la récupération des données
    Bonjour à tout le monde,

    Je suis nouveau dans la programmation php, et j'aurais besoin d'aide :

    j'ai créé un calendrier (à la méthode brute de brute, vous le verrez, mais je l'améliorerai plus tard...) où j'affiche les jours de différentes couleurs :

    • blanc : jour hors de mes limites de dates (stockées dans ma base de données)
    • bleu : jour dans les limites de dates


    Jusque là, pas de problème, tout fonctionne (voir image).



    Je veux maintenant ajouter celà :

    • rouge : jour dans mes premières limites de dates, mais entre 2 autres limites (stockées dans ma base de données).

    Je m'explique : c'est en fait un calendrier de disponibilités de location d'un appartement --> blanc : hors saison, bleu : en saison, et libre, rouge : en saison, mais déjà réservé.


    J'ai procédé de la manière suivante :
    • tableau de 7 colonnes (une par jour), 6 lignes.
    • je place le premier jour du mois dans la première ligne, et dans la bonne colonne. Je place des cases grises avant le 1er du mois.
    • j'inscris les autres dates à la suite jusqu'à ce que ma variable colonne dépasse 7 ; dans ce cas, je reviens à la ligne et je réinitialise ma variable colonne == 1.
    • je reproduis celà sur 5 lignes et je termine avec un fond gris pour les cases vides.

    Pour reproduire le schéma sur 5 lignes, j'utilise une boucle "for" (pour faire 5 lignes), dans laquelle j'inclus une boucle "while" (jusqu'à ce que ma colonne 7 soit atteinte).

    Nous arrivons à mon problème : dans cette boucle "while", j'ai un "if/elseif/else".
    • IF : si je suis hors saison --> case blanche (FONCTIONNE) compare la date à afficher avec les dates de la saison.
    • ELSEIF : PROBLEME !!! je dois comparer à chaque tour du "while" si la date que je suis en train d'inscrire est dans une période réservée ou non (périodes stockées dans une base de données). Je crois que je dois utiliser :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      while($reservations = mysql_fetch_array($result))
       { 
                   if (ma date actuelle est dans une période réservée)
                   {
                         je met en rouge
                   } 
       }
      MAIS ALORS COMMENT REDIGER CELA POUR QUE CA FONCTIONNE ???? Le problème n'est pas dans la rédaction de mes conditions, mais dans l'intégration de mon "sql_fetch_array" dans mon "elseif"...
    • ELSE : case bleue --> date libre


    Pouvez-vous m'aider ?

    Merci d'avoir pris le temps de me lire...
    je suis sur ce problème depuis des mois, et je fais du sur place !!!

  2. #2
    Membre émérite
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 910
    Par défaut je vais essayer d'expliquer
    En fait je ne connais pas tes champs. Je pars du principe qu'il existe un champ 'etat'. Il y a trois états possible:
    hors_saison, en_saison_libre, en_saison_pris.

    Voilà la boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while($lign){
        switch($ligne[etat]){
            case: "hors_saison":
                // instruction pour afficher en blanc
                break;
            case: "en_saison_libre":
                // instruction pour afficher en bleu
                break;
            case: "en_saison_pris":
                // instruction pour afficher en rouge
                break;
        }
    }
    Evidemment, je n'ai pas pu tester le code, c'est pour donner une direction autre que celle que tu as peut-être essayée.

  3. #3
    Membre émérite
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 910
    Par défaut une erreur monstrueuse
    Enlève les deux-points ( entre les case et les guillemets ouvrantes (").

    de plus c'est

    et non

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Par défaut
    merci pour la rapidité de la réponse !!!

    le truc c'est que dans ma base de données, j'ai stocké les dates compilées au format YYYYMMDD (aussi bien les dates de ma saison (EDIT : je me plante, les dates de la saion sont dans une autre table), que les dates de mes réservations).

    Je compare donc la date compilée du jour que je suis en train d'afficher avec les dates stockées dans ma base de données, tu vois ce que je veux dire ???

    je pense que ce n'est pas la façon la plus simple, mais je voudrais d'abord terminer par moi même quelque chose qui marche, avant d'essayer de l'améliorer. à ce propos, comment voyais-tu ça, toi ?

    Enorme merci de prendre du temps pour les newbies

  5. #5
    Membre émérite
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 910
    Par défaut si tu as deux tables
    tu recherches dans ta table des réservations si une date est identique (===) à la date du jour. Si c'est le cas, c'est que la date du jour est réservée.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Par défaut mon code
    je zappe la définition de mes variables, et le code pour limiter le nombre de jours des mois...
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    (...)
    $joursdumois (définit le nombre de jours du mois)
    $j1mois = date("w", mktime(0,0,0,$moisaff,1,$anneeaff));
    $num représente le jour à afficher (1 à 31)
    (...)
    	<TR>
    	
    
    /* 1ère ligne de dates */
    	
    	
    	/* si le 1er jour du mois est un dimanche */
    		if ( $j1mois == 0 )
    			{
    				$case = 7;
    				echo "<TD class=\"vide\"></TD>
    
    <TD class=\"vide\"></TD> <TD class=\"vide\"></TD> <TD class=\"vide\"></TD> <TD class=\"vide\"></TD> <TD class=\"vide\"></TD>";
    if ($num < 10) { $num2ch = "0".$num; } else { $num2ch = $num; } $compiljouraff = $anaff4ch.$moisaff2ch.$num2ch; if (($compiljouraff < $compildebsais1) or ($compiljouraff > $compilfinsais2) or ($compiljouraff > $compilfinsais1 and $compiljouraff < $compildebsais2)) { echo "<TD class=\"hors_saison\">".$num."</TD>"; else { echo "<TD class=\"saison_libre\">".$num."</TD>"; } } /* on place des cases vides jusqu'à ce qu'on ait le 1er jour du mois */ else { while ( $case != $j1mois ) { echo "<TD class=\"vide\"></TD>"; $case++; } if ($num < 10) { $num2ch = "0".$num; } else { $num2ch = $num; } $compiljouraff = $anaff4ch.$moisaff2ch.$num2ch; /* on place le 1er du mois */ if (($compiljouraff < $compildebsaison1) or ($compiljouraff > $compilfinsaison2) or ($compiljouraff > $compilfinsaison1 and $compiljouraff < $compildebsaison2)) { echo "<TD class=\"hors_saison\">".$num."</TD>"; } else { echo "<TD class=\"saison_libre\">".$num."</TD>"; } /* on place le reste de la première ligne */ while ( $case < 7 ) { $num++; if ($num < 10) { $num2ch = "0".$num; } else { $num2ch = $num; } $compiljouraff = $anaff4ch.$moisaff2ch.$num2ch; if (($compiljouraff < $compildebsais1) or ($compiljouraff > $compilfinsais2) or ($compiljouraff > $compilfinsais1 and $compiljouraff < $compildebsais2)) { echo "<TD class=\"hors_saison\">".$num."</TD>"; } else { echo "<TD class=\"saison_libre\"> } $case++; } } /* 2ème à 6ème ligne de dates */ for ($i=0; $i<5; $i++) { echo "</TR><TR>"; $case = 1; while ( $case < 8 and $num < $joursdumois) { $num++; if ($num < 10) { $num2ch = "0".$num; } else { $num2ch = $num; } $compiljouraff = $anaff4ch.$moisaff2ch.$num2ch; if (($compiljouraff < $compildebsais1) or ($compiljouraff > $compilfinsais2) or ($compiljouraff > $compilfinsais1 and $compiljouraff < $compildebsais2)) { echo "<TD class=\"hors_saison\">".$num."</TD>"; } else { echo "<TD class=\"saison_libre\">".$num."</TD>"; } $case++; } if ($case != 8) { while ($case < 8) { echo "<TD class=\"vide\"></TD>"; $case++; } } } echo "</TR>"; (EDIT merci Mr N)
    Je me rends bien compte que c'est peu lisible, veuillez m'en excuser...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Par défaut
    Citation Envoyé par zyongh
    En fait je ne connais pas tes champs. Je pars du principe qu'il existe un champ 'etat'. Il y a trois états possible:
    hors_saison, en_saison_libre, en_saison_pris.

    Voilà la boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while($lign){
        switch($ligne[etat]){
            case: "hors_saison":
                // instruction pour afficher en blanc
                break;
            case: "en_saison_libre":
                // instruction pour afficher en bleu
                break;
            case: "en_saison_pris":
                // instruction pour afficher en rouge
                break;
        }
    }
    Evidemment, je n'ai pas pu tester le code, c'est pour donner une direction autre que celle que tu as peut-être essayée.
    comment modifier ton code pour qu'il convienne ?

  8. #8
    Membre émérite
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 910
    Par défaut euh là ...
    Pour savoir comment modifier mon code pour qu'il convienne, il faudrait que je connaisse le tien.

    Si tu ne veux pas le poster sur le forum, envoie moi ton script ainsi que l'architecture de tes tables concernées. Je créerai les tables en local et je testerai ton script et j'en écrirai un en le commentant le plus possible pour que tu comprennes.

    Mon email est zyongh@laposte.net

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Par défaut
    Citation Envoyé par zyongh
    Pour savoir comment modifier mon code pour qu'il convienne, il faudrait que je connaisse le tien.

    Si tu ne veux pas le poster sur le forum, envoie moi ton script ainsi que l'architecture de tes tables concernées. Je créerai les tables en local et je testerai ton script et j'en écrirai un en le commentant le plus possible pour que tu comprennes.

    Mon email est zyongh@laposte.net
    je te fais ça, un super merci !

  10. #10
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Avant d'approfondir ton code, remplace déjà and par && et or par || dans tes comparaisons.

  11. #11
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Citation Envoyé par soshin
    Pouvez-vous m'aider ?
    Est-ce que tu peux mettre ton code parce que là c'est un peu trop abstrait pour moi.

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

Discussions similaires

  1. Réponses: 17
    Dernier message: 03/05/2013, 09h54
  2. Réponses: 4
    Dernier message: 02/03/2010, 16h09
  3. Réponses: 2
    Dernier message: 16/07/2008, 14h21
  4. Réponses: 31
    Dernier message: 27/07/2006, 13h51
  5. Réponses: 22
    Dernier message: 05/07/2006, 15h21

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