incrémenter variable dans une boucle

VaN
Mammouth du PHP | 1107 Messages

09 nov. 2005, 15:58

Bonjour,
j'ai une boucle qui fait
foreach($tab2 as $result2) 
{
for ($e=$f; $e<=($result2['nb_pc']); $e++) 
  {
  }
}
et j'aimerais la modifier pour qu'a chaque tour de foreach(), le nom de la variable $e du if() soit incrementée. Pas seulement la variable (puisque ça la boucle if() le fait toute seule), mais le nom en lui meme.

Exemple de 2 tour de foreach() :
for ($e1=$f; $e1<=($result2['nb_pc']); $e1++)
{
...
}
for ($e2=$f; $e2<=($result2['nb_pc']); $e2++) 
{
...
}
Comment réaliser ça ?

Eléphant du PHP | 63 Messages

09 nov. 2005, 16:07

Le mieux serait d'utiliser un tableau indexé.

En gros ton code donnerait:
for (current($e)=$f; currect($e)<=($result2['nb_pc']); current($e)++)
{
...
}
next($e);
for (current($e)=$f; current($e)<=($result2['nb_pc']); current($e)++)
{
...
}
Pour récupérer la valeur courante du tableau: current et pour passer à valeur suivante next

VaN
Mammouth du PHP | 1107 Messages

09 nov. 2005, 16:14

Je ne comprends pas bien comment utiliser ce 'tableau indéxé'

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

09 nov. 2005, 16:15

sinon comme ça, c'est possible aussi:
$j=1;
foreach($tab2 as $result2)
{
	for ($e{$j}=$f; $e{$j}<=($result2['nb_pc']); $e{$j}++)
	{
	}
$j++;
}
tu aura donc $e1, $e2 ...

Mais je me demande a quoi ça peut servir de différencier le compteur de la boucle ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

VaN
Mammouth du PHP | 1107 Messages

09 nov. 2005, 16:30

j'aurais du mal a t'expliquer ça tres simplement. En gros je crée un calendrier qui rescence des reservations de pc, chaque reservation est faite par un user different, mais il peut y avoir plusieurs reservations pour chaque journée. Et donc quand je crée mes cases de tableau correspondantes aux pc reservés, il y'a des conflits quand la boucle recommence pour une nouvelle reservation pour la meme journée.

VaN
Mammouth du PHP | 1107 Messages

09 nov. 2005, 16:34

sinon comme ça, c'est possible aussi:
$j=1;
foreach($tab2 as $result2)
{
	for ($e{$j}=$f; $e{$j}<=($result2['nb_pc']); $e{$j}++)
	{
	}
$j++;
}
tu aura donc $e1, $e2 ...
Je te tiens au courant, mais ça a l'air d'etre tout à fait ce que je cherchais.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

09 nov. 2005, 16:36

Hmm.. ok je vois :lol:
Tu nous diras si l'une ou l'autre solution te convient et fonctionne surtout :wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

VaN
Mammouth du PHP | 1107 Messages

10 nov. 2005, 19:37

Bon ça a pas l'air vraiment de marcher..
$sql_res2 = 	"SELECT id_res, id_user, nb_pc, username
									FROM calendar_reservation, frm_users
									WHERE id_soiree=".$result_check_soiree['id_soiree']."
									AND calendar_reservation.id_user = frm_users.user_id
									ORDER BY id_res";
						$query_res2 = mysql_query($sql_res2);
						// si la requete renvoie quelquechose, on execute la boucle
						while ($result_res2 = mysql_fetch_array($query_res2))
						{
						
							// on recupere l'id_user de chaque reservation sur la soirée donnée 
							$tab2[] = array(	"username"=>$result_res2['username'],
											"nb_pc"=>$result_res2['nb_pc'],
											"id_user"=>$result_res2['id_user']
											);
						}
						// si la requete renvoie quelquechose, on execute la boucle 
						if ($query_res2) 
						{
							
							$op = 1;
							foreach($tab2 as $result2) 
							{
								//$f{$i} = 1;
								
								if (!isset($f{$i}))
								{
									$f{$i} = 1;
								}
									
								echo $f{$i}." - ".$result2['nb_pc'];
								echo "<b>".$op."</b>";
								// + $f{$i} !!!!!
								if ($op == 1)
								{
									echo "pwet";
									for ($e{$i}=$f{$i}; $e{$i}<=($result2['nb_pc']+($f{$i}-1)); $e{$i}++) 
									{ 
										if (($e{$i} == '7') || ($e{$i} == '13'))
										// le nombre de case maximum du tableau est de 18, 
										// pas la peine d'aller plus loin donc.
										{ 
											echo "<tr>\n";
										} 
										echo "<td title=\"r&eacute;serv&eacute; par ".$result2['username']."\"><img src=\"img/pc_res.gif\" width=\"15\">e{$i} = ".$e{$i}."<br>f{$i} = ".$f{$i}."</td>\n"; 
									}
								}
								else
								{
									echo "ppwet";
									for ($e{$i}=$f{$i}; $e{$i}<=(($result2['nb_pc']+$f{$i})-1); $e{$i}++) 
									{ 
										if (($e{$i} == '7') || ($e{$i} == '13'))
										// le nombre de case maximum du tableau est de 18, 
										// pas la peine d'aller plus loin donc.
										{ 
											echo "<tr>\n";
										} 
										echo "<td title=\"r&eacute;serv&eacute; par ".$result2['username']."\"><img src=\"img/pc_res.gif\" width=\"15\">e{$i} = ".$e{$i}."<br>f{$i} = ".$f{$i}."</td>\n"; 
									}
								
								}
								
								// for ($e{$i}=$f{$i}; $e{$i}<=($result2['nb_pc']+($f{$i}-1)); $e{$i}++) 
								
								$f{$i} = $e{$i};
								$op++;
							}                  
					}
est une partie du code qui génère cette page : http://vanwork.nuxit.net/goodgame/calen ... splay2.php
Comme on peut le voir, les reservation d'un jour donné prennent egalement en compte les reservations du jour précédent. dans ma base de données, VaN a reservé 3 pc pour le vendredi 4, et RoB 3 pc pour le samedi 5. Or, au samedi 5 sont inscrits les 3 pc de VaN ET les 3 pc de RoB.

je ne comprends pas : /

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

10 nov. 2005, 20:48

bon alors c'est un sacré cafouillage tout ça :?

le probleme ne vient pas de la création des variables dynamiques apparemment.

alors j'ai pas tout compris mais tu va peut etre m'éclairer un peu:
1. je ne vois pas d'initialisation de $i lors de l'utilisation de => $f{$i}

2. dans le meme sens je ne vois pas d'incrémentation de $i

Pour ces 2 question le code ne doit pas etre au complet ici ?!

3. J'ai l'impression que tu boucle sur tout ce code :-k
donc tu crée un tableau avec les "id_user", etc... comme ceci:
$tab2[] = array(..)
donc tu ajoute toujours au tableau deja existant, il faudrai revenir au bébut du tableau et écraser les valeurs qui datent du jour précédent, reset() peut convenir je pense.

tu doit donc remettre ce tableau a zéro avant cette boucle:
while ($result_res2 = mysql_fetch_array($query_res2)) 
a moins que je me suis planté sur le "bouclage" sur tout le code présent ?

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

VaN
Mammouth du PHP | 1107 Messages

14 nov. 2005, 15:26

Effectivement, il se pourrait que l'erreur vienne du fait que le tableau n'est pas remit a zero au début de chaque jour. En y reflechissant, cela correspond meme parfaitement à ce qui apparait à l'écran.

Je copie l'intégralité de mon code :
<?php
session_start();
include "connexion.php";
### Script trouvé sur PHPtools4u

############################
##  Donnée préliminaires  ##
############################

### French Version
$calendar_txt['french']['monthes'] 	    = array('', 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet',
											'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
$calendar_txt['french']['days']		    = array('Lundi', 'Mardi', 'Mercredi','Jeudi', 'Vendredi', 'Samedi',	'Dimanche');
$calendar_txt['french']['first_day']    = 0;
$calendar_txt['french']['misc'] 	    = array('Mois précédent', 'Mois suivant','Jour précédent', 'Jour suivant');


### English version
$calendar_txt['english']['monthes']     = array('', 'January', 'February', 'March',	'April', 'May', 'June', 'July', 
											'August', 'September', 'October','November', 'December');
$calendar_txt['english']['days']	    = array('Monday', 'Tuesday', 'Wednesday','Thursday', 'Friday', 'Saturday','Sunday');
$calendar_txt['english']['first_day']   = -1;
$calendar_txt['english']['misc']        = array('Previous month', 'Next month', 'Previous day', 'Next day');

function calendar($date = '') 
{
	Global $link_on_day, $PHP_SELF, $params;
	Global $HTTP_POST_VARS, $HTTP_GET_VARS;
	Global $calendar_txt;

	### Default Params
	
	$param_d['calendar_id']			= 1; // Calendar ID
	$param_d['calendar_columns'] 	= 5; // Nb of columns
	$param_d['show_day'] 			= 1; // Show the day bar
	$param_d['show_month']			= 1; // Show the month bar
	$param_d['nav_link']			= 1; // Add a nav bar below
	$param_d['link_after_date']		= 1; // Enable link on days after the current day
	$param_d['link_before_date']	= 0; // Enable link on days before the current day

	$param_d['link_on_day']			= $PHP_SELF.'?date=%%dd%%'; // Link to put on each day
	$param_d['font_face']			= 'Verdana, Arial, Helvetica'; // Default font to use
	$param_d['font_size']			= 10; // Font size in px
	
	$param_d['bg_color']			= '#FFFFFF'; 
	$param_d['today_bg_color']		= '#A9B4B3';
	$param_d['font_today_color']	= '#FFFFFF';
	$param_d['font_color']			= '#000000';
	$param_d['font_nav_bg_color']	= '#A9B4B3';
	
	$param_d['font_nav_color']		= '#FFFFFF';
	$param_d['font_header_color']	= '#FFFFFF';
	$param_d['border_color']		= '#3f6551';
	$param_d['use_img']				= 1; // Use gif for nav bar on the bottom
	
	### New params V2
	$param_d['lang']				= 'french';
	$param_d['font_highlight_color']= '#FF0000';
	$param_d['bg_highlight_color']  = '#00FF00';
	$param_d['day_mode']			= 0;
	$param_d['time_step']			= 30;
	$param_d['time_start']			= '0:00';
	$param_d['time_stop']			= '24:00';
	$param_d['highlight']			= array();
    // Can be 'hightlight' or 'text'
    $param_d['highlight_type']      = 'highlight';
    $param_d['cell_width']          = 20;
    $param_d['cell_height']         = '60px';
    $param_d['short_day_name']      = 1;
    $param_d['link_on_hour']        = $PHP_SELF.'?hour=%%hh%%';
	
	### /Params
	
	#######################
	##  Début du script  ##
	#######################
	
	### Getting all params
	while (list($key, $val) = each($param_d)) 
	{
		if (isset($params[$key])) 
		{
			$param[$key] = $params[$key];
		}
		else 
		{
			$param[$key] = $param_d[$key];
		}
	}
	
	$monthes_name = $calendar_txt[$param['lang']]['monthes'];
	$param['calendar_columns'] = ($param['show_day']) ? 7 : $param['calendar_columns'];
    
    $date = priv_reg_glob_calendar('date');
	if ($date == '') 
	{
		$timestamp = time();
	}
	else 
	{
		$month 		= substr($date, 4 ,2);
		$day 		= substr($date, 6, 2);
		$year		= substr($date, 0 ,4);
		$timestamp 	= mktime(0, 0, 0, $month, $day, $year);
	}
    
    
	$current_day 		= date("d", $timestamp);
	$current_month 		= date('n', $timestamp);
	$current_month_2	= date('m', $timestamp);
	$current_year 		= date('Y', $timestamp);
    $first_decalage 	= date("w", mktime(0, 0, 0, $current_month, 1, $current_year));
	### Sunday is the _LAST_ day
	$first_decalage		= ( $first_decalage == 0 ) ? 7 : $first_decalage;
	
	
	$current_day_index	= date('w', $timestamp) + $calendar_txt[$param['lang']]['first_day'] - 1;
	$current_day_index	= ($current_day_index == -1) ? 7 : $current_day_index;	
	$current_day_name	= $calendar_txt[$param['lang']]['days'][$current_day_index];
	$current_month_name = $monthes_name[$current_month];
	$nb_days_month 		= date("t", $timestamp);
	
	$current_timestamp 	= mktime(23,59,59,date("m"), date("d"), date("Y"));
	
	
	echo '<table width="80%" border="0" class="calendarTable" cellpadding="2" cellspacing="1">'."\n";
	
	### Displaying the current month/year
	echo '<tr>'."\n";
	echo '	<td height="30" colspan="7" align="center" class="calendarTop">'."\n";
		
	### Insert an img at will
	
	### Si le calendrier est en day_mode
	if ( $param['day_mode'] == 1 ) 
	{
		echo '		'.$current_day_name.' '.$current_day.' '.$current_month_name.' '.$current_year."\n";
	}
	else 
	{
		echo '		'.$current_month_name.' '.$current_year."\n";
	}
	echo '	</td>'."\n";
	echo '</tr>'."\n";
	
	
	### Building the table row with the days
	if ($param['show_day'] == 1 && $param['day_mode'] == 0) 
	{
		echo '<tr align="center">'."\n";
		$first_day = $calendar_txt[$param['lang']]['first_day'];
		for ($i = $first_day; $i < 7 + $first_day; $i++) 
		{
			
			$index = ( $i >= 7) ? (7 + $i): $i;
			$index = ($i < 0) ? (7 + $i) : $i;
		    
            $day_name = ( $param['short_day_name'] == 1 ) ? substr($calendar_txt[$param['lang']]['days'][$index], 0, 1) : $calendar_txt[$param['lang']]['days'][$index];
			echo '	<td height="30" class="calendarHeader"><b>'.$day_name.'</b></td>'."\n";
		}
		
		echo '</tr>'."\n";	
		$first_decalage = $first_decalage - $calendar_txt[$param['lang']]['first_day'];
		$first_decalage = ( $first_decalage > 7 ) ? $first_decalage - 7 : $first_decalage;
	}
	else 
	{
		$first_decalage = 0;	
	}
	
	echo '<tr>';
	$int_counter = 0;
	
	# Filling with empty cells at the begining
	for ($i = 1; $i < $first_decalage; $i++) 
	{
		echo '<td class="calendarDays"></td>'."\n";
		$int_counter++;
	}
	### Building the table
	for ($i = 1; $i <= $nb_days_month; $i++) 
	{	
		$f{$i} = 1;
		### Do we highlight the current day ?
		$i_2 = ($i < 10) ? '0'.$i : $i;		
		$highlight_current = ( isset($param['highlight'][date('Ym', $timestamp).$i_2]) );	
		### Row start
		if ( ($i + $first_decalage) % $param['calendar_columns'] == 2 && $i != 1) 
		{
			echo '<tr>'."\n";
			$int_counter = 0;
		}
			
		$css_2_use = ( $highlight_current ) ? 'HL' : 'Days';
        $txt_2_use = ( $highlight_current && $param['highlight_type'] == 'text') ? '<br>'.$param['highlight'][date('Ym', $timestamp).$i_2] : '';
			
        if ($i == $current_day) 
		{
		?>	
			<?php
			// récuperation de l'initiale du jour pour autoriser que les Samedi et Dimanche
			$d = date("l", mktime(0,0,0,$current_month,$i,$current_year));
			if (($d=='Friday') || ($d=='Saturday'))
			{
			?>
			<td class="calendarToday" onMouseover="javascript:this.style.background='#DDDDDD'" onMouseout="javascript:this.style.background='#A9B4B3'" onClick="location='form_calendar.php?d=<?php echo $current_year."-".$current_month."-".$i; ?>'" style="cursor:pointer;">
			<?php echo $i.$txt_2_use; ?>
			
			[b]<table width="100%"  border="1" align="center" cellpadding="0" cellpadding="0">
				<tr>
				<?php
				$date = $current_year."-".$current_month."-".$i;
				$sql_check_soiree = "SELECT id_soiree, date, pc_libres
									FROM  calendar_soiree
									WHERE date='".$date."'";
				$query_check_soiree = mysql_query($sql_check_soiree);
				if ($result_check_soiree = mysql_fetch_array($query_check_soiree))
				{
					
					$soiree = 1;
					// on recupere le nombre de pc libres pour cette soirée
					$pc_libres = $result_check_soiree['pc_libres'];
				}
				else
				{
					$soiree = 0;
					$pc_libres = '18';
				}
				
				$pc_res = 18 - $pc_libres;
				
				if ($soiree == 1)
					{
						// on recupere l'id_user de chaque reservation sur la soirée donnée
						$sql_res = 	"SELECT id_res, id_user, nb_pc, username
									FROM calendar_reservation, frm_users
									WHERE id_soiree=".$result_check_soiree['id_soiree']."
									AND calendar_reservation.id_user = frm_users.user_id
									ORDER BY id_res";
						$query_res = mysql_query($sql_res);
						// si la requete renvoie quelquechose, on execute la boucle
						while ($result_res = mysql_fetch_array($query_res))
						{
							// on recupere l'id_user de chaque reservation sur la soirée donnée 
							$tab[] = array(	"username"=>$result_res['username'],
											"nb_pc"=>$result_res['nb_pc'],
											"id_user"=>$result_res['id_user']
											);
						}
						// si la requete renvoie quelquechose, on execute la boucle 
						if ($query_res) 
						{      
							foreach($tab as $result) 
							{
								if (!isset($b{$i}))
								{
									$b{$i} = 1;
								}
									
								echo $b{$i}." - ".$result['nb_pc'];
								for ($a{$i}=$b{$i}; $a{$i}<=($result['nb_pc']+$b{$i}-1); $a{$i}++) 
								{ 
									
									if (($a{$i} == '7') || ($a{$i} == '13'))
									// le nombre de case maximum du tableau est de 18, 
									// pas la peine d'aller plus loin donc.
									{ 
										echo "<tr>\n";
									} 
									echo "<td title=\"r&eacute;serv&eacute; par ".$result['username']."\"><img src=\"img/pc_res.gif\" width=\"15\">a{$i} = ".$a{$i}."<br>b{$i} = ".$f=$b{$i}."</td>\n"; 
								}
								$b{$i} = $a{$i};
							}                  
						}
						
					}
				
				?>
				</tr>
			</table>[/b]
  				
			<?php
			}
			else
			{
			?>
			<td class="calendarToday">
			<?php echo $i.$txt_2_use; ?>
			<?php
			}
			?>
			</td>
		<?php
		}
		elseif ($param['link_on_day'] != '') 
		{
			
			$loop_timestamp = mktime(0,0,0, $current_month, $i, $current_year);
			if (( ($param['link_after_date'] == 0) && ($current_timestamp < $loop_timestamp)) || (($param['link_before_date'] == 0) && ($current_timestamp >= $loop_timestamp)) )
			{
			?>	
				<?php
				// récuperation de l'initiale du jour pour autoriser que les Samedi et Dimanche
				$d = date("l", mktime(0,0,0,$current_month,$i,$current_year));
				if (($d=='Friday') || ($d=='Saturday'))
				{
				?>
			
				<td class="calendar<?php echo $css_2_use; ?>" onMouseover="javascript:this.style.background='#DDDDDD'" onMouseout="javascript:this.style.background='#FFFFFF'" onClick="location='form_calendar.php?d=<?php echo $current_year."-".$current_month."-".$i; ?>'" style="cursor:pointer;">
				<?php echo $i.$txt_2_use; ?>
			
				
				<br />
				[b]<table width="100%"  border="0" align="center" cellpadding="0" cellpadding="0">
  					<tr>
					<?php
					$date = $current_year."-".$current_month."-".$i;
					$sql_check_soiree = "SELECT id_soiree, date, pc_libres
										FROM  calendar_soiree
										WHERE date='".$date."'";
					$query_check_soiree = mysql_query($sql_check_soiree);
					if ($result_check_soiree = mysql_fetch_array($query_check_soiree))
					{
						
						$soiree = 1;
						// on recupere le nombre de pc libres pour cette soirée
						$pc_libres = $result_check_soiree['pc_libres'];
					}
					else
					{
						$soiree = 0;
						$pc_libres = '18';
					}
					
					$pc_res = 18 - $pc_libres;
					
					if ($soiree == 1)
					{
						// on recupere l'id_user de chaque reservation sur la soirée donnée
						$sql_res1 = 	"SELECT id_res, id_user, nb_pc, username
									FROM calendar_reservation, frm_users
									WHERE id_soiree=".$result_check_soiree['id_soiree']."
									AND calendar_reservation.id_user = frm_users.user_id
									ORDER BY id_res";
						$query_res1 = mysql_query($sql_res1);
						// si la requete renvoie quelquechose, on execute la boucle
						while ($result_res1 = mysql_fetch_array($query_res1))
						{
							reset($tab1);
							// on recupere l'id_user de chaque reservation sur la soirée donnée 
							$tab1[] = array(	"username"=>$result_res1['username'],
											"nb_pc"=>$result_res1['nb_pc'],
											"id_user"=>$result_res1['id_user']
											);
						}
						// si la requete renvoie quelquechose, on execute la boucle 
						if ($query_res1) 
						{      
							foreach($tab1 as $result1) 
							{
								if (!isset($v{$i}))
								{
									$v{$i} = 1;
								}
									
								echo $v{$i}." - ".$result1['nb_pc'];
								for ($u{$i}=$v{$i}; $u{$i}<=($result1['nb_pc']+$v{$i}-1); $u{$i}++) 
								{ 
									
									if (($u{$i} == '7') || ($u{$i} == '13'))
									// le nombre de case maximum du tableau est de 18, 
									// pas la peine d'aller plus loin donc.
									{ 
										echo "<tr>\n";
									} 
									echo "<td title=\"r&eacute;serv&eacute; par ".$result1['username']."\"><img src=\"img/pc_res.gif\" width=\"15\">u{$i} = ".$u{$i}."<br>v{$i} = ".$v{$i}."</td>\n"; 
								}
								$v{$i} = $u{$i};
							}                  
						}
						
					}
					?>
  					</tr>
				</table>[/b]
				<?php
				}
				else
				{
				?>
				<td class="calendar<?php echo $css_2_use; ?>">
				<?php echo $i.$txt_2_use; ?>
				<?php
				}
				?>
			</td>
			<?php
			}
			else 
			{
			?>
			
				<?php
				// récuperation de l'initiale du jour pour autoriser que les Samedi et Dimanche
				$d = date("l", mktime(0,0,0,$current_month,$i,$current_year));
				if (($d=='Friday') || ($d=='Saturday'))
				{
				?>
				<td class="calendar<?php echo $css_2_use; ?>" onMouseover="javascript:this.style.background='#DDDDDD'" onMouseout="javascript:this.style.background='#FFFFFF'" onClick="location='form_calendar.php?d=<?php echo $current_year."-".$current_month."-".$i; ?>'" style="cursor:pointer;">
				<?php echo $i.$txt_2_use; ?>
			
			
				[b]<table width="100%"  border="0" align="center" cellpadding="0" cellpadding="0">
  					<tr>
					<?php
					$date = $current_year."-".$current_month."-".$i;
					$sql_check_soiree = "SELECT id_soiree, date, pc_libres
										FROM  calendar_soiree
										WHERE date='".$date."'";
					$query_check_soiree = mysql_query($sql_check_soiree);
					if ($result_check_soiree = mysql_fetch_array($query_check_soiree))
					{
						
						$soiree = 1;
						// on recupere le nombre de pc libres pour cette soirée
						$pc_libres = $result_check_soiree['pc_libres'];
					}
					else
					{
						$soiree = 0;
						$pc_libres = '18';
					}
					
					$pc_res = 18 - $pc_libres;
					
					if ($soiree == 1)
					{
						// on recupere l'id_user de chaque reservation sur la soirée donnée
						$sql_res2 = 	"SELECT id_res, id_user, nb_pc, username
									FROM calendar_reservation, frm_users
									WHERE id_soiree=".$result_check_soiree['id_soiree']."
									AND calendar_reservation.id_user = frm_users.user_id
									ORDER BY id_res";
						$query_res2 = mysql_query($sql_res2);
						// si la requete renvoie quelquechose, on execute la boucle
						reset($tab2);
						while ($result_res2 = mysql_fetch_array($query_res2))
						{
						
							// on recupere l'id_user de chaque reservation sur la soirée donnée 
							$tab2[] = array(	"username"=>$result_res2['username'],
											"nb_pc"=>$result_res2['nb_pc'],
											"id_user"=>$result_res2['id_user']
											);
						}
						// si la requete renvoie quelquechose, on execute la boucle 
						if ($query_res2) 
						{
							
							$op = 1;
							foreach($tab2 as $result2) 
							{
								//$f{$i} = 1;
								
								if (!isset($f{$i}))
								{
									$f{$i} = 1;
								}
									
								echo $f{$i}." - ".$result2['nb_pc'];
								echo "<b>".$op."</b>";
								// + $f{$i} !!!!!
								if ($op == 1)
								{
									echo "pwet";
									for ($e{$i}=$f{$i}; $e{$i}<=($result2['nb_pc']+($f{$i}-1)); $e{$i}++) 
									{ 
										if (($e{$i} == '7') || ($e{$i} == '13'))
										// le nombre de case maximum du tableau est de 18, 
										// pas la peine d'aller plus loin donc.
										{ 
											echo "<tr>\n";
										} 
										echo "<td title=\"r&eacute;serv&eacute; par ".$result2['username']."\"><img src=\"img/pc_res.gif\" width=\"15\">e{$i} = ".$e{$i}."<br>f{$i} = ".$f{$i}."</td>\n"; 
									}
								}
								else
								{
									echo "ppwet";
									for ($e{$i}=$f{$i}; $e{$i}<=(($result2['nb_pc']+$f{$i})-1); $e{$i}++) 
									{ 
										if (($e{$i} == '7') || ($e{$i} == '13'))
										// le nombre de case maximum du tableau est de 18, 
										// pas la peine d'aller plus loin donc.
										{ 
											echo "<tr>\n";
										} 
										echo "<td title=\"r&eacute;serv&eacute; par ".$result2['username']."\"><img src=\"img/pc_res.gif\" width=\"15\">e{$i} = ".$e{$i}."<br>f{$i} = ".$f{$i}."</td>\n"; 
									}
								
								}
								
								// for ($e{$i}=$f{$i}; $e{$i}<=($result2['nb_pc']+($f{$i}-1)); $e{$i}++) 
								
								$f{$i} = $e{$i};
								$op++;
							}                  
						} 
					}
					?>
  					</tr>
				</table>[/b]
				<?php
				}
				else
				{
				?>
				<td class="calendar<?php echo $css_2_use; ?>">
				<?php echo $i.$txt_2_use; ?>
				<?php
				}
				?>
			</td>
			<?php
			}
		}
		else 
		{
			echo '<td class="calendar'.$css_2_use.'">'.$i.'</td>'."\n";
		}	
		$int_counter++;
			
		### Row end
		if (  ($i + $first_decalage) % ($param['calendar_columns'] ) == 1 )
		{
			echo '</tr>'."\n";	
		}
	}
	$cell_missing = $param['calendar_columns'] - $int_counter;
		
	for ($i = 0; $i < $cell_missing; $i++)
	{
		echo '<td class="calendarDays"></td>'."\n";
	}
	echo '</tr>'."\n";
	
	### Display the nav links on the bottom of the table
	if ($param['nav_link'] == 1) 
	{
		$previous_month = date("Ymd", 	
								mktime( 12, 
										0, 
										0, 
										($current_month - 1),
										$current_day,
										$current_year
									   )
								);
								
		$previous_day 	= date("Ymd", 	
								mktime( 12, 
										0, 
										0, 
										$current_month,
										$current_day - 1,
										$current_year
									   )
								);
		$next_day 		= date("Ymd", 	
								mktime( 1, 
										12, 
										0, 
										$current_month,
										$current_day + 1,
										$current_year
									   )
								);
		$next_month		= date("Ymd", 	
								mktime( 1, 
										12, 
										0, 
										$current_month + 1,
										$current_day,
										$current_year
									   )
								);
		

		if ($param['use_img']) 
		{
			$g 	= '<img src="img/g.gif" border="0">';
			$gg = '<img src="img/gg.gif" border="0">';
			$d 	= '<img src="img/d.gif" border="0">';
			$dd = '<img src="img/dd.gif" border="0">';
		}
		else 
		{
			$g 	= '<';
			$gg = '<<';
			$d = '>';
			$dd = '>>';
		}

		if ( ($param['link_after_date'] == 0) 
				&& ($current_timestamp < mktime(0,0,0, $current_month, $current_day+1, $current_year))
			) 
		{
			$next_day_link = '';
		}
		else 
		{
			$next_day_link 		= '<a href="'.$PHP_SELF.'?date='.$next_day.'" title="'.$calendar_txt[$param['lang']]['misc'][3].'">'.$d.'</a>'."\n";
		}

		if ( ($param['link_before_date'] == 0) 
				&& ($current_timestamp > mktime(0,0,0, $current_month, $current_day-1, $current_year))
			)
		{
			$previous_day_link = '';
		}
		else 
		{
			$previous_day_link 		= '<a href="'.$PHP_SELF.'?date='.$previous_day.'" title="'.$calendar_txt[$param['lang']]['misc'][2].'">'.$g.'</a>'."\n";
		}
		
		if ( ($param['link_after_date'] == 0) 
				&& ($current_timestamp < mktime(0,0,0, $current_month+1, $current_day, $current_year))
			) 
		{
			$next_month_link = '';		
		}
		else 
		{
			$next_month_link 	= '<a href="'.$PHP_SELF.'?date='.$next_month.'" title="'.$calendar_txt[$param['lang']]['misc'][1].'">'.$dd.'</a>'."\n";
		}

		if  ( ($param['link_before_date'] == 0) 
				&& ($current_timestamp >= mktime(0,0,0, $current_month, $current_day, $current_year))
			)
		{
			$previous_month_link = '';		
		}
		else 
		{
			$previous_month_link 	= '<a href="'.$PHP_SELF.'?date='.$previous_month.'" title="'.$calendar_txt[$param['lang']]['misc'][0].'">'.$gg.'</a>'."\n";
		}
		
		echo '<tr>'."\n";
		echo '	<td colspan="'.$param['calendar_columns'].'" class="calendarBottom">'."\n";
		echo '		<table width="100%" border="0" >';
		echo '		<tr>'."\n";
		echo '			<td width="50%" align="left" style="padding-left:20px;">'."\n";
		echo 					$previous_month_link;
		echo '			</td>'."\n";
		echo '			<td width="50%" align="right" style="padding-right:20px;">'."\n";
		echo 					$next_month_link;
		echo '			</td>'."\n";
		echo '		</tr>';
		echo '		</table>';
		echo '	</td>'."\n";
		echo '</tr>'."\n";
		
	}
	echo '</table>'."\n";
	
}

function priv_reg_glob_calendar($var) 
{
	Global $HTTP_GET_VARS, $HTTP_POST_VARS;
	
	if (isset($HTTP_GET_VARS[$var])) 
	{
		return $HTTP_GET_VARS[$var];
	}
	elseif (isset($HTTP_POST_VARS[$var])) 
	{
		return $HTTP_POST_VARS[$var];
	}
	else 
	{
		return '';
	}	
}
?>
Je redefinie $f{$i} à 0 au début de la boucle qui crée chaque jour, après le commentaire ### Building the table

en gras, les passages importants. Tu remarqueras qu'il y'a à peu pres 3 fois le même code qui se repete : le premier morceau correspond au jour en cours, le deuxieme morceau aux jours précédents, le troisième morceau aux jours suivants.

J'ai essay d'inclure le reset() du tableau dans la partie des jours précédents, et il me sort une erreur :
while ($result_res1 = mysql_fetch_array($query_res1))
						{
							reset($tab1);
							// on recupere l'id_user de chaque reservation sur la soirée donnée 
							$tab1[] = array(	"username"=>$result_res1['username'],
											"nb_pc"=>$result_res1['nb_pc'],
											"id_user"=>$result_res1['id_user']
											);
					}
Warning: reset(): Passed variable is not an array or object in c:\program files\easyphp1-7\www\calendrier\calendrier2.php on line 349

En tout cas merci de t'etre plongé un peu dans ce probleme : )

Eléphant du PHP | 153 Messages

14 nov. 2005, 15:49

Je n'ai pas lu ton code mais essaye au lieu de reset

d'écrire
$tab1=array();
Cela videra ton tableau et en créera un nouveau

VaN
Mammouth du PHP | 1107 Messages

14 nov. 2005, 16:05

Oui c'est bon. Nouveau probleme qui apparait :

Je vous simule un test :
Je fais un reservation de 2 pc pour un jour (appelons le X) anterieur au jour actuel -> la réservation se fait correctement, et mes 2 pc reservés s'affichent dans le jour X.
Je fais ensuite une reservation de 2 pc pour un jour (appelons le Y) ulterieur au jour actuel -> la reservation se fait correctement et mes 2 pc reservés s'affichent dans le jour Y.
Puis je refait une réservation de 3 pc pour le jour X, et là, ces 3 pc s'enregistre dans le jour Y : /

Comme si il y'avait une interaction entre mon morceau de code générant les jours précédents les jours courants, et celui générant les jours suivants le jour courant.
Pourtant dans la base de données, la derniere reservation est bien enregistrée pour le jour X. C'est donc à l'affichage que le conflit se fait.

EDIT : il semble après quelques test que l'erreur vienne du SQL finalement. je vais voir ce que je peux faire et vous tiens au courant.

EDIT 2 : Erreur trouvé : dans mon formulaire, lorsque je selectionnais l'ID de la soirée cliquée, je recuperais cette ID soirée avec SELECT MAX(), d'où le probleme. Je crois que mtnt, mon calendrier marche à la perfection, et rend absolument comme je souhaitais qu'il rende.

Merci beaucoup à tous ceux qui m'ont aidé à finaliser cet outil, sur les différents thread que j'ai ouvert là dessus.

Une fois l'outil operationnel à 100% (changements graphique et administration simpliste à mettre en place, je penses que je viendrais poster le code ici, il pourra sûrement servir à certains d'entre vous qui souhaite utiliser un calendrier de reservation.