Page 1 sur 3

tableau et menu deroulant dans cellule

Posté : 17 mai 2005, 14:07
par donny
salut,


Je dipose d un tableau que j allimente à l aide d une table,et comme je veux pouvoir permettre de saisir de nouvelle donnée j ai mis une ligne en dure dans mon tableau.Le truc est que dans cette ligne j ai une cellule qui contient une liste alimenter à partir d une autre table.Et ce que je voudrais c est que dans les autre ligne de tableau je retrouve cette liste deroulante dans la cellule mais je ne vois pas comment faire .?
<html>
<head>

</head>

<body>

<?php 

// on se connecte à MySQL 
$db = mysql_connect('localhost', 'root', ''); 

// on sélectionne la base 
mysql_select_db('conso',$db); 

// on crée la requête SQL 
$sql = "SELECT *  FROM etatobjet "; 

// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 








echo '<table  width="80%" border="1">'; 
echo '<tr><td><b>N°operation</b></td><td><b>Date</b></td><td><b>Serie</b></td><td><b>Etat</b></td></tr>';
while($list=mysql_fetch_array($req)){ 
echo'<tr><td><input type="text" name="etatobjet" value=$list[\'idetatobjet\'] /></td><td><input type="text" name="date" value=$list[\'date\'] /></td><td><input type="text" name="serie" value=$list[\'serie\'] /></td><td><input type="text" name="etat" value=$list[\'etat\'] /></td></tr>'; 
}

?> 

<tr><td><input type="text" name="etatobjet1" value="" /></td><td><input type="text" name="date" value="<? echo date("d/m/Y"); ?>"  /></td><td><input type="text" name="serie" value="" /></td><td><? $sql='select * from etat'; $res=mysql_query($sql); echo '<select name=\"etat\">'; while($list=mysql_fetch_array($res)){ echo '<option value='.$list['id'].'>'.$list['etat'].'</option>'; } echo '</select>'; ?></td></tr>


</table> 






</body>
</html>
Merci

Posté : 17 mai 2005, 14:09
par slipndi
Bonjour,
excuse moi mais j'ai pas trop compris ton soucis enfaite :S

Posté : 17 mai 2005, 14:26
par donny
c est pas facile a expliquer
j ai un tableau qui est baser sur une table
et dans ce tableau à la colonne etat , j aimerais mettre une liste deroulante comme ici dans la ligne en dur de mon tableau
<tr><td><input type="text" name="etatobjet1" value="" /></td><td><input type="text" name="date" value="<? echo date("d/m/Y"); ?>"  /></td><td><input type="text" name="serie" value="" /></td><td><? $sql='select * from etat'; $res=mysql_query($sql); echo '<select name=\"etat\">'; while($list=mysql_fetch_array($res)){ echo '<option value='.$list['id'].'>'.$list['etat'].'</option>'; } echo '</select>'; ?></td></tr> 


cette colonne etat contient un identifiant et est relié a une autre table etat,et ce que je voudrais c est une liste deroulant avec la bonne etat

Posté : 17 mai 2005, 14:32
par slipndi
ah il faut donc que tu lie dans ta requete sql les deux tables, peux tu me montrer les deux tables dont tu dispose s'il te plait ? ;)

Posté : 17 mai 2005, 14:33
par Cyrano
Je n'ai pas compris grand chose à ta question: réalise qu'on a pas une vue d'ensemble de la réalisation en cours ni du résultat souhaité. Essaye d'être clair et concis. Si tu arrives à correctement l'expliquer, dis-toi bien que tu auras 50% de chance au moins de répondre toi-même.

Enfin essaye de coder de façon lisible: regarde ce qu'on peut faire avec ton code :
<html>
<head>
</head>
<body>
<?php
// on se connecte à MySQL
$db = mysql_connect('localhost', 'root', '');
// on sélectionne la base
mysql_select_db('conso',$db);
// on crée la requête SQL
$sql = "SELECT *  FROM etatobjet ";
// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>\n'.$sql.'<br>\n'.mysql_error());
?>
<table  width="80%" border="1">
    <tr>
        <td><b>N°operation</b></td>
        <td><b>Date</b></td>
        <td><b>Serie</b></td>
        <td><b>Etat</b></td>
    </tr>
