Liste déroulante: se placer en fonction index

Résolu/Fermé
killingspree Messages postés 30 Date d'inscription vendredi 11 janvier 2008 Statut Membre Dernière intervention 11 février 2008 - 18 janv. 2008 à 10:30
kzanadeus Messages postés 70 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 4 décembre 2009 - 18 janv. 2008 à 14:56
Bonjour a tous,

J'ai besoin d'aide :).

Voila mon probleme : J'alimente une liste déroulante en fonction de données contenues dans une base, jusque la tout va bien mais ce que je veux, c'est pouvoir me positionner sur une valeur en particulier en fonction de son index(indice).

voici le code que j'utilise pour ma liste deroulante :

<?php
//Récupération des infos
$sqlfonction = "SELECT .....";
$reqfonction = mssql_query($sqlfonction) or die ("Pb avec la requete ".mssql_error());

echo '<select size=1 name="fonctionAgent" >'."\n";
echo '<option value="-1">Liste</option>'."\n";

//boucle permettant l'affichage des fonctions dans la liste déroulante
$i=0;
while ($resfonction=mssql_fetch_array($reqfonction))
{
echo '<option value="'.$i.'">'.$resfonction['descriptionUS'];
echo '</option>'."\n";
$i++;
}
echo '</select>'."\n";
?>


Voila, donc j'aimerais savoir si il est possible de se positionner sur une valeur particulière au chargement de la page et si oui comment faire !

Merci par avance.
A voir également:

16 réponses

kzanadeus Messages postés 70 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 4 décembre 2009 3
18 janv. 2008 à 10:34
Salut,

pourquoi ne pas mettre la valeur que tu veux en premier et après tu rempli les champs suivant avec les autres valeurs?

Cordialement.

Kzanadeus.
0
killingspree Messages postés 30 Date d'inscription vendredi 11 janvier 2008 Statut Membre Dernière intervention 11 février 2008 1
18 janv. 2008 à 10:52
Salut,

Oui merci kzanadeus, cette solution est bonne je n'y avais pas pensé. Je test ca et si c'est bon je mets le sujet en résolu.
Merci encore.
a+
0
killingspree Messages postés 30 Date d'inscription vendredi 11 janvier 2008 Statut Membre Dernière intervention 11 février 2008 1
18 janv. 2008 à 11:40
Bonjour,

En fait j'ai toujours un soucis, cette page est faite pour modifier les infos d'un utilisateur, or j'utilise l'index de cette liste déroulante que j'update dans la base de données. Donc si on modifie les coordonnées de la personne mais qu'on ne change pas la valeur de la liste déroulante, cela pose un probleme car la valeur est a -1 et c'est un champ obligatoire donc l'update ne se fait pas.

Je ne sais pas si j'ai été assez clair, demandez moi des précisions si besoin !

Merci par avance.
0
kzanadeus Messages postés 70 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 4 décembre 2009 3
18 janv. 2008 à 11:42
Dans ta liste déroulante la valeur que tu update c'est ce que contient ton $i donc normalement tu ne renvois pas l'indice de la ligne mais la valeur de ce $i donc c'est plus facil. Moi non plus je ne sais pas si j'ai été clair, si ce n'est pas le cas dis le moi.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
killingspree Messages postés 30 Date d'inscription vendredi 11 janvier 2008 Statut Membre Dernière intervention 11 février 2008 1
18 janv. 2008 à 11:48
Tout d'abord merci pour ces réponses rapides kzanadeus.
Oui mais la valeur de $i correspond à l'indice de la valeur et à son id dans la base de donnée.

Sinon j'ai une solution que je vais tester, c'est a dire faire un test sur ce champ obligatoire, si il n'a pas changé, on fait un update sans le prendre en compte sinon on fait l'update en le prenant en compte.
Mais le probleme c'est que j'ai 4 listes comme ca donc le code ne sera pas tres propre alors si il y a une meilleure solution envisageable je préfererais.

Merci par avance
0
kzanadeus Messages postés 70 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 4 décembre 2009 3
18 janv. 2008 à 11:50
Justement si $i contient l'identifiant alors qu'il soit le premier dans la liste ou le 10ième sa change rien pour toi. Puisque sa place dans la liste n'est pas vraiment ce que tu recherche mais bien l'identifiant ?

Si ce n'est pas cela alors je pense que c'est l'idée de base qui n'est pas très bonne.

Cordialement.

Kzanadeus.
0
killingspree Messages postés 30 Date d'inscription vendredi 11 janvier 2008 Statut Membre Dernière intervention 11 février 2008 1
18 janv. 2008 à 11:59
Oui, je recherche l'identifiant et cet identifiant correspond à sa place dans la liste sauf pour la 1ere valeur.
Mais je ne sais pas si je t'avais bien compris tout a l'heure, ce que j'avais fait c'est :


echo '<select size=1 name="fonctionAgent" >'."\n";
echo '<option value="-1">'.mssql_result($reqfonction,$idfonction,0).'</option>'."\n";

je plaçais donc a la valeur -1(premier de la liste) le libellé que j'avais récupéré en fonction de l'id.

Je ne suis pas clair dis moi si ca va pas !

