Parcourir une table (mysql/php)

Résolu
Laorra Messages postés 159 Date d'inscription   Statut Membre Dernière intervention   -  
 antoine -
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

12 réponses

  1. adgem0 Messages postés 122 Statut Membre 161
     
    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
    1. Laorra Messages postés 159 Date d'inscription   Statut Membre Dernière intervention   108
       
      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
      1. Laorra Messages postés 159 Date d'inscription   Statut Membre Dernière intervention   108 > Laorra Messages postés 159 Date d'inscription   Statut Membre Dernière intervention  
         
        Autant pour moi, il manquait juste le = :$

        Merci!
        0
  2. adgem0 Messages postés 122 Statut Membre 161
     
    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
  3. Laorra Messages postés 159 Date d'inscription   Statut Membre Dernière intervention   108
     
    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
  4. adgem0 Messages postés 122 Statut Membre 161
     
    Alors ton problème est-il résolu ?
    Préviens moi si tu rencontre encore des difficultés ...
    0
    1. Laorra Messages postés 159 Date d'inscription   Statut Membre Dernière intervention   108
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. adgem0 Messages postés 122 Statut Membre 161
     
    Oui !
    J'en ai connu des pires ...
    0
    1. Laorra Messages postés 159 Date d'inscription   Statut Membre Dernière intervention   108
       
      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
  7. adgem0 Messages postés 122 Statut Membre 161
     
    Ne t'en fais j'y travaille ...
    0
  8. rpayet37
     
    //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
  9. rpayet37
     
    J'ai mis une accolade en trop à la fin attention!
    0
    1. Laorra Messages postés 159 Date d'inscription   Statut Membre Dernière intervention   108
       
      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
  10. adgem0 Messages postés 122 Statut Membre 161
     
    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
    1. Super_Sympas
       
      Bonjour, ton lien vers le calendrier ne fonctionne pas ?
      0
  11. Laorra Messages postés 159 Date d'inscription   Statut Membre Dernière intervention   108
     
    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
  12. antoine
     
    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
  13. mathieu_bond
     
    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