Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 09/03/2010, 18h09   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
Par défaut affichage données par rapport à une date

Bonsoir,

j'ai une base de données comportant 3 tables dont voici le code :

Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE TABLE etat(
id_etat INT NOT NULL AUTO_INCREMENT,
description_etat VARCHAR(40) NOT NULL,
constraint Pk_etat PRIMARY KEY (id_etat))TYPE=InnoDB;
 
CREATE TABLE evenements(
id_evenement INT NOT NULL AUTO_INCREMENT,
jour_evenement VARCHAR(2) NOT NULL,
mois_evenement VARCHAR(2) NOT NULL,
annee_evenement VARCHAR(4) NOT NULL,
heure VARCHAR(2),
id_etat INT,
constraint Pk_evenements PRIMARY KEY (id_evenement),
constraint Fk_evenements FOREIGN KEY (id_etat) REFERENCES etat (id_etat))TYPE=InnoDB;
 
CREATE TABLE horaires(
id_horaire INT NOT NULL AUTO_INCREMENT,
jour VARCHAR(10),
heure VARCHAR(2),
id_etat INT,
constraint Pk_horaires PRIMARY KEY (id_horaire),
constraint Fk_horaires FOREIGN KEY (id_etat) REFERENCES etat (id_etat))TYPE=InnoDB;

La table horaires correspond aux heures d'ouverture par défaut.
Je souhaiterais afficher pour la date d'aujourd'hui par exemple, un tableau qui représente l'ensemble des heures avec l'id_état correspondant de la table horaires. Pour cela il me faut savoir le jour correspondant à la date. C'est à dire pour le 09/03/2010 il faut que sa m'affiche "Mardi". Dans la table horaires, les jours correspondent à un numéro, 1=Lundi, 2=Mardi etc...

Aperçu du tableau souhaité :

Pour le "Mardi - 09/03/2010"

10h......11h......12h.......13h.......14h........15h........16h.......17h.......18h
1...........2.........2..........1..........3............0...........0..........3...........1

La ligne en dessous des heures correspondant au id_etat.

Quelqu'un à-t-il déjà réaliser ce type de tableau et pourrait m'aider dans la conception de celui-ci? Merci!

Dernière modification par andry.aime ; 10/03/2010 à 10h06. Motif: Language du CODE
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 20h24   #2
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
toujours pas de réponse... une arraylist est je pense la meilleure solution. quand pensez vous?
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 08h54   #3
Membre Expert
 
Avatar de Fench
 
Inscription : mai 2002
Messages : 1 570
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2002
Messages : 1 570
Points : 1 703
Points : 1 703
Bonjour,

Pour commencer:
Code :
1
2
3
4
5
6
7
8
9
10
 
    // Définition le fuseau horaire par défaut à utiliser.
    date_default_timezone_set('UTC');    // GMT à voir
    $today = date("N");  // Te retourne 1 à 7 pour Lundi à Dimanche
 
    // Requête de ce que tu veux, ici une jointure entre horaires et etat
    ....
 
    // Lecture et affichage de tes résultats
    .... // Regarde le lien sur l'affichage des données à partir d'un Bdd ci dessous
http://j-reaux.developpez.com/tutori...-tableau-html/
__________________
Actuellement AI à l'INRA
fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)
Fench est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 09h14   #4
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
merci fench de ta réponse,
je viens de tester ce que tu m'as dit :
Code :
1
2
date_default_timezone_set('UTC');    // GMT à voir
$today = date("N");  // Te retourne 1 à 7 pour Lundi à Dimanche
cela doit m'afficher quoi au juste?

je viens de tester et cela m'affiche 1 et 3.
3 pour mercredi mais le 1....
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 09h55   #5
Membre Expert
 
Avatar de Fench
 