Merci par avance
0
kzanadeus Messages postés 70 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 4 décembre 2009 3
18 janv. 2008 à 12:03
Ce que tu devrais faire c'est placer dans value l'identifiant que tu possede dans ta table directement.

Genre une table joueur avec identifiant nom prenom
et tu fais un suite de balise <option value="identifiant">nom prenom</option>

C'est comme cela que je le fais avec une boucle for sachant qu'avant de la lancer je place l'enregistrement présent en premier et je ne le réécrit pas dedans genre :

<select ...>
<option value="identifiantX">nomX prenomX</option>
for(tous les joueurs)
{
if(nom != nomX)<option value="identifiant">nom prenom</option>
}

Voila voila.

Cordialement.

Kzanadeus.
0
killingspree Messages postés 30 Date d'inscription vendredi 11 janvier 2008 Statut Membre Dernière intervention 11 février 2008 1
18 janv. 2008 à 14:19
Merci j'ai mieux compris ce que tu disais.

Cela fonctionne mais pas totalement, c'est-a-dire que dès que j'atteinds le meme identifiant que celui que j'ai mis en 1er dans la liste, la boucle s'arrête et donc je n'ai pas tous les enregistrements qu'il reste apres.

Merci par avance.
0
kzanadeus Messages postés 70 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 4 décembre 2009 3
18 janv. 2008 à 14:21
Tu devrais me donner ton code car j en vois pas pourquoi cela s'arreterais en fait.

Cordialement.

Kzanadeus.
0
killingspree Messages postés 30 Date d'inscription vendredi 11 janvier 2008 Statut Membre Dernière intervention 11 février 2008 1
18 janv. 2008 à 14:31
En fait c'est pas ca le probleme mais il y en a un quand meme lol :

<?php
//Récupération de toutes les fonctions
$sqlfonction = "SELECT label,id FROM function_v2";
$reqfonction = mssql_query($sqlfonction) or die ("Pb avec la requete ".mssql_error());
$nbfonction = mssql_num_rows($reqfonction);

echo '<select size=1 name="fonctionAgent" >'."\n";
echo '<option value="'.$idfonction.'">'.mssql_result($reqfonction,$idfonction,0).'</option>'."\n";

//boucle permettant l'affichage des fonctions dans la liste déroulante
for($i=0;$i<$nbfonction;$i++)
{
$resfonction = mssql_fetch_array($reqfonction);
if ($idfonction != $resfonction['id'])
{
echo '<option value="'.$resfonction['id'].'">'.$resfonction['label'];
echo '</option>'."\n";
}
}
echo '</select>'."\n";
?>


Ce que j'obtiens sur un enregistrement de 3 fonctions avec (1 : fonction1, 2 : fonction 2, 3 : fonction 3) et la "fonction 2" a afficher en 1ere de la liste :

fonction 2
fonction 2
fonction 3

donc la 1ere fonction est remplacée par celle que je veux afficher en 1ere !

Merci par avance
0
kzanadeus Messages postés 70 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 4 décembre 2009 3
18 janv. 2008 à 14:39
Je ne vois a aucun moment ou tu utilise $i donc je pense que c'est de la que viens le problème.
Tu devrais le faire en fonction de l'indice actuel.

Cordialement.

Kzanadeus.
0
killingspree Messages postés 30 Date d'inscription vendredi 11 janvier 2008 Statut Membre Dernière intervention 11 février 2008 1
18 janv. 2008 à 14:42
Comment ca ? je ne comprends pas ce que tu veux dire !
0
kzanadeus Messages postés 70 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 4 décembre 2009 3
18 janv. 2008 à 14:53
Personnellement je ne fais pas du tout les requetes comme toi, je me suis créé une classe qui me renvois un résultat sous forme de requete et non de résultat donc je peux prendre un seul tuple de cette requete comme je le souhaite en fonction de l'indice mais je trouve parfaitement normal le fait qu'il ne prenne pas en compte ton premier élément si tu ne peux pas choisir en fonction de $i.*

Essaye cela :

for($i=0;$i<$nbfonction;$i++)
{
$Resultat =
$resfonction = mysql_query($sqlfonction);
if ($idfonction != $resfonction['id'])
{
$id = mysql_result($resfonction , $i, "id");
$label = mysql_result($resfonction, $i, "label");
echo '<option value="'.$id.'">'.$label;
echo '</option>'."\n";
}

Cela devrais marcher un peu mieu même si j'ai pas vraiment vérifié le code.

Cordialement.

Kzanadeus.
0
killingspree Messages postés 30 Date d'inscription vendredi 11 janvier 2008 Statut Membre Dernière intervention 11 février 2008 1
18 janv. 2008 à 14:55
C'est bon, j'ai trouvé la solution, il suffisait de mettre :

echo '<option value="'.$idfonction.'">'.mssql_result($reqfonction,$idfonction-1,0).'</option>'."\n";

le "-1" dans le result car le jeu de résultats commence à 0 et donc il y a un décalage de 1 par rapport a l'identifiant.


En tout cas merci beaucoup à toi ton aide m'a été précieuse :)
0
kzanadeus Messages postés 70 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 4 décembre 2009 3
18 janv. 2008 à 14:56
De rien j'était en trainde te mettre une solution de ce genre la.

Cordialement.

Kzanadeus.
0