Page 1 sur 2

Tableau

Posté : 05 sept. 2006, 09:03
par Dom!
Bonjourà tous.

J'ai un tableau dynamique comme ceci :
<? 			
for($i=1;$i<=$nb;$i++){
print '<tr> ';
print '<td bgcolor="#000099"><input name="date_aller'.$i.'" type="text" class="champ" size="10" maxlength="10"></td>';
print '<td bgcolor="#000099"><input name="no_match_aller'.$i.'" type="text" class="champ" size="4"></td>';
print '<td bgcolor="#000099"><input name="visiteur_retour'.$i.'" type="text" class="champ" ></td>';
print '<td bgcolor="#000099"><input name="visiteur_aller'.$i.'" type="text" class="champ" ></td>';
print '<td bgcolor="#000099"><input name="no_match_retour'.$i.'" type="text" class="champ" size="4" maxlength="4"></td>';
print '<td bgcolor="#000099"><input name="date_retour'.$i.'" type="text" class="champ" size="10" maxlength="10"></td>';
print '</tr>';
}			
?>
Je souhaite, à la place de "visiteur_aller", mettre une liste déroulante comportant ceci :
<? 
if (isset($id_equipe) == 0)
$id_equipe = 0;				
$sqldip = 'select abreviation, nom, id_equipe from tb_equipes order by sexe, abreviation';
// $nbsql += 1;
if ($resselectdip = mysql_query($sqldip)) {
while ($selectdip = mysql_fetch_array($resselectdip))
{                     
if ($id_equipe == $selectdip["id_equipe"])
$temp = " selected";
else 
$temp = "";
print '<option value="'.$selectdip["id_equipe"].'" '.$temp.'>'.$selectdip["abreviation"].'-'.$selectdip["nom"].'</option>';                               
}
}
?>
Comment puis je faire ? Merci pour votre aide.

Posté : 05 sept. 2006, 09:40
par charabia
Fait juste une imbrication de 2 morceaux.
print '<td bgcolor="#000099"><select>';
//ici code de la boucle select
print '</select></td>'; 

Posté : 05 sept. 2006, 09:47
par zeus
Et si, pour chaque visiteur_aller, tu as la même liste d'equipes, tu peux commencer par stocker la liste des équipes dans un tableau.
Et quand tu construit ton tableau, tu parcours le tableau contenant les équipes. Ca évitera de faire une requete à chaque ligne de ton tableau global ;)

Posté : 05 sept. 2006, 10:25
par charabia
Je ne saisis pas trop ta question...Si tu envois ce formulaire pour traitement tu peux le mettre où tu veux dans le form

Posté : 05 sept. 2006, 10:34
par Dom!
Voici comment j'ai écrit ma ligne du tableau comportant la liste déroulante :
			  
print '<td bgcolor="#000099"><select name="visiteur_aller'.$i.'" class="champ">'; 	
$sqldip = 'select nom from tb_clubs order by id';
   // $nbsql += 1;
	if ($resselectdip = mysql_query($sqldip)) {
         while ($selectdip = mysql_fetch_array($resselectdip))
print '<option value="'.$selectdip["id"].'" '.$temp.'>'.$selectdip["nom"].'</option>';
}   
print '</select></td>';  
Le probleme c'est que $visiteur_retour, n'a pas de valeur ?
J'ai fais un test :
<? print $visiteur_retour ; ?> mais y' a pas de valeur.

Posté : 05 sept. 2006, 10:38
par charabia
C'est qu'il est sorti hors de ta boucle for. C'est pour ça qu'il n'a plus de valeur. Laisses le au même niveau que les autres champs.

Posté : 05 sept. 2006, 10:43
par Dom!
Pourrais tu m'en dire plus car je ne comprend pas ?