Inscription : mai 2002
Messages : 1 570
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2002
Messages : 1 570
Points : 1 703
Points : 1 703
Citation:
je viens de tester et cela m'affiche 1 et 3.
3 pour mercredi mais le 1....
Tu as fait quoi pour avoir un affichage de deux valeurs ???
Donnes moi le code de départ stp
__________________
Actuellement AI à l'INRA
fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)
Fench est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 10h05   #6
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
voila mon code pour l'instant :
Code :
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
<?php
include ('traitements.php');
connectDB();
 
	//----------------------------------------------------------------------------------------------------------------------------------------	
	// Définition le fuseau horaire par défaut à utiliser.
	//----------------------------------------------------------------------------------------------------------------------------------------	
    echo date_default_timezone_set('UTC'); // GMT à voir
	echo "<br>";
 
	//----------------------------------------------------------------------------------------------------------------------------------------	
	//Affiche le jour de la date correspondante
	//----------------------------------------------------------------------------------------------------------------------------------------	
 
	echo $today = date("N");  // retourne 1 à 7 pour Lundi à Dimanche
	echo "<br>";
	switch($today)
	{
	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;
	}
 
	//----------------------------------------------------------------------------------------------------------------------------------------	
    // Requête de ce que tu veux, ici une jointure entre horaires et etat
	//----------------------------------------------------------------------------------------------------------------------------------------	
	$sql= "SELECT heure, id_etat FROM horaires, etat WHERE horaires.id_etat=etat.id_etat";
	$req = mysql_query($sql) or die(mysql_error());
 
	//----------------------------------------------------------------------------------------------------------------------------------------	
    // Lecture et affichage de tes résultats
	// Regarde le lien sur l'affichage des données à partir d'un Bdd ci dessous
	//----------------------------------------------------------------------------------------------------------------------------------------	
 
 
 
?>
je procède par étape comme tu me la dit... au niveau de l'affichage je ne vois pas trop comment faire puisque je voudrai un tableau comme ceci :

Aperçu du tableau souhaité :

Pour le "Mardi - 09/03/2010"

10h......11h......12h.......13h.......14h........15h........16h.......17h.......18h
1...........2.........2..........1..........3............0...........0..........3...........1

La ligne en dessous des heures correspondant au id_etat.
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 10h33   #7
Membre Expert
 
Avatar de Fench
 
Inscription : mai 2002
Messages : 1 570
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2002
Messages : 1 570
Points : 1 703
Points : 1 703
Citation:
echo date_default_timezone_set('UTC');
Ca sert à rien de faire le echo, ça te renvoit un booléen sur le set donc ici 1 = true = le set est Ok.

Ensuite tu as bien Mercredi ça c Ok, reste à afficher le reste de la date sur le même style (regardes date() sur google, ou manuel).

Pour la requête, tu fais une jointure avec le WHERE si tu veux, perso je préfére l'utilisation du mot JOIN telle que:
Code :
1
2
3
4
 
$query = "SELECT h.heure, h.id_etat, e.etat  FROM horaires h ".
             "INNER JOIN etat e ".
             "ON h.id_etat = e.id_etat ";
En dernier, regardes le lien, commence à coder et donnes nous le résultat.
__________________
Actuellement AI à l'INRA
fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)
Fench est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 10h33   #8
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
je met mon projet en .rar si tu veux le voir complet.
Fichiers attachés
Type de fichier : rar Calendrier.rar (7,6 Ko, 0 affichages)
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 10h36   #9
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
Ok je te remercie je vais essayer de faire ça!
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 11h12   #10
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
alors voila ou j'en suit :

Code :
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
<?php
include ('traitements.php');
connectDB();
 
	//----------------------------------------------------------------------------------------------------------------------------------------	
	//Affiche le jour de la date correspondante
	//----------------------------------------------------------------------------------------------------------------------------------------	
 
	echo "Nous sommes le : ";
	$today = date("N");  // retourne 1 à 7 pour Lundi à Dimanche
	switch($today)
	{
	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;
	}
 
	echo "<br>";
 
	//----------------------------------------------------------------------------------------------------------------------------------------	
	// Définition le fuseau horaire par défaut à utiliser.
	//----------------------------------------------------------------------------------------------------------------------------------------	
    date_default_timezone_set('UTC'); // GMT à voir
	echo "<br>";
 
	// Affichage de quelque chose comme : Monday 15th of August 2005 03:12:46 PM
	echo $aujourdhui = date("d/m/Y");   
	echo "<br>";
	echo "<br>";
 
	//----------------------------------------------------------------------------------------------------------------------------------------	
    // Requête souhaitée, une jointure entre horaires et etat
	//----------------------------------------------------------------------------------------------------------------------------------------	
	$sql= "SELECT heure, id_etat_horaire FROM horaires, etat WHERE horaires.id_etat_horaire=etat.id_etat AND jour=$today ORDER BY heure*1 ASC";
	//le *1 force la transformation en nombre puisque le champ heure dans la table est en varchar et non en int.
	$req = mysql_query($sql) or die(mysql_error());
 
	//----------------------------------------------------------------------------------------------------------------------------------------	
    // Lecture et affichage des résultats
	//----------------------------------------------------------------------------------------------------------------------------------------
 
	// $NbrCol : le nombre de colonnes
	// $NbrLigne : calcul automatique a la FIN
 
	$NbrCol = 24;
 
	//----------------------------------------------------------------------------------------------------------------------------------------
	// nombre de cellules a remplir
	//----------------------------------------------------------------------------------------------------------------------------------------
 
	$NbreData = mysql_num_rows($req);
 
	//----------------------------------------------------------------------------------------------------------------------------------------
	// affichage
	//----------------------------------------------------------------------------------------------------------------------------------------
 
	$NbrLigne = 0;
 
	if ($NbreData != 0) 
	{
		$j = 1;
		echo '<table border="1" width="400">';
 
		while ($val = mysql_fetch_array($req)) 
		{
				if ($j%$NbrCol == 1) 
				{
				$NbrLigne++;
				echo "<tr>";
				$fintr = 0;
				}
 
			echo '<td>';
 
			//----------------------------------------------------------------------------------------------------------------------------------------
			// DONNEES A AFFICHER dans la cellule
 
			echo $val['heure'];
			echo '<br/>';
			echo $val['id_etat_horaire'];
			echo '<br/>';
 
			//----------------------------------------------------------------------------------------------------------------------------------------
 
			echo '</td>';
 
				if ($j%$NbrCol == 0) 
				{
				echo "</tr>"; 
				fintr == 1;
				}
			$j++;
		}	
 
	//----------------------------------------------------------------------------------------------------------------------------------------
	// derniere balise /tr
	//----------------------------------------------------------------------------------------------------------------------------------------
 
	if ($fintr!=1) { echo '</tr>'; }
	echo '</table>';
	} 
 
	else 
	{
	echo 'pas de données à afficher';
	}
 
?>
avec ce code cela m'affiche :


Moi ce que je souhaiterais ce sont les heures en première ligne et les id_etat en second. La sa m'affiche tout dans un seule cellule et je ne vois pas comment faire... Quelqu'un sait-il le faire?
Images attachées
Type de fichier : jpg image.JPG (9,5 Ko, 53 affichages)
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 11h33   #11
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
merci fench sa a fonctionné pour la date. j'ai regardé dans le manuel php.
Toujours un souci de mise en page...

Voila le code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
	if ($NbreData != 0) 
	{
		echo '<table border="1" width="400">';
 
		while ($val = mysql_fetch_array($req)) 
		{
			echo '<tr>';
			echo '<td>'.$val['heure'].'</td>';	
			echo '<td>'.$val['id_etat_horaire'].'</td>';
			echo '</tr>';
		}
 
	echo '</table>';
 
	}
Sa m'affiche un tableau avec 2 colonnes et 14 lignes alors que je veux 14 colonnes et 2 lignes. Quellqu'un a-t-il la solution?

Dernière modification par johan0510 ; 10/03/2010 à 12h16.
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 12h42   #12
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
se doit être à cause de ma boucle while... je cherche mais ne trouve toujours pas la solution! quelqu'un a-t-il deja réaliser un tableau comme celui ci?
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 13h40   #13
Membre Expert
 