<?php
while($list=mysql_fetch_array($req))
{
    ?>
    <tr>
        <td><input type="text" name="etatobjet" value=<?php echo($list['idetatobjet']); ?> /></td>
        <td><input type="text" name="date" value=<?php echo($list['date']); ?> /></td>
        <td><input type="text" name="serie" value=<?php echo($list['serie']); ?> /></td>
        <td><input type="text" name="etat" value=<?php echo($list['etat']); ?> /></td>
    </tr>
<?php
}
?>
    <tr>
        <td><input type="text" name="etatobjet1" value="" /></td>
        <td><input type="text" name="date" value="<?php echo date("d/m/Y"); ?>"  /></td>
        <td><input type="text" name="serie" value="" /></td>
        <td>
<?php 
$sql='select * from etat'; $res=mysql_query($sql);
?>
            <select name="etat"> 
<?php
while($list=mysql_fetch_array($res))
{
?>
                <option value="<?php echo($list['id']); ?>"><?php echo($list['etat']); ?></option>
<?php
}
?>
            </select>
        </td>
    </tr>
</table>
</body>
</html>
Est-ce que ça ne te paraît pas plus facile à suivre comme ça?

Posté : 17 mai 2005, 15:26
par donny
c est vraiment plus clair comme tu l a presenter et sa offre le meme resultat, j en apprends beaucoup ici
merci

en faite ce que je veux, c est que dans cette cellule :
<td><input type="text" name="etat" value=<?php echo($list['etat']); ?> /></td>
j ai une liste deroulante avec tout les etat possible et qui pointe sur le bonne etat

Posté : 17 mai 2005, 15:51
par Cyrano
donc, au lieu d'un champ <input>, il te faut un <select> et donc une boucle à l'intérieur de la boucle.
Avant la première boucle, tu crées une variable tableau contenant tous les états existants. Ensuite, quand tu construis ta liste déroulante, il faut que tu vérifies la valeur pour cette ligne : et tu rajoutes dans la balise option quelque chose du genre:
if($liste_etat[$i] == $list['etat']){echo(" selected=\"selected\"")}
Lors de la construction, quand les deux valeursseront les mêmes, alors ça ajoutera en plus un attribut "selected" et ta liste sera par défaut sur l'état correspondant que tu pourras modifier en choisissant autre chose au besoin.

Posté : 17 mai 2005, 16:18
par donny
j ai pas trop saisie
donc dans le tableau je ne met que les 4 etat dont je dispose dans ma table etat, ensuite je fais un truc dans ce genre

<option value=$list['etat'] ><?php if($liste_etat[$list['etat']] == $list['etat']){echo(" selected=\"selected\"")} 

Posté : 17 mai 2005, 16:24
par Cyrano
c'est presque ça: le "selected" doit être DANS la balise <option> et tu l'as mis après:
<option value=$list['etat'] <?php if($liste_etat[$list['etat']] == $list['etat']){echo(" selected=\"selected\"")}?>>
[/php]

Posté : 17 mai 2005, 16:55
par donny
sa m affihce une liste vide .??
<html> 
<head> 
</head> 
<body> 
<?php 
// on se connecte à MySQL 
$db = mysql_connect('localhost', 'root', ''); 
// on sélectionne la base 
mysql_select_db('conso',$db); 

// on crée la requête SQL 
//$sql = "SELECT etat.etat, idetatobjet, date, serie
//FROM etat, etatobjet
//WHERE etat.id = etatobjet.etat "; 

$sql = "SELECT *  FROM etatobjet "; 

echo $sql;
// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>\n'.$sql.'<br>\n'.mysql_error()); 
?> 
<table  width="80%" border="1"> 
    <tr> 
        <td><b>N°operation</b></td> 
        <td><b>Date</b></td> 
        <td><b>Serie</b></td> 
        <td><b>Etat</b></td> 
    </tr> 