Merci :(

Posté : 05 sept. 2006, 10:44
par charabia
Montres nous le code avec l'imbrication que tu as fait.

Posté : 05 sept. 2006, 10:48
par Dom!
Voici :
          <? 
				
				for($i=1;$i<=$nb;$i++){
				print '<tr> ';
                  print '<td bgcolor="#000099"><input name="date_aller'.$i.'" type="text" class="champ" size="10" maxlength="10"></td>';
                  print '<td bgcolor="#000099"><input name="no_match_aller'.$i.'" type="text" class="champ" size="4"></td>';
                 // print '<td bgcolor="#000099"><input name="visiteur_retour'.$i.'" type="text" class="champ" ></td>';
				  
				  print '<td bgcolor="#000099"><select name="visiteur_retour'.$i.'" class="champ">'; 

$sqldip = 'select nom from tb_clubs order by id';
   // $nbsql += 1;
if ($resselectdip = mysql_query($sqldip)) {
while ($selectdip = mysql_fetch_array($resselectdip))
 print '<option value="'.$selectdip["id"].'" '.$temp.'>'.$selectdip["nom"].'</option>';
                                 
 }

print '</select></td>';  
  //print '<td bgcolor="#000099"><input name="visiteur_aller'.$i.'" type="text" class="champ" ></td>';
				  
   print '<td bgcolor="#000099">'; 
  
 			
$sqldipe = 'select nom from tb_clubs order by id';
   // $nbsql += 1;
	if ($resselectdipe = mysql_query($sqldipe)) {
         while ($selectdipe = mysql_fetch_array($resselectdipe))
 print '<option value="'.$selectdipe["id"].'" '.$temp.'>'.$selectdipe["nom"].'</option>';                      
        
}
           
print '</select></td>';  
				  
  print '<td bgcolor="#000099"><input name="no_match_retour'.$i.'" type="text" class="champ" size="4" maxlength="4"></td>';
  print '<td bgcolor="#000099"><input name="date_retour'.$i.'" type="text" class="champ" size="10" maxlength="10"></td>';
print '</tr>';
}
			
				
?>

Posté : 05 sept. 2006, 11:03
par Nathaire
As-tu essayé de regarder le code source de la pag que tu génère, là tu trouveras peut-être le problème...

Tu peux aussi poster la source générée pour le SELECT

Posté : 05 sept. 2006, 11:13
par charabia
print '</select></td>';   
  //print '<td bgcolor="#000099"><input name="visiteur_aller'.$i.'" type="text" class="champ" ></td>'; 
                   
   print '<td bgcolor="#000099">'; 
Tu as oublié le mettre le début de ton second select.
print '</select></td>';   
 print '<td bgcolor="#000099"><input name="visiteur_aller'.$i.'" type="text" class="champ" >'; 
Et puis un conseil, indentes bien ton code si tu veux repérer rapidement les erreurs.

Posté : 05 sept. 2006, 12:08
par Dom!
Non l'erreur ne vient pas de la !

Par contre pourrais tu me dire ce que signifie indenter ? :shock:

et si vous avez une idée sur mon erreur ... merciiiiiii

Posté : 05 sept. 2006, 17:50
par charabia
Indenter c'est d'aligner correctement les différentes portions de ton code ;)

J'ai testé chez moi avec une bonne indentation et ça fonctionne...

Posté : 06 sept. 2006, 09:37
par Dom!
Merci pour la définition... j'ai fais ce que tu m'a dis mais je pens que le probleme vient de la page de traitement des données.

Voici comment je procéde :
<?php 
require_once('cagnes.php'); 
include ("conffile.php");
@ mysql_pconnect($hostname, $user, $passwd) or die ("Impossible de se connecter");
mysql_select_db($dbname);

// Matchs aller
for($i=1;$i<=$nb;$i++){
$journee = $i;
$match_aller = 1; 
$temp = "date_aller".$i;
eval('$date = $'.$temp.';'); 
$semaine = strtotime($date);
$semaine = strftime("%W", $semaine); 
$temp = "no_match_aller".$i;
eval('$no_match = $'.$temp.';');
$temp = "visiteur_retour".$i;
eval('$test = $'.$temp.';');
if ($test == "") {	
$adomicile = 1;
$temp = "visiteur_aller".$i;
eval('$adversaire = $'.$temp.';');
} else { 
$adomicile = 0;
$temp = "visiteur_retour".$i;
eval('$adversaire = $'.$temp.';');
}
$sql_ajout = 'insert into tb_matchs values (0,'.$journee.',"'.$date.'","",'.$id_equipe.',"'.$no_match.'",'.$match_aller.','.$adomicile.',"'.$adversaire.'","","","","","","","","","",'.$semaine.')';
$nbsql += 1;
$result_ajout = mysql_query($sql_ajout);
$ecrire = 0;
}

