Rechercher : dans
Par :

Parcourir une table (mysql/php)

Dernière réponse le 19 jun 2008 à 16:31:18 Laorra, le 16 jun 2008 à 16:19:29 
 Signaler ce message aux modérateurs

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!!

Configuration: Windows XP
Firefox 2.0.0.14

Meilleures réponses pour « Parcourir une table (mysql/php) » dans :
Installation rapide de LAMP (Apache+MySql+php) sous Linux VoirLAMP = Linux+Apache+MySql+Php. C'est le serveur web par excellence. L'ensemble est facile à installer. Installation rapide sudo aptitude install apache2 php5 mysql-server php5-mysql libapache2-mod-php5 Le mot de passe administrateur mySQL...
PHP - Parser du XML VoirIntroduction à XML PHP permet l'analyse syntaxique (parsage ou parsing en anglais) d'un document XML. Le langage XML (eXtensible Markup Language, traduisez Langage à balises extensibles) est un métalangage, c'est-à-dire un langage permettant de...

1

adgem0, le 16 jun 2008 à 20:37:51

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.

Répondre à adgem0

2

Laorra, le 17 jun 2008 à 10:43:32
  • +1

Bonjour et merci !

Mais comment parcourir une table Mysql?
Je dois enregistrer la table dans un array?
Ou je peu la parcourir comme ça?

Répondre à Laorra

3

adgem0, le 17 jun 2008 à 12:20:06

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
}

Répondre à adgem0

4

Laorra, le 17 jun 2008 à 16:05:53

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?

Répondre à Laorra

5

Laorra, le 17 jun 2008 à 17:35:32

Autant pour moi, il manquait juste le = :$

Merci!

Répondre à Laorra

6

adgem0, le 17 jun 2008 à 17:59:34

Alors ton problème est-il résolu ?
Préviens moi si tu rencontre encore des difficultés ...

Répondre à adgem0

7

Laorra, le 17 jun 2008 à 18:04:27

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?

Répondre à Laorra

8

adgem0, le 17 jun 2008 à 18:38:01

Oui !
J'en ai connu des pires ...

Répondre à adgem0

9

Laorra, le 17 jun 2008 à 20:04:08

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!

Répondre à Laorra

10

adgem0, le 17 jun 2008 à 20:30:54

Ne t'en fais j'y travaille ...

Répondre à adgem0

11

rpayet37, le 17 jun 2008 à 21:54:23

//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.

Répondre à rpayet37

12

rpayet37, le 17 jun 2008 à 21:55:50

J'ai mis une accolade en trop à la fin attention!

Répondre à rpayet37

13

Laorra, le 18 jun 2008 à 16:20:57

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?

Répondre à Laorra

14

adgem0, le 19 jun 2008 à 09:38:31
  • +2

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 !

Répondre à adgem0

15

 Laorra, le 19 jun 2008 à 16:31:18

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

Répondre à Laorra
Collection CommentÇaMarche.net