Afficher le contenu d'un objet dans une liste déroulante

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Afficher le contenu d'un objet dans une liste déroulante

par Pierig » 02 août 2007, 09:38

C'est bon j'ai réussi grâce à toi.
Je peut mettre que mon problème est résolu.

Enfin.... je tombe sur des ti problèmes à chaque fois que j'arrive à finir.
Par exemple là tout les caractères avec accents sont mis en base avec un "?"
pourtant j'ai bien mis :

Code : Tout sélectionner

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
J'vais chercher ... :D
Merci encore et très bonne journée à vous.

EDIT :

N'ayant pas bien comprit le truc de l'id et vu que je n'avais besoin que du text j'ai prit l'option 2 :D

La fonction MajChamps :

function MajChamps()
	 {
	  document.majProduit.f_emprunteur.value = document.Affiche.Selection.options[document.Affiche.Selection.selectedIndex].text; 
	  document.majProduit.f_comment.value = document.Affiche.f_prod_cmt.value;
	 }

par Ryle » 01 août 2007, 17:58

Cool, c'est bien on avance :)

Bon alors autre chose à savoir sur le select, ou du moins sur les options, c'est qu'elles ont deux propriétés : .value (qui correspond donc à l'attribut value="") et .text (qui correspond au libellé).

Dans ton code php, tu définies toutes les valeurs des options à vide :
'<option value="','"'
Donc forcément, quand tu veux récupérer la valeur, il te renvoi une chaine vide :)