// Matchs retour
for($i=1;$i<=$nb;$i++){ 
$journee = $nb + $i;
$match_aller = 0; 
$temp = "date_retour".$i;
eval('$date = $'.$temp.';'); 
$semaine = strtotime($date);
$semaine = strftime("%W", $semaine);  
$temp = "no_match_retour".$i;
eval('$no_match = $'.$temp.';'); 
$temp = "visiteur_aller".$i;
eval('$test = $'.$temp.';');
if ($test == "") {	
$adomicile = 1;
$temp = "visiteur_retour".$i;
eval('$adversaire = $'.$temp.';');
} else { 
$adomicile = 0;
$temp = "visiteur_aller".$i;
eval('$adversaire = $'.$temp.';');
}	
$sql_ajout = 'insert into tb_matchs values (0,'.$journee.',"'.$date.'","",'.$id_equipe.',"'.$no_match.'",'.$match_aller.','.$adomicile.',"'.$adversaire.'","","","","","","","","","",'.$semaine.')';
$nbsql += 1;
$result_ajout = mysql_query($sql_ajout);
$ecrire = 0;
}
// echo "<meta http-equiv=\"refresh\" content=\"2; url=insert_calendar.php?nb=\">";
?>
Le probléme c'est que $adversaire n'a pas de valeur. Je n'arrive pas à récuperer la valeur de $visiteur_aller pour les match aller et visiteur_retour pour les matchs retour !

Voyez vous ou est le probleme ?
merci

Posté : 06 sept. 2006, 10:23
par Ryle
Quand on te parler d'indenter et d'aligner les différentes portions du code, il ne s'agit pas de tout coller à gauche, mais de mettre des tabulations pour que toutes les commandes qui découlent de la précédent soit décalées (en règle générale, l'ouverture d'une accolade implique un décalage d'une tabulation, la fermeture, le retour à la position initiale).

Voici ce que donne ton code indenté correctement, c'est quand même plus facile de voir où commencent et s'arrêtent les boucles et les if nan ? :)
<?php  
require_once('cagnes.php');  
include ("conffile.php"); 
@ mysql_pconnect($hostname, $user, $passwd) or die ("Impossible de se connecter"); 
mysql_select_db($dbname); 

// Matchs aller 
for($i=1;$i<=$nb;$i++){ 
	$journee = $i; 
	$match_aller = 1;  
	$temp = "date_aller".$i; 
	eval('$date = $'.$temp.';');  
	$semaine = strtotime($date); 
	$semaine = strftime("%W", $semaine);  
	$temp = "no_match_aller".$i; 
	eval('$no_match = $'.$temp.';'); 
	$temp = "visiteur_retour".$i; 
	eval('$test = $'.$temp.';'); 
	if ($test == "") {     
		$adomicile = 1; 
		$temp = "visiteur_aller".$i; 
		eval('$adversaire = $'.$temp.';'); 
	} else {  
		$adomicile = 0; 
		$temp = "visiteur_retour".$i; 
		eval('$adversaire = $'.$temp.';'); 
	} 
	$sql_ajout = 'insert into tb_matchs values (0,'.$journee.',"'.$date.'","",'.$id_equipe.',"'.$no_match.'",'.$match_aller.','.$adomicile.',"'.$adversaire.'","","","","","","","","","",'.$semaine.')'; 
	$nbsql += 1; 
	$result_ajout = mysql_query($sql_ajout); 
	$ecrire = 0; 
} 

// Matchs retour 
for($i=1;$i<=$nb;$i++){  
	$journee = $nb + $i; 
	$match_aller = 0;  
	$temp = "date_retour".$i; 
	eval('$date = $'.$temp.';');  
	$semaine = strtotime($date); 
	$semaine = strftime("%W", $semaine);   
	$temp = "no_match_retour".$i; 
	eval('$no_match = $'.$temp.';');  
	$temp = "visiteur_aller".$i; 
	eval('$test = $'.$temp.';'); 
	if ($test == "") {     
		$adomicile = 1; 
		$temp = "visiteur_retour".$i; 
		eval('$adversaire = $'.$temp.';'); 
	} else {  
		$adomicile = 0; 
		$temp = "visiteur_aller".$i; 
		eval('$adversaire = $'.$temp.';'); 
	}     
	$sql_ajout = 'insert into tb_matchs values (0,'.$journee.',"'.$date.'","",'.$id_equipe.',"'.$no_match.'",'.$match_aller.','.$adomicile.',"'.$adversaire.'","","","","","","","","","",'.$semaine.')'; 
	$nbsql += 1; 
	$result_ajout = mysql_query($sql_ajout); 
	$ecrire = 0; 
} 
// echo "<meta http-equiv=\"refresh\" content=\"2; url=insert_calendar.php?nb=\">"; 
?>
Quant à ton problème, à quoi est égale $nb ? Les variables $visiteur_aller1, $visiteur_aller2 ... existent elles ?

A la place des eval, j'utiliserais la syntaxe $$ ou ${} de php pour lire les valeurs. Ca me semble plus simple : ${"visiteur_aller".$i}