Parcourir une table (mysql/php)

Résolu/Fermé
Laorra Messages postés 195 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 18 juillet 2011 - 16 juin 2008 à 16:19
 antoine - 3 févr. 2011 à 10:21
Bonjour à tous,

Je viens de créer une table dans une base de donnée Mysql.
La table contient 3 champs : Date (la clé primaire) , titre, description.

Ensuite , j'ai une page PHP qui affiche des dates.


Je voudrais trouver une fonction ou une structure qui parcours le champs DATE de
ma table et si une des dates affichées existent aussi dans la table, elle sera afficher
d'une autre couleur.


Je m'explique mieux. Par exemple, j'affiche touts les jours du mois de juin, je veux que la fonction recherche à chaque date afficher si un evenement de la table correspond. Si oui, je lui rajoute une classe CSS.


Merci d'avance!!
A voir également:

12 réponses

adgem0 Messages postés 119 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 7 mai 2010 158
17 juin 2008 à 12:20
Voici un exemple, inspires-toi en.
En effet, tu peux générer depuis mysql un array qui contient tous les évenements.
Pour générer ton array :
$i = 0;
$evenements = array();
$req_array = mysql_query('SELECT * FROM `evenements`');
while (mysql_fetch_array($req_array) = $champs) {
	$evenements[$i][0] = $champs[0]; // Date
	$evenements[$i][1] = $champs[1]; // Titre
	$evenements[$i][2] = $champs[2]; // Description
	$i++;
}

Lorsque PHP génère ton calendrier, il génère d'abord le 1, puis le 2, le 3, etc.
Il faut que au moment ou PHP génère ces chiffres tu testes si la date se trouve dans l'array :
(Exemple dans le cas du 06/06/2008)
if (in_array('06/06/2008', $evenements)) {
	// Le date est dans l'array
} else {
	// La date n'est pas dans l'array
}
2
Laorra Messages postés 195 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 18 juillet 2011 107
17 juin 2008 à 16:05
J'ai essayer d'insérer ton code le mieu possible dans mon script, mais j'ai une erreur :

Fatal error: Can't use function return value in write context in C:\Program Files\EasyPHP 2.0b1\www\Calendrier\script_presentation.php on line 70


A cette ligne là :

