begin process at 2012 05 31 12:19:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

Problème de boucle / accès BDD


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de boucle / accès BDD

vendredi 11 mars 2011 à 03:37:19 | Problème de boucle / accès BDD

satreix

Bonsoir ,

Je viens vers vous ce soir pour un problème de syntaxe selon moi mais ce pourrait être autre chose.
La fonction suivante est censée afficher un calendrier sous forme de table (le code de base viens de CodeSource). J'ai modifier une parti du code avec une connection SQL pour que le classe 'booked' soit ajouter aux jours entre deux date (des réservations que l'on affiche sous forme de calendrier en fait).
Mon problème et le suivant:
  • sans mon bout de code le calendrier est montré en entier
  • avec mon bout de code le calendrier est montré tronqué, on ne voit plus que les jours booked


  • Est-il possible d'avoir un peu d'aide, Merci!
    Code PHP :
    <?php
    //fonction d'affichage du mois suivant
    function mois_suivant($m,$a){
    	//mois suivant, donc on incrémente de 1
    	$m++;	
    	//si le mois est 13 il faut augmenter l'année de 1 et repasser le mois à 1
    	if($m==13){
    		$a++;
    		$m=1;
    	}
    	return '<a href="'.$_SERVER['PHP_SELF']."?m=$m&a=$a\"> &raquo; </a>";
    }
    
    //fonction d'affichage du mois précédent
    function mois_precedent($m,$mois,$a){
    	$m--;
    	if($m==0){
    		$a--;
    		$m=12;
    	}
    	return '<a href="'.$_SERVER['PHP_SELF']."?m=$m&a=$a\"> &laquo; </a>";
    }
    
    
    function calendrier($m_donne,$a_donne){
    	// Tableau pour le noms des mois
    	$mois = array();
    	$mois[1] = "Janvier";$mois[2] = "Février";$mois[3] = "Mars";
    	$mois[4] = "Avril";$mois[5] = "Mai";$mois[6] = "Juin";
    	$mois[7] = "Juillet";$mois[8] = "Août";$mois[9] = "Septembre";
    	$mois[10] = "Octobre";$mois[11] = "Novembre";$mois[12] = "Décembre";
    	
    	// Tableau pour le noms des jours
    	$jours = array();
    	$jours[1] = "Lu";$jours[2] = "Ma";$jours[3] = "Me";$jours[4] = "Je";
    	$jours[5] = "Ve";$jours[6] = "Sa";$jours[7] = "Di";
    	
    	// On récupère le mois et l'année dans la barre de navigation
    	// Si rien n'est spécifié, il faut afficher le mois et l'année donnés par la fonction
    	if(isset($_GET['m'])){$m = $_GET['m'];}else{$m = $m_donne;}
    	if(isset($_GET['a'])){$a = $_GET['a'];}else{$a = $a_donne;}
    
    	// Calcul du nb de jours dans chaque mois, avec les années bisextiles
    	// les tableaux PHP commençant à 0, le premier mois est un mois "factice"
    	if (($a % 4) == 0){$nbrjour = array(0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);}
    	else{$nbrjour = array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);}
    
    	// On cherche grâce à cette fonction à quel jour de la semaine correspond le 1er du mois 
    	$CAL_FRENCH = 0;
    	$premierdumois = jddayofweek(cal_to_jd($CAL_FRENCH, $m, 1, $a), 0);
    	if($premierdumois == 0){$premierdumois = 7;}
    
    	//Préparation du tableau avec le nom du mois et la liste des jours de la semaine
    	echo "<table class=\"cal\"><tr><td class=\"fleches\">";
    	if($m > date("n")){echo mois_precedent($m,$mois[$m],$a);}
    	echo "</td><td class=\"nom_mois\" colspan=\"5\">$mois[$m] $a</td><td class=\"fleches\">"
    		.mois_suivant($m,$a)
    		."</td></tr><tr class=\"noms_jours\">
    
    		<td>$jours[1]</td><td>$jours[2]</td><td>$jours[3]</td><td>$jours[4]</td><td>$jours[5]</td><td>$jours[6]</td><td>$jours[7]</td></tr><tr>";
    
    
    	$jour=1;	//Cette variable est celle qui va afficher les jours de la semaine
    	$joursmoisavant = $nbrjour[$m-1] - $premierdumois+2;		//Celle-ci sert à afficher les jours du mois précédent qui apparaissent
    	$jourmoissuivant = 1; //Et celle-ci les jours du mois suivant
    	if($m == 1){$joursmoisavant = $nbrjour[$m+11] - $premierdumois+2;} //Si c'est janvier, le mois d'avant n'est pas à 0 mais 31 jours!
    
    	//Et c'est parti pour la boucle for qui va créer l'affichage de notre calendrier !
    	for($i=1;$i<40;$i++){		
    		$classed = 0;
    		if($i < $premierdumois){	// Tant que la variable i ne correspond pas au premier jour du mois, on fait des cellules de tableau avec les derniers jours du mois précédent
    		echo "<td class=\"cases_vides\">$joursmoisavant</td>";
    		$joursmoisavant++;
    		}
    		else
    		{
    			//Dans ce else ou veut savoir si le jour appartien à une resa de la table dispo
    				$db = mysql_connect('localhost', 'root', '');
    				mysql_query("SET NAMES UTF8");
    				mysql_select_db('locationparisonline',$db);
    				$sql = 'SELECT * FROM dispo';
    				$req = mysql_query($sql)or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    				
    				while($data = mysql_fetch_assoc($req))
    				{
    					$id = $data['id'];
    				}
    				
    			if($jour == date("d") && $m == date("n")) 	//Si la variable $jour correspond à aujourd'hui, la case est d'une couleur différente
    			{echo "<td class=\"aujourdhui\">$jour</td>";}
    			
    			elseif($id > 0){
    				//----------[DEBUT BOUCLE]------------
    				$whileRound = 0;
    				while($whileRound <= $id)
    				{
    				while($data = mysql_fetch_assoc($req))
    				{
    					// on affiche les informations de l'enregistrement en cours
    					list($ad, $md, $jd) = explode("-", $data['begin_date']);
    					list($af, $mf, $jf) = explode("-", $data['end_date']);
    					
    					if($a >= $ad && $a <= $af && $m >= $md && $m <= $mf && $jour >= $jd && $jour <= $jf)
    					{echo "<td class=\"booked\">$jour</td>";}
    					else{$whileRound++;}
    				}
    				//------------[FIN BOUCLE]------------
    				mysql_close();
    				}
    			}
    			
    			// C'est un jour libre et comme les autres
    			else{echo "<td class=\"jour\">$jour</td>";}
    				
    			//On passe au lendemain
    			$jour++;
    			
    			/*Si $jour est plus élevée que le nombre de jours du mois,  c'est que c'est la fin du mois! 
    			On remplit les cases vides avec les premiers jours des mois suivants, on ferme le tableau, 
    			et on met la variable $i à 41 pour sortir de la boucle */
    			if($jour > ($nbrjour[$m])){
    				while($i % 7 != 0){
    					echo "<td class=\"cases_vides\">$jourmoissuivant</td>";
    					$i++;
    					$jourmoissuivant++;
    				}
    			echo "</tr></table>".$id;
    			$i=41;
    			}
    		}
    	
    		// Si i correspond à un multiple de 7, on passe à la ligne suivante dans le tableau
    		if($i % 7 == 0){echo "</tr><tr>";}
    	}
    }
    ?>
    

    vendredi 11 mars 2011 à 09:52:55 | Re : Problème de boucle / accès BDD

    cod57

    bonjour

    c'est ton css que tu devrais posté
    et l'adresse de l'original

    a++
    samedi 12 mars 2011 à 07:14:29 | Re : Problème de boucle / accès BDD

    satreix

    Je poste le tout ce soir. Merci de cette réponse rapide.
    samedi 12 mars 2011 à 20:29:19 | Re : Problème de boucle / accès BDD

    satreix

    Pour le css:
    Code css :
    /* Règles pour le calendrier de dispoonibilité */
    	/* TABLEAU */
    	.cal td{font-family:Verdana;text-align:center;vertical-align:middle}
    	  /* NOM DU MOIS */
    	td.nom_mois{font-size:8pt;font-style:normal;font-weight:400}
    	  /* FLECHES */
    	td.fleches{font-size:14pt;font-style:normal;font-weight:400}
    	/* NOMS DES JOURS*/
    	tr.noms_jours{width:15px;height:15px;font-size:8pt}
    	 /*DATES*/
    	td.jours{width:15px;height:15px;border:1px solid #3CC;font-size:8pt;background:#cff}
    	 /* AUJOURD'HUI */
    	td.today{width:15px;height:15px;border:1px solid #000;font-size:8pt;background:#ffc020}
    	 /* CASES DES MOIS PRECEDENTS ET SUIVANTS*/
    	td.cases_vides{width:15px;height:15px;border:1px solid #F5F5F5;font-size:8pt;color:#C0C0C0}
    	/* Cases des mois réservés */
    	td.booked{width:15px;height:15px;border:1px solid #ca33cc;font-size:8pt;background:#ffccfc}
    	.cal a:link,.cal a:active,.cal a:visited {text-decoration:none;}

    Pour la page originale du script j'ai pris : http://www.phpcs.com/codes/CALENDRIER-ULTRA-SIMPLE-PERSONNALISABLE_44133.aspx

    Un gros merci
    lundi 14 mars 2011 à 01:03:42 | Re : Problème de boucle / accès BDD

    satreix

    Bonsoir je me permet d'apporter mes avancées à mon sujet.
    D'abord et comme je m'en doutais le bout de code qui casse tout est le code commenté ici.
    Code PHP :
    <?php //Si $jour correspond à aujourd'hui, la class est "today"
    if($jour == date("d") && $m == date("n") && $a == date("Y"))
    {echo "<td class=\"today\">$jour</td>";}
    
    /* else{
    //On veut savoir si le jour appartien à une resa de la table dispo
    $db = mysql_connect('localhost', 'root', '');
    mysql_query("SET NAMES UTF8");
    mysql_select_db('locationparisonline',$db);
    $sql = 'SELECT * FROM dispo';
    $req = mysql_query($sql)or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    				
    //----------[DEBUT BOUCLE]------------
      while($data = mysql_fetch_assoc($req))
      {
      // on affiche les informations de l'enregistrement en cours
      list($ad, $md, $jd) = explode("-", $data['begin_date']);
      list($af, $mf, $jf) = explode("-", $data['end_date']);
    
      if($a >= $ad && $a <= $af && $m >= $md && $m <= $mf && $jour >= $jd && $jour <= $jf)
      {echo "<td class=\"booked\">$jour</td>";}
      }
    //------------[FIN BOUCLE]------------
    mysql_close();
    } */
    
    // C'est un jour non réservé
    else{echo "<td class=\"jour\">$jour</td>";}?>


    Ce que je veut faire dans cette parti du code:
    si on affiche aujourd'hui >> class="today"
    si le jour est réservé >> class="booked"
    si le jour n'est pas réservé >> class="jour"

    Ce que le code fait:
    -sans la partie commentée il y a bien affichage du calendrier mais sans la clss booked; tous les jours sauf today sont en class jour
    -avec la partie commentée le calendrier n'affiche plus que les jours des autres mois, today et booked, mais plus de jours class jour; à la place il y a du vide.

    J'espère que sa peut aider à résoudre mon problème.


    Cette discussion est classée dans : jour, echo, mois, jours, if


    Répondre à ce message

    Sujets en rapport avec ce message

    Calendrier [ par faabulous ] Bonsoir ! J'ai, à l'aide d'un livre acheté, essayé de coder un calendrier. J'avais plusieurs erreurs, donc j'ai recopié à la lettre le code du livre CALENDRIER-RESERVATION SQL [ par xxiv ] Bonjourj'ai repris ce code ---> http://www.phpcs.com/codes/CALENDRIER-RESERVATION-PHP-MYSQL_40895.aspxet j'aimerais pouvoir appliquer plusieurs style SUJET POUR QUELQU' UN QUI CONNAIT LE PHP AVEC BASE SQL [ par philou4212 ] je remercie la personne qui peut me donner un coup de mains sur le sujet je coince un  peuVoilà j'ai un calendrier qui fonctionne avec une base sql il affichage calendrier de gestion des congés [ par babouche12 ] Bonjour à tous, Je suis en stage en entreprise et je dois refaire certaines fonctionnalités de l'Intranet. La partie Gestion des congés étant trop co petite erreur dans calendrier dynamique javascript!!! [ par joduak ] Salut à vous, j'ai un gros problème sur mon calendrier. copier coller le dans un fichier php et lancez le, vous verrez qu'il y a 2 ptites erreurs. J'a Calendrier [ par kitgraphic ] Voilà j'ai un calendrier avec des évènement, tout marche bien , mais je voudrais que le jour actuel (la cellule ou il se trouve soit d'une autre coule Calendrier / Agenda [ par kitgraphic ] Voilà j'ai un calendrier avec des évènement, tout marche bien , mais je voudrais que le jour actuel (la cellule ou il se trouve soit d'une autre coule PHP probleme de boucle avec dates [ par infosub ] Bonjour, je suis confronté à un petit problème de boucle pour ajouter plusieurs jour à une date.. le script ci-dessous calcule le nombre de jours entr Afficher les jours de la semaine... [ par stevethx27 ] Bonjour,je tente (en vain) d'afficher sur une ligne les jours de la semaine. J'ai utilisé un script trouvé sur le site que j'ai modifié et ça donne ma Calendrier - probleme ! [ par xavier1707 ] bonjour, je souhaite créer un calendrier sur une page en php... pour afficher le mois en cours, pas de problème, tout se passe bien... par contre, la


    Nos sponsors


    Sondage...

    Comparez les prix

    CalendriCode

    Mai 2012
    LMMJVSD
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   

    Consulter la suite du CalendriCode

    Photothèque

    A découvrir



     
    Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
    CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
    CodeS-SourceS.com© est une marque déposée tous droits réservés

    Google Coop CodeS-SourceS Google Coop CodeS-SourceS
    Temps d'éxécution de la page : 0,952 sec (3)

    Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales