probleme de boucle de parcours de tableau php et derecuperation de variable

Eléphant du PHP | 123 Messages

09 avr. 2009, 10:07

bonjour voila le probleme

mon code est structuré de la sorte:

while (unjour <= au dernier jour)
{
       je construit un tableau html que je remplis a partir d 'un tableau php
       while ( donnee= mysql fetch array...)
                {
                    if (une date affichée en dur est = à une date recup
                         je recupere les données en fonction de la date clé primaire
                }
     while donnee2=mysql fetch array
               {
                 je fais une liste de choix qui va dans une cellule du tableau
               }
//je repete n fois le nombre de colonnes avec differentes requetes et donc differentes liste de choix
//je repete n fois le nbre de jour
}
mon probleme j ai bien les combobox avec des données dedans mais la valeur de de base de chaque liste de choix est censée etre la valeure presente dans la base de donnée quand il y en a une. je n y arrive pas a cause des while et des fetch array que je n arrive clairement pas a passer pour recup la valeur quand j en ai besoin quelque soit l endroit


edit je sent que c est pas clair donc meme si c est interdit je vais mettre mon code meme s il il fait beaucoup de ligne.

<?php
include ('fonction.php');
connection();
basededonneesplanning();

 function getPublicHoliday($year, $month, $day, $departement = false) {
    $array = array();
    for ($i = 1; $i < 13; ++$i) {
      $indice = ($i < 10) ? '0'.$i : $i;
      $array["$indice"] = array();
    }
    // National public holidays
    $array['01']['01']  = 'Jour de l\'an';
    $array['05']['01']  = 'Fête du travail';
    $array['05']['08']  = 'Armistice 39-45';
    $array['07']['14']  = 'Fête nationale';
    $array['08']['15']  = 'Assomption';
    $array['11']['01']  = 'Toussaint';
    $array['11']['11']  = 'Armistice 14-18';
    $array['12']['25']  = 'Noël';
    $timestamp = mktime(0, 0, 0, 03, 21 + easter_days($year) + 1, $year);
    $array[date('m', $timestamp)][date('d', $timestamp)]  = 'Lundi de Pâques';
    $timestamp = mktime(0, 0, 0, 03, 21 + easter_days($year) + 39, $year);
    $array[date('m', $timestamp)][date('d', $timestamp)]  = 'Jeudi de l\'ascension';
    $timestamp = mktime(0, 0, 0, 03, 21 + easter_days($year) + 50, $year);
    $array[date('m', $timestamp)][date('d', $timestamp)]  = 'Lundi de Pentecôte';
    // Spécial Public holidays
    if ($departement && ($departement == '57' || $departement == '67' || $departement == '68')) {
      $timestamp = mktime(0, 0, 0, 03, 21 + easter_days($year) - 2, $year);
      $array[date('m', $timestamp)][date('d', $timestamp)]  = 'Vendredi saint';
      $array['12']['26']  = 'Lendemain de Noël';
    }
    if ($departement && $departement == '971')
      $array['05']['27']  = 'Abolition de l\'esclavage';
    if ($departement && $departement == '972')
      $array['05']['22']  = 'Abolition de l\'esclavage';
    if ($departement && $departement == '973')
      $array['06']['10']  = 'Abolition de l\'esclavage';
    if ($departement && $departement == '974')
      $array['12']['20']  = 'Abolition de l\'esclavage';
    // Check if the date is a public holiday
    $monthToPrint = ($month < 10) ? '0'.$month : $month;
    $dayToPrint   = ($day < 10)   ? '0'.$day   : $day;
    if (isset($array["$monthToPrint"]) && isset($array["$monthToPrint"]["$dayToPrint"]))
      return $array["$monthToPrint"]["$dayToPrint"];
    return false;
  }




	
	?>
	<style type="text/css">
div.tableContainer {
	<!--width: 65%;		/* table width will be 99% of this*/
	height: 295px; 	/* must be greater than tbody*/-->
	overflow: auto;
	margin: 0 auto;
	}

table {
	width: 99%;		/*100% of container produces horiz. scroll in Mozilla*/
	border: none;
	background-color: #f7f7f7;
	}
	
table>tbody	{  /* child selector syntax which IE6 and older do not support*/
	overflow: auto; 
	height: 765px;
	overflow-x: hidden;
	}
	
thead tr	{
	position:relative; 
	top: expression(offsetParent.scrollTop); /*IE5+ only*/
	}
	
thead td, thead th {
	text-align: center;
	font-size: 14px; 
	background-color: oldlace;
	color: steelblue;
	font-weight: bold;
	border-top: solid 1px #d8d8d8;
	}	
	
td	{
	<!--color: #000;-->
	padding-right: 2px;
	font-size: 12px;
	text-align: center;
	
td:last-child {padding-right: 20px;} /*prevent Mozilla scrollbar from hiding cell content*/

</style>

<style type="text/css" media="print">
div.tableContainer {overflow: visible;	}
table>tbody	{overflow: visible; }
td {height: 14pt;} /*adds control for test purposes*/
thead td	{font-size: 11pt;	}

	
thead	{display: table-header-group;	}

thead th, thead td	{position: static; } 

thead tr	{position: static; } /*prevent problem if print after scrolling table*/ 



</style>

<div id="container">
<div class="tableContainer">
	
	<!---->
	

	<table border align="center" rules="cols" frame="border">
	<thead class="fixedHeader">

	<tr>
		<th>date</th>
		<th>infos générales</th>
		<th>module</th>
		<th>theme</th>
		<th>formateur1</th>
		<th>formateur2</th>
		<th>formateur3</th>
		<th>salle</th>
		
		
		</tr>
		</thead> 
		<tbody>
	<?
$requete = mysql_query("SELECT DateDebutFormation,DateFinFormation FROM FORMATION where NumeroFormation=7")or die ('Erreur SQL : '.mysql_error());
$requete2=mysql_query("SELECT DesignationModule FROM module ")or die ('Erreur SQL : '.mysql_error());
$requete3=mysql_query("SELECT DesignationTheme FROM theme ")or die ('Erreur SQL : '.mysql_error());
$requete4a=mysql_query("SELECT NomFormateur FROM formateur ")or die ('Erreur SQL : '.mysql_error());
$requete4b=mysql_query("SELECT NomFormateur FROM formateur ")or die ('Erreur SQL : '.mysql_error());
$requete4c=mysql_query("SELECT NomFormateur FROM formateur ")or die ('Erreur SQL : '.mysql_error());
$requete5=mysql_query("SELECT DesignationSalle FROM salle ")or die ('Erreur SQL : '.mysql_error());
$requete6=mysql_query("SELECT * FROM cours ")or die ('Erreur SQL : '.mysql_error());

while($donnee=mysql_fetch_row($requete))
{
$datefinale=$donnee[1];
$datededebut=$donnee[0];
}
$datefinale=explode('-',$datefinale);
$datefinale=mktime ( 0, 0, 0, $datefinale[1], $datefinale[2], $datefinale[0]);

$datededebut=explode('-',$datededebut);
$datededebut=mktime ( 0, 0, 0, $datededebut[1], $datededebut[2], $datededebut[0]);
$nextday=$datededebut;


$demij="matin";
$i=0;
while ($nextday <= $datefinale)//affichage de tous les jours de la semaine sauf samedi et dimanche
	{



	
	if (date('l',$nextday)!=='Saturday' and date('l',$nextday)!=='Sunday')
		{
			$annees=intval(date("Y",$nextday));
			$mois=intval(date("m",$nextday));
			$jour=intval(date("d",$nextday));

			if (getPublicHoliday($annees,$mois,$jour))//censé ne pas afficher férié quand il y en a un
				{
				
				$nextday=$nextday+(24 * 60 * 60);
				}
			else
				{
				echo "<tr><td>";
				if (date ('l',$nextday) =="Monday")
				$jj= "lundi";
				if (date ('l',$nextday) =="Tuesday")
				$jj="mardi";
				if (date ('l',$nextday) =="Wednesday")
				$jj= "mercredi";
				if (date ('l',$nextday) =="Thursday")
				$jj= "jeudi";
				if (date ('l',$nextday) =="Friday")
				$jj= "vendredi";
				
				echo $jj. date(' d/m/Y',$nextday).$demij;echo "</td>";
				
				$datec=date(' Y-m-d',$nextday);
				if ($demij== "matin")
				   {
				$heurec=8;
				   }
				else
					{
					$heurec=14;
					}
while ($donnee = mysql_fetch_array($requete6) )
		{
			// echo $donnee[0];echo"<br>"; echo $datec;echo"<br>"; echo $donnee[1];echo"<br>"; echo $heurec;echo"<br>";
			if (settype($donnee[0],"string")==settype($datec,"string") and $donnee[1]==$heurec)
			    {
				  echo "ici";
				  echo"<br>";
				  // a faire poour demain recup les noms ou designations a partir de ces numeros
				  $valforma=$donnee[2];
				  $valsal=$donnee[3];
				  $requete7 = mysql_query("SELECT DesignationSalle FROM salle where NumeroSalle=".$valsal."")or die ('ytf');// ('Erreur SQL : '.mysql_error());
				  while($d7=mysql_fetch_row($requete7))
						{
							$valsal=$d7[0];
						}
				  $valmod=$donnee[4];
				  $requete8 = mysql_query("SELECT DesignationModule FROM module where NumeroModule=".$valmod."")or die ('ytf');// ('Erreur SQL : '.mysql_error());
				  while($d8=mysql_fetch_row($requete8))
						{
							$valmod=$d8[0];
						}
				  $valthe=$donnee[5];
				  $requete9 = mysql_query("SELECT DesignationTheme FROM theme where NumeroTheme=".$valthe."")or die ('ytf');// ('Erreur SQL : '.mysql_error());
				  while($d9=mysql_fetch_row($requete9))
						{
							$valthe=$d9[0];
						}
				  $valform1=$donnee[6];
				  $requete10 = mysql_query("SELECT NomFormateur FROM formateur where NumeroFormateur=".$valform1.";")or die ('ytf');// ('Erreur SQL : '.mysql_error());
				  while($d10=mysql_fetch_row($requete10))
						{
							$valform1=$d10[0];
						}
						
						
						
						if (isset($donnee[7]))
						{
				  $valform2=$donnee[7];
				  $requete11 = mysql_query("SELECT NomFormateur FROM formateur where NumeroFormateur=".$valform2.";")or die ('Erreur SQL : '.mysql_error());
				   while($d11=mysql_fetch_row($requete11))
						{

							$valform2=$d11[0];
						}
						}
						else 
						{ 
						$valform2="";
						}
						
						
						
						if(isset($donnee[8]))
						{
							$valform3=$donnee[8];
							$requete12 = mysql_query("SELECT NomFormateur FROM formateur where NumeroFormateur=".$valform3."")or die ('ytf');// ('Erreur SQL : '.mysql_error());
							while($d12=mysql_fetch_row($requete12))
								{
									$valform3=$d12[0];
								}
						}
						else 
						{ 
							$valform3="";
						}
				  
				}
				
			else
				{
					echo "là";
					echo"<br>";
					$valforma="";
					$valsal="";
					$valmod="";
					$valthe="";
					$valform1="";
					$valform2="";
					$valform3="";
				}
				echo $valsal;
				echo"  ";
				echo $valmod;
				echo"  ";
				echo $valthe;
				echo"  ";
				echo $valform1;
				echo"  ";
				echo $valform2;
				echo"  ";
				echo $valform3;
		}
				echo "<input type='hidden' name='index".$i."' value=".$datec.">";
				echo"<input type='hidden' name='index1".$i."' value=".$heurec.">";
				echo "<td></td><td>";
				
				
				
				echo'<select name="module'.$i.'">';
				
				echo"<option value=".$valmod.">".$valmod."</option>";
				
				mysql_data_seek($requete2,0);
while ($aff2 = mysql_fetch_array($requete2) )
{
  echo "<option value=".$aff2['DesignationModule']."> ".$aff2['DesignationModule']." </option>";
 }
 echo"</select>";
 
 
				echo "</td><td>";
				
				
				
				echo'<select name="theme'.$i.'">';
				echo "<option value=".$valthe.">".$valthe."</option>";
				mysql_data_seek($requete3,0);
while ($aff3 = mysql_fetch_array($requete3) )
{
  echo "<option value=".$aff3['DesignationTheme']."> ".$aff3['DesignationTheme']." </option>";
 }
 echo"</select>";
 
 
				echo "</td><td>";
				
				
				echo'<select name="f1'.$i.'">';
				echo "<option value=".$valform1.">".$valform1."</option>";
				mysql_data_seek($requete4a,0);
while ($affa = mysql_fetch_array($requete4a) )
{
  echo "<option value=".$affa['NomFormateur']."> ".$affa['NomFormateur']." </option>";
 }
 echo"</select>";
				echo "</td><td>";
				
				echo'<select name="f2'.$i.'">';
				echo "<option value=".$valform2.">".$valform2."</option>";
				 mysql_data_seek($requete4b,0);
while ($affb = mysql_fetch_array($requete4b) )
{
  echo "<option value=".$affb['NomFormateur']."> ".$affb['NomFormateur']." </option>";
 }
 echo"</select>";
				
				echo"</td><td>";
				
				echo'<select name="f3'.$i.'">';
				echo "<option value=".$valform3.">".$valform3."</option>";
				 mysql_data_seek($requete4c,0);
while ($affc = mysql_fetch_array($requete4c) )
{
  echo "<option value=".$affc['NomFormateur']."> ".$affc['NomFormateur']." </option>";
 }
 echo"</select>";
				
				echo"</td><td>";
				
				echo'<select name="salle'.$i.'">';
				echo "<option value=".$valsal.">".$valsal."</option>";
				mysql_data_seek($requete5,0);
while ($aff5 = mysql_fetch_array($requete5) )
{
  echo "<option value=".$aff5['DesignationSalle']."> ".$aff5['DesignationSalle']." </option>";
 }
 echo"</select>";
				
				
				
				echo"</td></tr>";
				
				
			
				
				
				
				echo"</td>";
				$i=$i+1;
				if($demij =="matin")
				{
				
				$demij="après midi";
				}
				else
				{
				$nextday=$nextday+(24 * 60 * 60);
				$demij ="matin";
				}
				}
					
		}
	if (date('l',$nextday)=='Saturday' or date('l',$nextday)=='Sunday')
		{
			$nextday=$nextday+(24 * 60 * 60);
		}
	}
	
?>
</tbody>
	</table>

Mammouth du PHP | 1339 Messages

09 avr. 2009, 10:26

J'ai voulu t'aider mais ton code est tellement brouillon que j'ai pas su par ou commencer.
3/4 du cote est inutile car il peut etre simplifier...

Je t'en montre un bout :
$requete = mysql_query("SELECT UNIX_TIMESTAMP(DateDebutFormation) as TimeDateDebutFormation, UNIX_TIMESTAMP(DateFinFormation) as TimeDateFinFormation FROM FORMATION WHERE NumeroFormation=7")or die ('Erreur SQL : '.mysql_error()); 
Pouf tu gagnes 6 lignes de codes.

Tu peux remplacer :
if (date('l',$nextday)!=='Saturday' and date('l',$nextday)!=='Sunday') 
par
if(date('N', $nextday) <= 5) 


replacer
                if (date ('l',$nextday) =="Monday")
                $jj= "lundi";
                if (date ('l',$nextday) =="Tuesday")
                $jj="mardi";
                if (date ('l',$nextday) =="Wednesday")
                $jj= "mercredi";
                if (date ('l',$nextday) =="Thursday")
                $jj= "jeudi";
                if (date ('l',$nextday) =="Friday")
                $jj= "vendredi";
par


$jourFrancais = ('Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi');
$jj = $JourFrancais[date('N', $nextday)];
Bref tu as pas mal de base a revoir avant de te lancer dans ca ... Et j'ai rarement vu autant de commande SQL :)
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphant du PHP | 123 Messages

09 avr. 2009, 10:42

snif et je suppose que tu m'en as montré qu'un echantillon...et tu n'aurais quand meme pas un debut de solution au probleme en cours?


et le deuxieme changement ne marche pas comme ça il ne recopnnais pas $jourFrancais dans la deuxieme ligne
mais c est pas grave ça...

par contre désolé pour les commandes sql je pense ne pouvoir rien y faire il y a des liaisons et des combobox de partout dans le planning

sinon pour le probleme actuel est que je recupere les valeurs des differentes combobox ici:
while ($donnee = mysql_fetch_array($requete6) )
			{
			// echo $donnee[0];echo"<br>"; echo $datec;echo"<br>"; echo $donnee[1];echo"<br>"; echo $heurec;echo"<br>";
			if (settype($donnee[0],"string")==settype($datec,"string") and $donnee[1]==$heurec)
			    {
				  echo "ici";
				  echo"<br>";
				  // a faire poour demain recup les noms ou designations a partir de ces numeros
				  $valforma=$donnee[2];
				  $valsal=$donnee[3];
				  $requete7 = mysql_query("SELECT DesignationSalle FROM salle where NumeroSalle=".$valsal."")or die ('ytf');// ('Erreur SQL : '.mysql_error());
				  while($d7=mysql_fetch_row($requete7))
						{
							$valsal=$d7[0];
						}
				  $valmod=$donnee[4];
				  $requete8 = mysql_query("SELECT DesignationModule FROM module where NumeroModule=".$valmod."")or die ('ytf');// ('Erreur SQL : '.mysql_error());
				  while($d8=mysql_fetch_row($requete8))
						{
							$valmod=$d8[0];
						}
				  $valthe=$donnee[5];
				  $requete9 = mysql_query("SELECT DesignationTheme FROM theme where NumeroTheme=".$valthe."")or die ('ytf');// ('Erreur SQL : '.mysql_error());
				  while($d9=mysql_fetch_row($requete9))
						{
							$valthe=$d9[0];
						}
				  $valform1=$donnee[6];
				  $requete10 = mysql_query("SELECT NomFormateur FROM formateur where NumeroFormateur=".$valform1.";")or die ('ytf');// ('Erreur SQL : '.mysql_error());
				  while($d10=mysql_fetch_row($requete10))
						{
							$valform1=$d10[0];
						}
						
						
						
						if (isset($donnee[7]))
						{
				  $valform2=$donnee[7];
				  $requete11 = mysql_query("SELECT NomFormateur FROM formateur where NumeroFormateur=".$valform2.";")or die ('Erreur SQL : '.mysql_error());
				   while($d11=mysql_fetch_row($requete11))
						{

							$valform2=$d11[0];
						}
						}
						else 
						{ 
						$valform2="";
						}
						
						
						
						if(isset($donnee[8]))
						{
							$valform3=$donnee[8];
							$requete12 = mysql_query("SELECT NomFormateur FROM formateur where NumeroFormateur=".$valform3."")or die ('ytf');// ('Erreur SQL : '.mysql_error());
							while($d12=mysql_fetch_row($requete12))
								{
									$valform3=$d12[0];
								}
						}
						else 
						{ 
							$valform3="";
						}
				  
				}
				
			else
				{
					echo "là";
					echo"<br>";
					$valforma="";
					$valsal="";
					$valmod="";
					$valthe="";
					$valform1="";
					$valform2="";
					$valform3="";
				}
				echo $valsal;
				echo"  ";
				echo $valmod;
				echo"  ";
				echo $valthe;
				echo"  ";
				echo $valform1;
				echo"  ";
				echo $valform2;
				echo"  ";
				echo $valform3;
			}
cette boucle est dans le premier while (voir plus haut)
qui sert a construire le tableau et les listes de choix
le probleme c est que je n arrive pas a placer ce while dans le reste de mon code pour recup les variables au bon endroit c est a dire dans la premiere valeure de la combobox
j ai essayé de placer la boucle ailleurs mais je me sers du premier while pour la condition (comparaison avec la date qui change a chaque grand while)

une idée ?