Donc au choix, tu peux soit (re)mettre une valeur avec php (genre l'id, ca me parait bien :)), soit utiliser le .text en javascript pour récupérer les noms et prénom, mais je vois pas trop ce que tu pourras en faire :)

par Pierig » 01 août 2007, 16:51

J'ai fait comme tu m'as dit ^^
Et je me suis apperçu qu'en fait rien ne passait dans la fonction (erare humanum est....)
J'avais mal placer mon </form> et ma appeler ma fonction.
Donc j'ai fait en sotre que l'appel soit fait avec un onclick plutot qu'avec le onsubmit (oui oui grosse erreur ^^)

Et ensuite j'ai vu grâce a l'alert que j'avais undefined je suis donc aller à la ligne et j'ai vu le </form> une ligne trop haut.

Je récupère donc maintenant mon champs textarea !
MERCI :D

Je ne récupère pas par contre mon champs select.


J'ai fait ça :
document.majProduit.f_emprunteur.value = document.Affiche.Selection.options[document.Affiche.Selection.selectedIndex].value;

majProduit = formulaire contenant le champ de type hidden à mettre à jour
f_emprunteur = champs à mettre à jour
Affiche = Formulaire contenant tout les affichages (donc le select)
Selection = nom du select

Moi ça me parrait correct. non ?
Si c'est non c'est que je n'ai pas bien comprit la ligne que tu m'as donnée ^^

EDIT :

Je n'y ai pas penser même si ça coulait de source j'ai refait le alert et ça me renvoi [object html select element] pour le select.
Il renvoi une valeur vide.

Hum ... j'avais un poil modifier mon select entre temps.
							<?php echo '<td><select name="Selection">',"\n";  ?>
							<option value=''></option><?php
							 foreach($t_user->resultat as $user) {
								 // Affichage de la ligne 
								 echo "\t",'<option value="','"', $selected ,'>', $user->usr_prenom_usage ." ".  $user->usr_nom_usage,'</option>',"\n";
							 } 
							 echo '</select></td>',"\n"; 
Mais bon je met ça à tout hasard je ne pense pas que ça vienne de là.

par Ryle » 01 août 2007, 16:12

Alors pour un select, même si IE et FF sont pas trop contrariant (et que le .value fonctionne en général, encore que ca dépend des versions), la procédure de récupération de la valeur sélectionné d'un <select> est un peu différente :

Code : Tout sélectionner

document.formulaire.champSelect.options[document.formulaire.champSelect.selectedIndex].value;
On en en fait récupérer le tableau des options contenu par le select (options[]) et on va récupérer à l'intérieur de celui-ci l'index sélectionné (.selectedIndex). On récupère ainsi la valeur de l'option sélectionnée :)

Par contre j'ai pas trop d'explication pour l'autre champ.. ajoute des alerte pour vérifier que tu appelles bien le bon champ et avoir sa valeur :
alert(document.Affiche.f_prod_cmt); // doit t'afficher [object] si le champ existe ou undefined sinon
alert(document.Affiche.f_prod_cmt.value); // doit te renvoyer la valeur contenue par le champ

par Pierig » 01 août 2007, 15:56

Je suis désolé pour le double post mais je ne peut pas éditer vu que j'ai oublier de me loguer ce matin.

J'aurai aimer savoir si je doit utiliser un truc du genre getElementById pour pouvoir avoir les noms que j'ai effectivement sélectionner dans ma liste déroulante.

Enfin là je comprend pourquoi ça me prend toujours la même personne, au moins là ça entre quelquechose.

Quand je met

Code : Tout sélectionner

document.majProduit.f_comment.value = document.Affiche.f_prod_cmt.value;
ça ne rentre rien du tout :(

Il a une valeur ce champ textarea pourtant ! :cry:

par Invité » 01 août 2007, 09:39

ça ne se met pas à jour :(

Code : Tout sélectionner

function MajChamps() { document.majProduit.f_comment.value = document.Affiche.f_prod_cmt.value; document.majProduit.f_emprunteur.value = document.Affiche.Selection.value ; }
C'est dans un autre formulaire en fait.
Le formulaire majProduit n'est la que pour submitter les bonnes informations quand c'est une mise à jour sinon c'est un autre formulaire.


La déclaration de mon formulaire :

Code : Tout sélectionner

<form name='majProduit' action='controller_principal.php' method='post' onSubmit="return valideForm() , MajChamps() ,AjoutOK() ">
Personellement je pense que l'erreur est là.
Si je met :

Code : Tout sélectionner

document.majProduit.f_comment.value = "toto"
dans la fonctin MajChamps la ça met bien à jour en mettant "toto".
Donc ma fonction est bien appelée.

La valeur des champs : f_prod_cmt et Selection
seraient elles "null" ?

Déclaration de f_prod_cmt :

Code : Tout sélectionner

<textarea name="f_prod_cmt" rows="6" cols="70" onclick='initInput(this)'> <?php echo $r_commentaire ?> </textarea>
On a déja vu plus haut comment était déclaré Selection mais bon je le remet quand même à tout hasard.

Code : Tout sélectionner

<?php echo '<td><select name="Selection">',"\n"; foreach($t_user->resultat as $user) { // Affichage de la ligne echo "\t",'<option value="','"', $selected ,'>', $user->usr_prenom_usage ." ". $user->usr_nom_usage,'</option>',"\n"; } echo '</select></td>',"\n"; ?>
Dans le cas de "Selection" le champs prend la valeur du dernier utilisateur de la boucle "foreach" .

Merci pour le rappel sur le javascript j'avais bien cru comprendre comme ça mais n'était pas sur vu qu'on ne me l'avait jamais dit.
Je suis dans le bon là a priori... :)

par Ryle » 31 juil. 2007, 17:01

Je ne sait pas comment la récupérer.
Exactement de la même manière que tu procèdes pour mettre l'autre champ à jour :)
document : c'est la page
document.formulaire : c'est le formulaire de la page nommé "formulaire"
document.formulaire.champ : c'est le champ "champ" du formulaire "formulaire" de la page
document.formulaire.champ.value : c'est la valeur du champ "champ" du formulaire "formulaire" de la page (dont on se fout du nom ;))

Il suffit donc de faire ainsi :
document.majProduit.f_comment.value = document.majProduit.f_prod_cmt.value; 
Nota : si tu veux rajouter les chaines [color][/color] autour, pense à les encadrer de guillemets ou apostrophes pour éviter les erreurs d'interprétation de js :)

par Pierig » 31 juil. 2007, 16:30

Je voit tout à fait le résonement pour le champs texarea.
Alors, pour répondre à cette question :

Code : Tout sélectionner

Mais pourquoi n'utilises tu pas la valeur de f_prod_cmt au lieu de f_comment pour la mettre en base ?
Je n'ai tout simplement pas réfléchit asser longtemps et j'ai donc mis un truc en trop mais bon maintenant que c'est fait je laisse :lol:

Fonction de mise à jour en JS :

function MajChamps()
{
document.majProduit.f_comment.value =PROBLEME;
}

Ligne qui se met à jour :

Code : Tout sélectionner

<input name='f_comment' type="hidden" value= '' /> La ou j'ai mis problème en gros et en rouge je suis senser mettre ce qui correspond à la valeur actuelle de mon champs textarea on est bien d'accord ? Je ne sait pas comment la récupérer. Après ça je pense que j'aurai finit cette partie de code :D

par Ryle » 31 juil. 2007, 15:49

C'est tout à fait normal ce qui t'arrive... php intervient sur le seveur et génère le code html. Si le code généré est

Code : Tout sélectionner

<textarea>xxx</textarea> <input type="hidden" value="xxx" />
Le fait par l'utilisateur de modifier le contenu du textarea (remplacer par 'yyy') ne changera en rien le contenu de ton champ hidden que tu récupéreras toujours à 'xxx' :) Il te faut donc un peu de javascript à chaque fois que l'utilisateur modifie le textarea (onBlur="" : lorsque le focus quitte le champ) ou au moment de soumettre le formulaire (onSubmit="") pour mettre à jour le champ.

Mais pourquoi n'utilises tu pas la valeur de f_prod_cmt au lieu de f_comment pour la mettre en base ? :)


Edit : et pour concaténer nom et prenom dans tes options, c'est tout pareil, suffit d'utiliser les deux variables ;)

par Pierig » 31 juil. 2007, 15:30

Hum ... ça avance ça avance !
Doucement mais surement.

J'en suis là :

le "/" c'est bon j'ai comprit de suite après t'avoir lu :P
La concaténation du prénom et du nom lors de mon enregistrement c'est aussi O.K
ça donne ça le code :
<input name='f_emprunteur' type="hidden" value="<?php echo $user->usr_prenom_usage .' '. $user->usr_nom_usage ;?>"/>

Ce qu'il me reste à acomplir :


Alors je n'arrive pas à concaténer nom et prénom dans la liste déroulante.

Le code :
echo "\t",'<option value="', $user->utilisateur,'"', $selected ,'>', $user->usr_nom_usage,'</option>',"\n";
Suite :

Peu importe quel utilisateur je sélectionne, c'est toujours le même qui sort (il devrait jouer a la tombale ... je me détend désolé).

Ce sont mes problèmes du moment mais en prévision je peut toujours donner le prochain que j'ai zapper ce matin en m'arrachant les cheuveux :
					<?php if(isset($_POST['f_Produit_commentaire']))
					{
						$r_commentaire = $_POST['f_Produit_commentaire'];
						if ($r_commentaire =="")
						{
							$r_commentaire = "Ajouter un commentaire ici";
						}
					}?>

					<textarea name="f_prod_cmt" rows="6" cols="70" onclick='initInput(this)'> <?php echo $r_commentaire ?> </textarea>
Je comprend la logique de mon erreur mais ne sait pas comment résoudre le problème.
Quand il n'y a pas de commentaire ça marque bien : "Ajouter un commentaire ici"
Quand il y a un commentaire ça marque bien le commentaire.
Il y a une non prise en compte des changements dans les commentaires.

la ligne ou je suis senser passer le commentaire avant de le mettre en base :

Code : Tout sélectionner

<input name='f_comment' type="hidden" value= "<?php echo ($POST['f_prod_cmt']); ?>" />

Voilà ou j'en suis ^^
Depuis deux petits moi que je suis avec vous, vous m'avez vraiment bien aider et je vous en remerci ;)

par Ryle » 31 juil. 2007, 14:41

Si tu ne travailles que sur les attributs, ton objet n'est rien de plus qu'un tableau associatif et ne devrait pas te poser de problème :)
[0] => user Object 
                ( 
                    [utilisateur] => 1 
                    [usr_ab_cd_abonne] => 123 
                    [usr_nom_usage] => test 
                    [usr_prenom_usage] => p1 
                    [usr_compte_applicatif] => ezz 
                ) 
Si tu veux le nom et le prénom, il te suffit de concaténer les attributs souhaités :
$objUser->usr_prenom_usage .' '. $objUser->usr_nom_usage
Quant à ton "/" en trop, c'est parce que tu n'as pas fermé les guillemets de ton value="" et qu'il va chercher le / qui est à la fin de la balise ;)

par Pierig » 31 juil. 2007, 14:27

J'avou ne pas encore tout comprendre a la programmation objet :oops:
Je voit bien avec la solution que tu m'as donner que j'avais fait n'importe quoi.
Ta solution fonctionne...à moitié xD

En fait sur cette ligne :
echo "\t",'<option value="', $user->utilisateur,'"', $selected ,'>', $user->usr_nom_usage,'</option>',"\n";
Moi je li : afficher la valeur de user->utilisateur et la valeur de user->usr_nom_usage

Le résultat ne donne que le nom.
Personellement je voulait mettre le prénom aussi (usr_prenom_usage) donc j'ai essayer avec et ça ne fonctionne pas non plus.
J'ai soit l'un , soit l'autre.
C'est donc un peu embêtant ^^

Sinon j'ai écrit cette ligne aussi.
He oui il faut bien que je récupère la sélection de la personne !
<input name='f_emprunteur' type="hidden" value= <?php echo $user->usr_nom_usage ;?>/>
Je récupère le nom mais avec un "/" (exemple : POLO/)
J'aimerai bien récupérer nom et prénom sans le "/".

Sinon c'est un très bon début de solution et je t'en remercie.
ha oui j'oubliait....
Je récupère tout le temps la même personne quelque soit le nom sélectionné :(

par sadeq » 31 juil. 2007, 13:17

Il faut respecter la structure de ton objet. On est bien d'accord $t_user->resultat est un tableau d'objet user. Il faut donc réécrire le foreach comme ça:
<?php echo '<select name="--Selection--">',"\n"; 
                                 foreach($t_user->resultat as $user) {
                                     // Affichage de la ligne 
                                     echo "\t",'<option value="', $user->utilisateur,'"', $selected ,'>', $user->usr_nom_usage,'</option>',"\n"; 
                                 } 
                                 echo '</select>',"\n"; 
?> 

Afficher le contenu d'un objet dans une liste déroulante

par Pierig » 31 juil. 2007, 12:05

Bonjour,

Voici un de mes nouveaux problème.


J'utilise une fonction (que je n'ai pas crée) qui me retourne un tableau et un objet.
Voici à quoi ça ressemble :
resrequetepaginews Object
(
    [resultat] => Array
        (
            [0] => user Object
                (
                    [utilisateur] => 1
                    [usr_ab_cd_abonne] => 123
                    [usr_nom_usage] => test
                    [usr_prenom_usage] => p1
                    [usr_compte_applicatif] => ezz
                )

            [1] => user Object
                (
                    [utilisateur] => 2
                    [usr_ab_cd_abonne] => 456
                    [usr_nom_usage] => test1
                    [usr_prenom_usage] => p2
                    [usr_compte_applicatif] => zzz
                )

            [2] => user Object
                (
                    [utilisateur] => 3
                    [usr_ab_cd_abonne] => 789
                    [usr_nom_usage] => test2
                    [usr_prenom_usage] => p3
                    [usr_compte_applicatif] => eez
                )

            [3] => user Object
                (
                    [utilisateur] => 4
                    [usr_ab_cd_abonne] => 987
                    [usr_nom_usage] => test3
                    [usr_prenom_usage] => p4
                    [usr_compte_applicatif] => aaz
                )

            [4] => user Object
                (
                    [utilisateur] => 5
                    [usr_ab_cd_abonne] => 654
                    [usr_nom_usage] => test4
                    [usr_prenom_usage] => p5
                    [usr_compte_applicatif] => eza
                )

            [5] => user Object
                (
                    [utilisateur] => 6
                    [usr_ab_cd_abonne] => 321
                    [usr_nom_usage] => test5
                    [usr_prenom_usage] => p6
                    [usr_compte_applicatif] => zae
                )

        )

    [gestionnaire] => gestionnairepaginationws Object
        (
            [debut] => 
            [fin] => 
            [nbElementTotal] => 6
            [nbElement] => 20
            [nbPage] => 1
            [pageDemande] => 1
            [grpe_Page] => 1
            [param] => Array
                (
                    [f_module] => DetailProduit
                )

            [pageAppelante] => 
            [msgErreur] => 
        )

)
 
Je tente donc d'afficher ce que contient l'objet user dans une liste déroulante (sélection d'un utilisateur) mais ce que j'obtient c'est ceci :


Image


Et ça c'est le code qui fait ce que vous voyez ci dessus :
<?php echo '<select name="--Selection--">',"\n"; 
							     foreach($t_user->resultat as $emprunteur => $nom) {
							         // Affichage de la ligne 
							         echo "\t",'<option value="', $emprunteur ,'"', $selected ,'>', $nom ,'</option>',"\n"; 
							     } 
							     echo '</select>',"\n"; 
							?>
Avec toute mon amitié .. :D
Que changer pour que ça fonctione ? ^^