<?php 
while($list=mysql_fetch_array($req)) 
{ 
    ?> 
    <tr> 
        <td><input type="text" name="etatobjet" value=<?php echo($list['idetatobjet']); ?> /></td> 
        <td><input type="text" name="date" value=<?php echo($list['date']); ?> /></td> 
        <td><input type="text" name="serie" value=<?php echo($list['serie']); ?> /></td> 
        <td>

<?php 
$sql='select * from etat'; 
$res=mysql_query($sql); 

$i=1;
while($tab=mysql_fetch_array($res)){
$liste_etat[$i]=$tab['etat'];
$i++;
 }

?>  

	<select name="etat"> 

<?php 
while($list=mysql_fetch_array($res)) 
{ 
//<option value=<?php echo($list['etat']); ?> ><?php echo ($list['etat']); ?></option>
?> 

<option value=$list['etat'] <?php if($liste_etat[$list['etat']] == $list['etat']){echo(" selected=\"selected\"");}?>> 	
<?php 
} 
?> 
	</select>


	</td> 
    </tr> 
<?php 
} 
?> 
    <tr> 
        <td><input type="text" name="etatobjet1" value="" /></td> 
        <td><input type="text" name="date" value="<?php echo date("d/m/Y"); ?>"  /></td> 
        <td><input type="text" name="serie" value="" /></td> 
        <td> 
<?php 
$sql='select * from etat'; $res=mysql_query($sql); 
?> 
            <select name="etat"> 
<?php 
while($list=mysql_fetch_array($res)) 
{ 
?> 
                <option value="<?php echo($list['id']); ?>"><?php echo($list['etat']); ?></option> 
<?php 
} 
?> 
            </select> 
        </td> 
    </tr> 
</table> 



</body> 
</html> 

Posté : 18 mai 2005, 08:43
par donny
j ai essayer et j ai pas trop saisi tu pourrai me reexpliquer le principe du tableau car en faite j ene vois pas comment alimenter la liste deroulante de la colonne etat .?
Je recapitule je fais un tableau dans le lequel je stocke tout les etats possible.
Dans le value du option je met le resultat obtenu avec la requete
<option value=<?echo $list['etat'] ; ?>> ???? </option>
entre les balise option je met quoi ?
<?php if($liste_etat[$list['etat']] == $list['etat'])..
mais le probleme est que dans le tableau il y a du texte et dans le $list un identifiant,donc il faudrait un tableau a 2 dimensions

et surtout je vois pas comment la cellule peut devenir une liste deroulante car on ne fait qu un passage dessus ?

Merci

Posté : 18 mai 2005, 09:28
par donny
Je l ai fait comme cela et sa fonctionne ,je dois dire je sais pas trop pourquoi
mais il y a un truc que je pige pas.Ma liste se presente comme sa
à l affichage j ai :
>en panne

et quand je clique sur la liste j ai
>en panne
en reparation
hors service
en panne

Et je comprends pas pourquoi il y a ce en panne avec sa > devant,ce qui fait que dans ma liste j ai 2 fois en panne ???

Posté : 18 mai 2005, 09:42
par Cyrano
Il doit y avoir un ">" qui traine en surnuméraire dans ton code.

L'idée du tableau, c'est que c'est une variable qui reste là tant que le script n'a pas terminé son exécution. En utilisant une boucle avec un pointeur qui s'incrément à chaque tout, tu vas sur l'élément correspondant de ce tableau.

J'essaye de saisir ce que tu ne comprends pas bien, j'ai un peu de mal à cerner ce point pour pouvoir te donner l'explication appropriée.

Posté : 18 mai 2005, 09:55
par donny
voila mon code et je voulais savoir si c est à cela que tu pensai hier en me parlant de tableau
<html> 
<head> 
</head> 
<body> 
<?php 
// on se connecte à MySQL 
$db = mysql_connect('localhost', 'root', ''); 
// on sélectionne la base 
mysql_select_db('conso',$db); 

// on crée la requête SQL 
$sql = "SELECT etat.etat, idetatobjet, date, serie
FROM etat, etatobjet
WHERE etat.id = etatobjet.etat "; 

//$sql = "SELECT *  FROM etatobjet "; 

echo $sql;
// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>\n'.$sql.'<br>\n'.mysql_error()); 
?> 
<table  width="80%" border="1"> 
    <tr> 
        <td><b>N°operation</b></td> 
        <td><b>Date</b></td> 
        <td><b>Serie</b></td> 
        <td><b>Etat</b></td> 
    </tr> 
<?php 
while($list=mysql_fetch_array($req)) 
{ 
    ?> 
    <tr> 
        <td><input type="text" name="etatobjet" value=<?php echo($list['idetatobjet']); ?> /></td> 
        <td><input type="text" name="date" value=<?php echo($list['date']); ?> /></td> 
        <td><input type="text" name="serie" value=<?php echo($list['serie']); ?> /></td> 
        <td>

<?php 
$sql='select * from etat'; 
$res=mysql_query($sql); 

$i=1;
while($tab=mysql_fetch_array($res)){
$liste_etat[$i]=$tab['etat'];
$i++;
 }

?>  

	<select name="etat"> 

<?php 
//while($list=mysql_fetch_array($res)) 
for($i=1;$i<5;$i++){ 
//<option value=<?php echo($list['etat']); ?> ><?php echo ($list['etat']); ?></option>
//<option value=<?php echo ($liste_etat[$i])?>><?php for($i=1;$i<5;$i++){
//if($liste_etat[$i] == $list['etat']){echo(" selected=\"selected\"");}}?>><?php echo ($list['etat']); ?></option> 
?> 


<option value="<?php echo($liste_etat[$i]);?>"><?php echo ($liste_etat[$i]); ?></option>
	
<?php 
} 
?> 
	</select>


	</td> 
    </tr> 
<?php 
} 
}
?> 
    <tr> 
        <td><input type="text" name="etatobjet1" value="" /></td> 
        <td><input type="text" name="date" value="<?php echo date("d/m/Y"); ?>"  /></td> 
        <td><input type="text" name="serie" value="" /></td> 
        <td> 
<?php 
$sql='select * from etat'; $res=mysql_query($sql); 
?> 
            <select name="etat"> 
<?php 
while($list=mysql_fetch_array($res)) 
{ 
?> 
                <option value="<?php echo($list['id']); ?>"><?php echo($list['etat']); ?></option> 
<?php 
} 
?> 
            </select> 
        </td> 
    </tr> 
</table> 



</body> 
</html> 

Posté : 18 mai 2005, 10:11
par Cyrano
Bon, voilà un bout de ton code: pourquoi mets tu la boucle de création de ton tableau dans une autre boucle ? c'est complètement inutile, tu la fais exécuter à chaque ligne du tableau html...
<?php
/* On crée ici la liste des états pour les listes déroulantes. */
$sql='select * from etat';
$res=mysql_query($sql);
$i=0;
while($tab=mysql_fetch_array($res))
{
    $liste_etat[$i]=$tab['etat'];
    $i++;
}

?>  
<table  width="80%" border="1">
    <tr>
        <td><b>N°operation</b></td>
        <td><b>Date</b></td>
        <td><b>Serie</b></td>
        <td><b>Etat</b></td>
    </tr>
<?php
while($list=mysql_fetch_array($req))
{
    ?>
    <tr>
        <td><input type="text" name="etatobjet" value=<?php echo($list['idetatobjet']); ?> /></td>
        <td><input type="text" name="date" value=<?php echo($list['date']); ?> /></td>
        <td><input type="text" name="serie" value=<?php echo($list['serie']); ?> /></td>
        <td>
            <select name="etat">
<?php
    for($i=0;$i<count($liste_etat);$i++)
    {
?>
                <option value="<?php echo($liste_etat[$i]);?>"><?php echo ($liste_etat[$i]); ?></option>
<?php
    }
?>
            </select>
        </td>
    </tr>
<?php
}
?>
On crée le tableau AVANT et ensuite on l'utilise pour créer la liste déroulante dans la cellule <td>

analyse ce truc et essaye d'identifier exactement les points que tu ne comprends pas. Mais garde toujours la logique comme guide.