Les Allergies
Alimentaires
Posez votre question Signaler

Parcourir une table (mysql/php) [Résolu]

Laorra 159Messages postés 12 novembre 2006Date d'inscription 18 juillet 2011Dernière intervention - Dernière réponse le 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!!
Lire la suite 

Parcourir une table (mysql/php) »

18 réponses
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour et merci !

Mais comment parcourir une table Mysql?
Je dois enregistrer la table dans un array?
Ou je peu la parcourir comme ça?
Ajouter un commentaire
Réponse
+0
moins plus
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
}
Laorra- 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?
Laorra- 17 juin 2008 à 17:35
Autant pour moi, il manquait juste le = :$

Merci!
Ajouter un commentaire
Réponse
+0
moins plus
Alors ton problème est-il résolu ?
Préviens moi si tu rencontre encore des difficultés ...
Laorra- 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?
Ajouter un commentaire
Réponse
+0
moins plus
Oui !
J'en ai connu des pires ...
Laorra- 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!
Ajouter un commentaire
Réponse
+0
moins plus
Ne t'en fais j'y travaille ...
Ajouter un commentaire
Réponse
+0
moins plus
//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.
Ajouter un commentaire
Réponse
+0
moins plus
J'ai mis une accolade en trop à la fin attention!
Laorra- 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?
Ajouter un commentaire
Réponse
+0
moins plus
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 !
Super_Sympas - 7 janv. 2010 à 01:57
Bonjour, ton lien vers le calendrier ne fonctionne pas ?
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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;}
Ajouter un commentaire
Réponse
-1
moins plus
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 http://www.mathieuweb.fr/calendrier/calendrier.php
Ajouter un commentaire
Ce document intitulé « Parcourir une table (mysql/php) » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?