while (mysql_fetch_array($req_array) = $champs) {

Est ce que tu vois ce que ça peut être?
0
Laorra Messages postés 195 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 18 juillet 2011 107 > Laorra Messages postés 195 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 18 juillet 2011
17 juin 2008 à 17:35
Autant pour moi, il manquait juste le = :$

Merci!
0
adgem0 Messages postés 119 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 7 mai 2010 158
16 juin 2008 à 20:37
Il faut faire deux boucles while imbriquée l'une dans l'autre.
La première pour toutes les dates et la deuxième pour vérifier à cette date si il y a des évenements.
0
Laorra Messages postés 195 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 18 juillet 2011 107
17 juin 2008 à 10:43
Bonjour et merci !

Mais comment parcourir une table Mysql?
Je dois enregistrer la table dans un array?
Ou je peu la parcourir comme ça?
0
adgem0 Messages postés 119 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 7 mai 2010 158
17 juin 2008 à 17:59
Alors ton problème est-il résolu ?
Préviens moi si tu rencontre encore des difficultés ...
0
Laorra Messages postés 195 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 18 juillet 2011 107
17 juin 2008 à 18:04
Et bien ça ne marche pas ... mais je ne me vois pas poster tout mon code ici :s
Il fais une centaine de ligne.

Tu as du courage?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
adgem0 Messages postés 119 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 7 mai 2010 158
17 juin 2008 à 18:38
Oui !
J'en ai connu des pires ...
0
Laorra Messages postés 195 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 18 juillet 2011 107
17 juin 2008 à 20:04
Bin voilà !!



<?php

if (isset($_POST['change'])){

$oldDate = $_POST['currentDate'];

switch ($_POST['change']){

case ">":

$tab = getdate($_POST['currentDate']);

$tab["mon"]++;

$date = mktime(0,0,0,$tab['mon'], $tab['mday'], $tab['year']);

break;

case "<":

$tab = getdate($_POST['currentDate']);

$tab["mon"]--;

$date = mktime(0,0,0,$tab['mon'], $tab['mday'], $tab['year']);

break;

}

}



// substr garde la chaine de caractËre dÈterminÈe par $start

function getSeconde($valeur) {

return substr($valeur, 17, 2);

}

function getMinute($valeur) {

return substr($valeur, 14, 2);

}

function getheure($valeur) {

return substr($valeur, 11, 2);

}

function getjour($valeur) {

return substr($valeur, 8, 2);

}

function getMois($valeur) {

return substr($valeur, 5, 2);

}

function getAnnÈe($valeur) {

return substr($valeur, 0, 4);

}

function numMois($mois) {

$tableau = Array("", "Janvier", "FÈvrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "AÙut", "Septembre", "Octobre", "Novembre", "DÈcembre");

return (intval($mois) > 0 && intval($mois) < 13) ? $tableau[intval($mois)] : "IndÈfini";

} //intval converti par dÈfault une valeur en base 10

//Fonction pour afficher le calendrier

function showCalendar($timestamp) {

$periode = date("Y-m", $timestamp);



$leCalendrier = "";

$mois = getMois($periode);

$annee = getAnnÈe($periode);

// Tableau des valeurs possibles pour un numÈro de jour dans la semaine

$tableau = Array("0", "1", "2", "3", "4", "5", "6", "0");

$nb_jour = Date("t", mktime(0, 0, 0, $mois, 1, $annee));

$pas = 0;

$index = 1;



// Affichage du mois et de l'annÈe en titre

$leCalendrier .= "<form method=\"post\" action=\"calendrier.php\"><h2><input type=\"submit\" value=\"<\" name=\"change\" />" . numMois($mois) . " " . $annee . "<input type=\"submit\" value=\">\" name=\"change\" /></h2><input type=\"hidden\" name=\"currentDate\" value=\"" . $timestamp . "\" /></form>";

// Affichage des entÍtes

$leCalendrier .= "

<ul id=\"libelle\">

\t<li>L</li>

\t<li>M</li>

\t<li>M</li>

\t<li>J</li>

\t<li>V</li>

\t<li>S</li>

\t<li>D</li>

</ul>";

mysql_connect("localhost", "root", "");

mysql_select_db("calendrier");

$i = 0;

$evenement = array(); //génération du tableau

$req_array = mysql_query("SELECT * FROM evenement")or die(mysql_error());

while (mysql_fetch_array($req_array) == $champs) {

$evenement[$i][0] = $champs[0];

$evenement[$i][1] = $champs[1];

$evenement[$i][2] = $champs[2];

$i++;

}

// Tant que l'on n'a pas affectÈ tous les jours du mois traitÈ

while ($pas < $nb_jour) {

if ($index == 1) $leCalendrier .= "\n\t<ul class=\"ligne\">";

// Si le jour calendrier == jour de la semaine en cours

if (Date("w", mktime(0, 0, 0, $mois, 1 + $pas, $annee)) == $tableau[$index]) {

// Si jour calendrier == aujourd'hui

$afficheJour = Date("j", mktime(0, 0, 0, $mois, 1 + $pas, $annee));

if (Date("Y-m-d", mktime(0, 0, 0, $mois, 1 + $pas, $annee)) == Date("Y-m-d")) {

$class = " class=\"itemCurrentItem\"";

}

else {

//Il faut parcourir le tableau pour voir si la date qui va Ítre existe dans la bdd

if (1)) {

$class = " class=\"itemExistingItem\"";

//aprËs pour choisir les jours avec liens, base de donnÈe SQL

$afficheJour = "<a href=\"\">" . Date("j", mktime(0, 0, 0, $mois, 1 + $pas, $annee)) . "</a>";

}

else {

$class = "";

}

}

// Ajout de la case avec la date

$leCalendrier .= "\n\t\t<li$class>$afficheJour</li>";

$pas++;

}

//

else {

// Ajout d'une case vide

$leCalendrier .= "\n\t\t<li> </li>";

}

if ($index == 7 && $pas < $nb_jour) { $leCalendrier .= "\n\t</ul>"; $index = 1;} else {$index++;}

}

// Ajustement du tableau

for ($i = $index; $i <= 7; $i++) {

$leCalendrier .= "\n\t\t<li> </li>";

}

$leCalendrier .= "\n\t</ul>\n";

// Retour de la chaine contenant le Calendrier

return $leCalendrier;

}

if (!isset($date)) $date = time();

?>

<html>

<head>

<link rel="stylesheet" media="screen" type="text/css" title="style" href="style.css" />

</head>

<body class="back">

<?php

echo showCalendar($date);

?>

</body>

</html>



Je te souhaite bien du courage. J'ai pour l'instant seulement rajouter ton script pour créer le array, et encore je ne sais pas si il est bien placé (Ca me dit que $champs n'est pas défini). Merci beaucoup en tout cas!
0
adgem0 Messages postés 119 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 7 mai 2010 158
17 juin 2008 à 20:30
Ne t'en fais j'y travaille ...
0
//VOICI dans les grandes lignes:

<style>
.classEnRouge {color:red}
.classPasEnRouge {}
</style>


//Fontion qui renvoie true si la la date $date existe dans la table des
//Evenements (ta table: date,titre, description)
function existEvenement($date)
{
$requeteSQL="select 1 from tableDesEvenements where date='$date'";
$reponse=mysql_query($requeteSQL);
$exist=(mysql_num_rows($reponse)>0); //Mis à true si la date $date existe dans tableDesEvenements

return($exist);
}


//Tableau dont chaque élément est une date à afficher
$aListeDesDatesAAfficher =Array("20080612","20080615");

//Boucle de lecture du tableau ci-dessus.
forEach($aListeDesDatesAAfficher as $date)
{

//Choix du nom de la classe CSS
//(la fonction existEvenement() est appelée avec la date $date en paramètre).
$classCSS=(existEvenement($date))? "classEnRouge" : "classPasEnRouge";

//Affichage de la date dans la bonne couleur
$codeHTML="<span class='$classCSS'>$date</span>";
echo "$codeHTML<br/>"; }
}


//Pour le format des dates je te laisse gérer..., ça dépendra aussi du type de ton champ date.
0
J'ai mis une accolade en trop à la fin attention!
0
Laorra Messages postés 195 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 18 juillet 2011 107
18 juin 2008 à 16:20
Bon,
J'ai essayé de faire un petit mix avec les explication de vos deux posts.
Mais ça ne marche pas. Les date ne sont pas coloré.
Je reposte mon code, après modifications :

<?php
if (isset($_POST['change'])){
$oldDate = $_POST['currentDate'];
switch ($_POST['change']){
case ">":
$tab = getdate($_POST['currentDate']);
$tab["mon"]++;
$date = mktime(0,0,0,$tab['mon'], $tab['mday'], $tab['year']);
break;
case "<":
$tab = getdate($_POST['currentDate']);
$tab["mon"]--;
$date = mktime(0,0,0,$tab['mon'], $tab['mday'], $tab['year']);
break;
}
}

// substr garde la chaine de caract? d?rmin?par $start
function getSeconde($valeur) {
return substr($valeur, 17, 2);
}
function getMinute($valeur) {
return substr($valeur, 14, 2);
}
function getheure($valeur) {
return substr($valeur, 11, 2);
}
function getjour($valeur) {
return substr($valeur, 8, 2);
}
function getMois($valeur) {
return substr($valeur, 5, 2);
}
function getAnnee ($valeur) {
return substr($valeur, 0, 4);
}
function numMois($mois) {
$tableau = Array("", "Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout" , "Septembre", "Octobre", "Novembre", "Décembre");
return (intval($mois) > 0 && intval($mois) < 13) ? $tableau[intval($mois)] : "Ind?ni";
} //intval converti par d?ult une valeur en base 10
//Fonction pour afficher le calendrier
function showCalendar($timestamp) {
$periode = date("Y-m", $timestamp);

$leCalendrier = "";
$mois = getMois($periode);
$annee = getAnnee ($periode);
// Tableau des valeurs possibles pour un num? de jour dans la semaine
$tableau = Array("0", "1", "2", "3", "4", "5", "6", "0");
$nb_jour = Date("t", mktime(0, 0, 0, $mois, 1, $annee));
$pas = 0;
$index = 1;
mysql_connect("localhost", "root", "");
mysql_select_db("calendrier");
$i = 0;
$evenement = array(); //génération du tableau
$req_array = mysql_query("SELECT * FROM evenement")or die(mysql_error());
while ($champs = mysql_fetch_array($req_array)) {
$evenements[$i][0] = $champs[0]; // Date
$evenements[$i][1] = $champs[1]; // Titre
$evenements[$i][2] = $champs[2]; // Description
$i++;
}
// Affichage du mois et de l'ann?en titre
$leCalendrier .= "<form method=\"post\" action=\"new.php\"><h2><input type=\"submit\" value=\"<\" name=\"change\" />" . numMois($mois) . " " . $annee . "<input type=\"submit\" value=\">\" name=\"change\" /></h2><input type=\"hidden\" name=\"currentDate\" value=\"" . $timestamp . "\" /></form>";
// Affichage des ent?s
$leCalendrier .= "
<ul id=\"libelle\">
\t<li>L</li>
\t<li>M</li>
\t<li>M</li>
\t<li>J</li>
\t<li>V</li>
\t<li>S</li>
\t<li>D</li>
</ul>";
// Tant que l'on n'a pas affect?ous les jours du mois trait?
while ($pas < $nb_jour) {
if ($index == 1) $leCalendrier .= "\n\t<ul class=\"ligne\">";
// Si le jour calendrier == jour de la semaine en cours
if (Date("w", mktime(0, 0, 0, $mois, 1 + $pas, $annee)) == $tableau[$index]) {
// Si jour calendrier == aujourd'hui
$afficheJour = Date("j", mktime(0, 0, 0, $mois, 1 + $pas, $annee));
if (Date("Y-m-d", mktime(0, 0, 0, $mois, 1 + $pas, $annee)) == Date("Y-m-d")) {
$class = " class=\"itemCurrentItem\"";
}
else {
//Il faut parcourir le tableau pour voir si la date qui va ?e existe dans la bdd
$LaDate = $annee .'-'. numMois($mois). '-' . $afficheJour ;
if (in_array($LaDate, $evenement)) {

$class = " class=\"itemExistingItem\"";
//apr?pour choisir les jours avec liens, base de donn?SQL
$afficheJour = "<span>" . Date("j", mktime(0, 0, 0, $mois, 1 + $pas, $annee)) . "</span>";
}
else {
$class = "";
}
}
// Ajout de la case avec la date
$leCalendrier .= "\n\t\t<li$class>$afficheJour</li>";
$pas++;
}
//
else {
// Ajout d'une case vide
$leCalendrier .= "\n\t\t<li> </li>";
}
if ($index == 7 && $pas < $nb_jour) { $leCalendrier .= "\n\t</ul>"; $index = 1;} else {$index++;}
}
// Ajustement du tableau
for ($i = $index; $i <= 7; $i++) {
$leCalendrier .= "\n\t\t<li> </li>";
}
$leCalendrier .= "\n\t</ul>\n";
// Retour de la chaine contenant le Calendrier
return $leCalendrier;
}
if (!isset($date)) $date = time();
?>
<html>
<head>
<link rel="stylesheet" media="screen" type="text/css" title="style" href="style.css" />
</head>
<body class="back">
<?php
echo showCalendar($date);
?>
</body>
</html>

Je pense que le probleme vient du passage souligné.
Ma base de données s'appelle Calendrier, ma table : evenement.

Une idée?
0
adgem0 Messages postés 119 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 7 mai 2010 158
19 juin 2008 à 09:38
Oui moi j'ai une idée ...
Télécharge et teste ça :
Calendrier.php

Ne te contente pas de le voir fonctionner mais cherche à savoir comment ça fonctionne !
Bonne chance et préviens-moi si tu rencontre des problèmes !
0
Bonjour, ton lien vers le calendrier ne fonctionne pas ?
0
Laorra Messages postés 195 Date d'inscription dimanche 12 novembre 2006 Statut Membre Dernière intervention 18 juillet 2011 107
19 juin 2008 à 16:31
Merci beaucoup adgemO, j'ai bidouillé un peu mon code avec le tien, et ça me donne quelque chose de pas mal du tout!!

Encore merci et bonne après midi à toi :D
0
bonjour,

j'ai utilisé le script du calendrier.php et cela marche. Cependant dans mes évènement j'ai plusieurs évènement le même jour. et je n'arrive pas a afficher une infobulle avec Deux évènement. je n'arrive que seulement a en affiché un!

// Fonction pour afficher le calendrier
function showCalendar($periode) {
	
/*connexion a la base de données*/
$mabasededonnee="bdsite_intranet";
$connection = mysql_connect("","","");// c'est ma onnexion => Sécurité ;p
mysql_select_db($mabasededonnee) or die ("pas de connection"); 
if (!$connection ){	die ("connection impossible");}
		
$leCalendrier = "";
// Tableau des valeurs possibles pour un numéro de jour dans la semaine
$tableau = Array("0", "1", "2", "3", "4", "5", "6", "0");
$nb_jour = Date("t", mktime(0, 0, 0, getMonth($periode), 1, getYear($periode)));
$pas = 0;
$indexe = 1;
// Affichage du mois et de l'année
$leCalendrier .= "\n<p class=\"titreCalendrier\">  " . monthNumToName(getMonth($periode)) . " " . getYear($periode) . "</p>";
// Affichage des entêtes
$leCalendrier .= "
<table id=\"libelle\">
	<td>L</td>
	<td>M</td>
	<td>M</td>
	<td>J</td>
	<td>V</td>
	<td>S</td>
	<td>D</td>
</table>";
		
// Tant que l'on n'a pas affecté tous les jours du mois traité
while ($pas < $nb_jour) {
	if ($indexe == 1) $leCalendrier .= "\n<table class=\"ligne\">";
			
	// Si le jour calendrier == jour de la semaine en cours
	if (Date("w", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))) == $tableau[$indexe]) {
			
		// Si jour calendrier == aujourd'hui
		$afficheJour = Date("j", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode)));
		if (Date("Y-m-d", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))) == Date("Y-m-d")) {
			$class = " class=\"itemCurrentItem\" ";
		}
				
		else {
			//mes manipulations
			$requete="SELECT dateEv, descEv FROM evenement WHERE dateEv like '".getYear($periode)."-".getMonth($periode)."-%' group by dateEv  "; // requête
			$result = mysql_query($requete,$connection); // envoi de la requête 
			while($row = mysql_fetch_row($result)){
				$date = $row[0];
				$desc = $row[1];
						
				if ($row[0] == Date("Y-m-d", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))))//si la date de l'évènement correspond a une date du mois alors on a une info bulle
				{
					$afficheJour = "<a  class='info' href=\"".$row[0].".php\">" . Date("j", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))) . "<span>".$row[1]."</span></a>";
				}
				else
				{
					$class = " class=\"itemExistingItem\" ";
				}
			}
		}
		// Ajout de la case avec la date
		$leCalendrier .= "\n<td$class>$afficheJour</td>";
		$pas++;
	}
	//
	else {
		// Ajout d'une case vide
		$leCalendrier .= "\n<td> </td>";
	}
	if ($indexe == 7 && $pas < $nb_jour) { $leCalendrier .= "\n</ul>"; $indexe = 1;} else {$indexe++;}
}
// Ajustement du tableau
for ($i = $indexe; $i <= 7; $i++) {
	$leCalendrier .= "\n<td> </td>";
}
$leCalendrier .= "\n</table>\n";
// Retour de la chaine contenant le Calendrier
return $leCalendrier;}
0
Je peut te proposer un script simple, prêt à l'emploi et facile à installer même pour un novice, qui affiche un calendrier avec des couleurs de fond des cellules différentes si la date est inscrite dans la base de données.
Tu trouvera une démonstration sur cette page https://www.mathieuweb.fr/calendrier/calendrier.php
-1