Tableau

Eléphant du PHP | 424 Messages

05 sept. 2006, 09:03

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.
Youpi Youpi Yo !

Avatar du membre
ViPHP
ViPHP | 3008 Messages

05 sept. 2006, 09:40

Fait juste une imbrication de 2 morceaux.
print '<td bgcolor="#000099"><select>';
//ici code de la boucle select
print '</select></td>'; 

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 sept. 2006, 09:47

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 ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
ViPHP
ViPHP | 3008 Messages

05 sept. 2006, 10:25

Je ne saisis pas trop ta question...Si tu envois ce formulaire pour traitement tu peux le mettre où tu veux dans le form

Eléphant du PHP | 424 Messages

05 sept. 2006, 10:34

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.
Youpi Youpi Yo !

Avatar du membre
ViPHP
ViPHP | 3008 Messages

05 sept. 2006, 10:38

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.

Eléphant du PHP | 424 Messages

05 sept. 2006, 10:43

Pourrais tu m'en dire plus car je ne comprend pas ?

Merci :(
Youpi Youpi Yo !

Avatar du membre
ViPHP
ViPHP | 3008 Messages

05 sept. 2006, 10:44

Montres nous le code avec l'imbrication que tu as fait.

Eléphant du PHP | 424 Messages

05 sept. 2006, 10:48

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>';
}
			
				
?>
Youpi Youpi Yo !

Eléphanteau du PHP | 14 Messages

05 sept. 2006, 11:03

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

Avatar du membre
ViPHP
ViPHP | 3008 Messages

05 sept. 2006, 11:13

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.

Eléphant du PHP | 424 Messages

05 sept. 2006, 12:08

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
Youpi Youpi Yo !

Avatar du membre
ViPHP
ViPHP | 3008 Messages

05 sept. 2006, 17:50

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...

Eléphant du PHP | 424 Messages

06 sept. 2006, 09:37

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
Youpi Youpi Yo !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 sept. 2006, 10:23

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}