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 :

probleme affichage requete sql dans tableau


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut probleme affichage requete sql dans tableau
    Bonjour à tous,

    j'ai un problème concernant l'affichage de résultats de mes requêtes dans un tableau, je m'explique.

    J'ai 3 tables :

    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
     
    CREATE TABLE jos_etat(
    id_etat INT NOT NULL AUTO_INCREMENT,
    description_etat VARCHAR(40) NOT NULL,
    img varchar(200),
    constraint Pk_jos_etat Primary Key (id_etat))TYPE=InnoDB;
     
    CREATE TABLE jos_horaires( 
    id_horaire INT NOT NULL AUTO_INCREMENT,
    jour VARCHAR(10),
    heure SMALLINT(2),
    id_etat_horaire INT,
    constraint Pk_jos_horaires Primary key (id_horaire),
    constraint Fk_jos_horaires Foreign key (id_etat_horaire) References jos_etat (id_etat))TYPE=InnoDB;
     
    CREATE TABLE jos_evenements( 
    id_evenement INT NOT NULL AUTO_INCREMENT,
    date_evenement DATE NOT NULL,
    heure SMALLINT(2),
    id_etat_evenement INT,
    constraint Pk_jos_evenements Primary key (id_evenement),
    constraint Fk_jos_evenements Foreign key (id_etat_evenement) References jos_etat (id_etat))TYPE=InnoDB;
    La table état correspond à l'état de la piste.
    La table horaires ce sont les horaires d'ouverture de la piste par défaut pour un jour précis dans la semaine.
    La table évènements ce sont les réservations effectués par les clients.

    Je souhaite afficher un tableau qui sera comme ceci avec les différentes réservations par dessus les horaires d'ouverture :


    Pour l'instant tout va bien les horaires s'affiche correctement sauf que ma boucle s'arrêtant à 7 voici ce que sa m'affiche par la suite :


    cela double les résultats c'est normal puisque ma boucle s'arrête à 7.

    voici le 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
    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
    <?php
    include('traitements.php'); //L'instruction de langage include() inclut et exécute le fichier spécifié en argument, en l'occurence ici la page traitements.php
     
    	css(); // Appel de la fonction css
     
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    	//Affichage du jour de la date correspondante
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    	echo "Date du jour : ";
    	$today = date("N");  // date("N") retourne un numéro de 1 à 7 pour Lundi à Dimanche
     
    	switch($today) //Le Switch permet d'avoir une écriture simplifiée, nettement plus lisibile qu'une pile de if then else. 
    	{
    	case 1:
    		echo "Lundi ";
    		break;
    	case 2:
    		echo "Mardi ";
    		break;
    	case 3:
    		echo "Mercredi ";
    		break;
    	case 4:
    		echo "Jeudi ";
    		break;
    	case 5:
    		echo "Vendredi ";
    		break;
    	case 6:
    		echo "Samedi ";
    		break;
    	case 7:
    		echo "Dimanche ";
    		break;
    	}
     
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    	// Affichage de la date
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    	echo $aujourdhui = date("d/m/Y"); // date() est la fonction date qui permet de récupérer la date du jour : d est le numéro du jour dans le mois, m est le numéro du mois dans l'année, et y est l'année.
    	echo "<br>";
    	echo "<br>";
     
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    	// Début 
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    	// $tab1 sera un tableau dont les indices (0 à 23 ici) représenterons l'état.
    	//$tab1 = array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); //Warning: Cannot use a scalar value as an array in C:\wamp\www\Calendrier\calendrieroriginal.php  on line 67
    	//La fonction array() permet de créer des tableaux dynamiques qui seront exploités par les scripts PHP à la différence d'une table mySQL, l'array est temporaire et ne reste généré que le temps du déroulement du script.
    	$tab1 = array();
     
    	// Lecture première requête et mise à jour ...
    	$sql= "SELECT jos_etat.img, jos_horaires.heure, jos_horaires.id_etat_horaire, jos_horaires.jour 
    	FROM jos_horaires LEFT JOIN jos_etat 
    	ON jos_horaires.id_etat_horaire=jos_etat.id_etat 
    	ORDER BY jos_horaires.heure ASC";
     
    	$req = mysql_query($sql) or die(mysql_error());
     
    	while ($val = mysql_fetch_assoc($req)) //mysql_fetch_assoc — Lit une ligne de résultat MySQL dans un tableau associatif
    	{
    		$tab1[$val['jour']][$val['heure']] = $val['img'];
    	}
    	// En sortie de cette requête nous avons la mise à jour des états pour chaque indice de 0 à 23
     
    	//il faut récupérer le numéro du jour, heure et etat.img pour tous les évènements dont la date est comprise entre le moment présent et le moment présent + 6 jours.
    	//il faut donc d'abord récupérer la date présente et la date finale.
    	$j=6;
    	$today=date('Y-m-d');
    	$lastday=date(strtotime('+' . $j . ' day')); //strtotime — Transforme un texte anglais en timestamp
    	//strtotime() essaye de lire une date au format anglais US dans la chaîne time , et de la transformer en timestamp Unix (le nombre de secondes depuis le 1er Janvier 1970 à 00:00:00 UTC),
    	//relativement au timestamp now , ou à la date courante si ce dernier est omis. 
     
    	// Lecture deuxième requête et mise à jour si il y a des valeurs différentes
    	$sql="SELECT jos_evenements.heure, jos_evenements.date_evenement, jos_etat.img
    	FROM jos_evenements LEFT JOIN jos_etat
    	ON jos_evenements.id_etat_evenement=jos_etat.id_etat
    	WHERE (jos_evenements.date_evenement BETWEEN $today AND $lastday );";
     
    	$req = mysql_query($sql) or die(mysql_error());
     
    	while ($val = mysql_fetch_assoc($req)) 
    	{
    		$jour=date('N', strtotime($val['date_evenement'])); 
    		$tab1[$jour][$val['heure']] = $val['img'];
    	}
     
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    	// Affichage du tableau final
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    	echo '<table border="1" cellspacing="0">';
    	echo '<tr>';
    	echo '<td><b>Date/Heure</b></td>';
     
    	for ($i = 0; $i <= 23; $i++)
    	{
    		echo '<td><b>'.$i.'H</b></td>';
    	}
     
    	echo '</tr>';
     
    		// fonction qui retourne 7 dates après celle d'aujourd'hui
    	    for ($j = 0; $j < 7; $j++) 
    		{
    			$jsemaine = date('d/m/Y', strtotime('+' . $j . ' day'));
    			$jsemaine_chiffre = date('N', strtotime('+' . $j . ' day'));
     
    		echo '<tr>';
     
    			echo '<td><b>'.$jsemaine.'</b></td>';
     
    			for ($i = 0; $i <= 23; $i++)
    			{
    				echo '<td><center><img src='.'IMG/'.$tab1[$jsemaine_chiffre][$i].'></center></td>';
    			}
    		}
     
    		echo '</tr>';
    	echo '</table>';
     
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    	//affichage légende
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    	echo '<br>';
    	echo '<table border="1" cellspacing="0"><tr>'; //début tableau
    	echo '<td><center><img src="IMG/rouge.png"></center></td><td>Fermée</td>';
    	echo '<td><center><img src="IMG/vert.png"></center></td><td>Libre</td>';
    	echo '<td><center><img src="IMG/jaune.png"></center></td><td>Sur réservation</td>';
    	echo '<td><center><img src="IMG/bleu.png"></center></td><td>Réservée</td>';
    	echo '</table>'; //fin tableau
     
    ?>
    je me base par rapport au numéro du jour de la semaine et pas la date.
    Ce numéro va de 1 à 7... et quand on retournes à lundi, et bien lui retourne à 1...
    Donc si je veux afficher sur plus d'une semaine, je suis obligé de modifier mon script de façon à modifier mes indices. (me baser sur le numéro du jour dans le mois par exemple, si mon affichage ne dépasse pas un mois)

    quelqu'un sait-il comment faire car gérer les dates n'est pas facile...
    si quelqu'un peut m'aider ??? merci
    Images attachées Images attachées   

  2. #2
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 271
    Points : 79
    Points
    79
    Par défaut
    voici ou j'en suis, j'ai essayé de modifier le code pour pas que sa se répète, cela fonctionne mais je pense que sa ne marchera pas pour le mois de février a cause de cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql="SELECT jos_evenements.heure, jos_evenements.date_evenement, jos_etat.img
    	FROM jos_evenements LEFT JOIN jos_etat
    	ON jos_evenements.id_etat_evenement=jos_etat.id_etat
    	WHERE jos_evenements.date_evenement >= Now()
    	and TO_DAYS(jos_evenements.date_evenement) <= TO_DAYS(Now())+29;";
    voici le code en entier :

    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
    <?php
    include('traitements.php'); //L'instruction de langage include() inclut et exécute le fichier spécifié en argument, en l'occurence ici la page traitements.php
     
    	css(); // Appel de la fonction css
     
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    	//Affichage du jour de la date correspondante
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    	echo "Date du jour : ";
    	$today = date("N");  // date("N") retourne un numéro de 1 à 7 pour Lundi à Dimanche
     
    	switch($today) //Le Switch permet d'avoir une écriture simplifiée, nettement plus lisibile qu'une pile de if then else. 
    	{
    	case 1:
    		echo "Lundi ";
    		break;
    	case 2:
    		echo "Mardi ";
    		break;
    	case 3:
    		echo "Mercredi ";
    		break;
    	case 4:
    		echo "Jeudi ";
    		break;
    	case 5:
    		echo "Vendredi ";
    		break;
    	case 6:
    		echo "Samedi ";
    		break;
    	case 7:
    		echo "Dimanche ";
    		break;
    	}
     
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    	// Affichage de la date
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    	echo $aujourdhui = date("d/m/Y"); // date() est la fonction date qui permet de récupérer la date du jour : d est le numéro du jour dans le mois, m est le numéro du mois dans l'année, et y est l'année.
    	echo "<br>";
    	echo "<br>";
     
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    	// Début 
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    	// $tab1 sera un tableau dont les indices (0 à 23 ici) représenterons l'état.
    	//$tab1 = array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); //Warning: Cannot use a scalar value as an array in C:\wamp\www\Calendrier\calendrieroriginal.php  on line 67
    	//La fonction array() permet de créer des tableaux dynamiques qui seront exploités par les scripts PHP à la différence d'une table mySQL, l'array est temporaire et ne reste généré que le temps du déroulement du script.
    	$tab1 = array();
     
    	// Lecture première requête et mise à jour ...
    	$sql= "SELECT jos_etat.img, jos_horaires.heure, jos_horaires.id_etat_horaire, jos_horaires.jour 
    	FROM jos_horaires LEFT JOIN jos_etat 
    	ON jos_horaires.id_etat_horaire=jos_etat.id_etat 
    	ORDER BY jos_horaires.heure ASC";
     
    	$req = mysql_query($sql) or die(mysql_error());
     
    	while ($val = mysql_fetch_assoc($req)) //mysql_fetch_assoc — Lit une ligne de résultat MySQL dans un tableau associatif
    	{
    		$tab1[$val['jour']][$val['heure']] = $val['img'];
    	}
    	// En sortie de cette requête nous avons la mise à jour des états pour chaque indice de 0 à 23
     
    	//il faut récupérer le numéro du jour, heure et etat.img pour tous les évènements dont la date est comprise entre le moment présent et le moment présent + 6 jours.
    	//il faut donc d'abord récupérer la date présente et la date finale.
    	$j=30;
    	$today=date('Y-m-d');
    	$lastday=date(strtotime('+' . $j . ' day')); //strtotime — Transforme un texte anglais en timestamp
    	//strtotime() essaye de lire une date au format anglais US dans la chaîne time , et de la transformer en timestamp Unix (le nombre de secondes depuis le 1er Janvier 1970 à 00:00:00 UTC),
    	//relativement au timestamp now , ou à la date courante si ce dernier est omis. 
     
    	// Lecture deuxième requête et mise à jour si il y a des valeurs différentes
    	$sql="SELECT jos_evenements.heure, jos_evenements.date_evenement, jos_etat.img
    	FROM jos_evenements LEFT JOIN jos_etat
    	ON jos_evenements.id_etat_evenement=jos_etat.id_etat
    	WHERE jos_evenements.date_evenement >= Now()
    	and TO_DAYS(jos_evenements.date_evenement) <= TO_DAYS(Now())+29;";
     
    	$req = mysql_query($sql) or die(mysql_error());
     
    	while ($val = mysql_fetch_assoc($req)) 
    	{
    	 // A remplacer par j
    		$jour=date('j', strtotime($val['date_evenement'])); 
    		$tab2[$jour][$val['heure']] = $val['img'];
    	}
     
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    	// Affichage du tableau final
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    	echo '<table border="1" cellspacing="0">';
    	echo '<tr>';
    	echo '<td><b>Date/Heure</b></td>';
     
    	for ($i = 0; $i <= 23; $i++)
    	{
    		echo '<td><b>'.$i.'H</b></td>';
    	}
     
    	echo '</tr>';
     
    		// fonction qui retourne 7 dates après celle d'aujourd'hui
    	    for ($j = 0; $j < 30; $j++) 
    		{
    			$jsemaine = date('d/m/Y', strtotime('+' . $j . ' day'));
    			$jsemaine_chiffre = date('N', strtotime('+' . $j . ' day'));
    			$jjour_chiffre = date('j', strtotime('+' . $j . ' day'));
     
    		echo '<tr>';
     
    			echo '<td><b>'.$jsemaine.'</b></td>';
     
    			for ($i = 0; $i <= 23; $i++)
    			{
    				if ($tab2[$jjour_chiffre][$i]==null)
    				echo '<td><center><img src='.'IMG/'.$tab1[$jsemaine_chiffre][$i].'></center></td>';
    				else
    				echo '<td><center><img src='.'IMG/'.$tab2[$jjour_chiffre][$i].'></center></td>';
    			}
    		}
     
    		echo '</tr>';
    	echo '</table>';
     
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    	//affichage légende
    	//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    	echo '<br>';
    	echo '<table border="1" cellspacing="0"><tr>'; //début tableau
    	echo '<td><center><img src="IMG/rouge.png"></center></td><td>Fermée</td>';
    	echo '<td><center><img src="IMG/vert.png"></center></td><td>Libre</td>';
    	echo '<td><center><img src="IMG/jaune.png"></center></td><td>Sur réservation</td>';
    	echo '<td><center><img src="IMG/bleu.png"></center></td><td>Réservée</td>';
    	echo '</table>'; //fin tableau
     
    ?>
    si quelqu'un passe par ici je voudrais savoir comment mieux l'optimiser ?? merci

Discussions similaires

  1. [SQL-Server] Pb affichage requete sql dans tableau manque 1 ligne
    Par danny3107 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/12/2009, 15h58
  2. [MySQL] affichage resultat requete sql dans tableau
    Par fasyr dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/04/2009, 11h18
  3. jsp affichage requete sql dans un tableau
    Par bic66 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 26/03/2009, 17h27
  4. probleme avec requete SQL dans code VB6
    Par captainamerica75 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 30/05/2007, 21h36
  5. [MySQL] probleme de requete sql dans mon php
    Par carmen256 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 14/04/2006, 00h30

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