Avatar de Fench
 
Inscription : mai 2002
Messages : 1 570
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2002
Messages : 1 570
Points : 1 703
Points : 1 703
Dans ton cas, il y a une petite ruse à faire qui n'est pas dans le tuto ...

J'ai été s... car je t'ai laissé chercher un peu ... pour bien comprendre les tableaux.

Donc le code est une serie de tables de 2 lignes 1 colonne :
Code :
1
2
3
4
5
6
7
8
9
10
 
if ($NbreData != 0)  {
      while ($val = mysql_fetch_array($req)) {
           echo '<table>';
 	echo '<tr><td>'.$val['heure'].'</td></tr>';	
	echo '<tr><td>'.$val['id_etat_horaire'].'</td></tr>';
           echo '</table>';
       }
 
}
Bon c une solution, ya peut être plus simple mais je fais pas dans l'optimisation ce midi.
__________________
Actuellement AI à l'INRA
fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)
Fench est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 14h09   #14
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
merci fench! tkt c normal que je cherche un peu sauf que la solution que tu m'as donnée je l'ai deja testé et elle ne fonctionne pas! sa affiche ça :

8
1
9
2
10
2

que des lignes!!! ce que je veux faire c'est :

8...9...10
1...2....2

et ça je cherche toujours
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 14h55   #15
Membre Expert
 
Avatar de Fench
 
Inscription : mai 2002
Messages : 1 570
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2002
Messages : 1 570
Points : 1 703
Points : 1 703
Hummm, ya peut être un retour à la ligne à chaque table, erreur de ma part Dsl ... pour la peine je vais chercher moi aussi ...
__________________
Actuellement AI à l'INRA
fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)
Fench est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 15h04   #16
Membre Expert
 
Avatar de Fench
 
Inscription : mai 2002
Messages : 1 570
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2002
Messages : 1 570
Points : 1 703
Points : 1 703
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
if ($NbreData != 0)  {
      echo '<table><tr>';
      while ($val = mysql_fetch_array($req)) {
           echo '<td><table border="1">';
 	echo '<tr><td>'.$val['heure'].'</td></tr>';	
	echo '<tr><td>'.$val['id_etat_horaire'].'</td></tr>';
           echo '</table></td>';
       }
       echo '</tr></table>';
 
}
Essayons
__________________
Actuellement AI à l'INRA
fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)
Fench est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 15h10   #17
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
ta solution m'affiche ça :



on dirai que c découpé non?
Images attachées
Type de fichier : jpg image.JPG (12,0 Ko, 13 affichages)
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 15h18   #18
Membre Expert
 
Avatar de Fench
 
Inscription : mai 2002
Messages : 1 570
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2002
Messages : 1 570
Points : 1 703
Points : 1 703
Pour finir, faut jouer avec les options d'affichage des tableaux ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
if ($NbreData != 0)  {
      echo '<table border="1" cellspacing="0"><tr>';
      while ($val = mysql_fetch_array($req)) {
           echo '<td><table border="1" rules="rows">';
 	echo '<tr><td>'.$val['heure'].'</td></tr>';	
	echo '<tr><td>'.$val['id_etat_horaire'].'</td></tr>';
           echo '</table></td>';
       }
       echo '</tr></table>';
 
}
__________________
Actuellement AI à l'INRA
fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)
Fench est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2010, 15h28   #19
Candidat au titre de Membre du Club
 
Inscription : mars 2010
Messages : 111
Détails du profil
Informations forums :
Inscription : mars 2010
Messages : 111
Points : 11
Points : 11
ah yesss je te remercie! sa donne ça au final :


c'est ce que je voulais! au final le rules="rows" sert à tracé les bordures des cellules
Images attachées
Type de fichier : jpg image.JPG (11,5 Ko, 9 affichages)
johan0510 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 10h25.


 
 
 
 
Partenaires

Hébergement Web