HELP!!!! Récupérer une sélection d'une liste déroulante

Infoctet
Invité n'ayant pas de compte PHPfrance

30 janv. 2006, 23:48

Bonjour,

Je suis débutante en PHP et j'ai 2 questions parmi beaucoup d'autres: :?:

1) Comment récupérer la ligne sélectionnée dans une liste déroulante avant de faire le submit de la page? j'ai une liste qui s'appelle id[8] et en javascript je récupère de la manière suivante:
form.elements['id[8]'].options[form.elements['id[8]'].selectedIndex].text
mais en Php je n'arrive pas. Est-ce quelqu'un peut m'aider?
2) deuxième problème, dans un script php, j'appelle une fonction Php qui alimente mon fameux champ liste id[8] depuis la base de données et sur la propriété OnChange j'aimerais appeler une deuxième fonction Php pour alimenter un deuxième champ liste nommé id[19]. Impossible d'appeler la deuxième fonction, le message "Objet attendu" s'affiche, je ne comprend pas pourquoi, car si j'appelle une fonction Javascript ça fonctionne. :cry: Pour tester j'ai mis dans ma deuxième fonction un simple "echo". Voici le code:

La ligne qui appelle la première fonction dans le script:
<td class="main"><?php echo AfficheListePuissance('id[8]', $products_options_array, $selected_attribute) . $products_options_name['products_options_comment']; ?></td>

La 1ère fonction:
function AfficheListePuissance($name, $values, $default = '', $parameters = '', $required = false) {
// $field = '<select name="id[8]" OnCahnge="tep_draw_pull_down_menu_cylindre()"><option value="1">-1.00<option value="2">-1.75<option value="3">-2.25</select>';
$field = '<select name="' . tep_output_string($name) . '"';
if (tep_not_null($parameters)) $field .= ' ' . $parameters;
// c'est la fonction javascript qui fonctionne
// $field .= ' OnChange="AfficheCylindre(cart_quantity)"';
// au dessous c'est la fonction php qui ne fonctionne pas
$field .= ' OnChange="AfficheMessage()"';
$field .= '>';
if (empty($default) && isset($GLOBALS[$name])) $default = stripslashes($GLOBALS[$name]);
for ($i=0, $n=sizeof($values); $i<$n; $i++) {
$field .= '<option value="' . tep_output_string($values[$i]['id']) . '"';
if ($default == $values[$i]['id']) {
$field .= ' SELECTED';
}
$field .= '>' . tep_output_string($values[$i]['text'], array('"' => '"', '\'' => ''', '<' => '<', '>' => '>')) . '</option>';
}
$field .= '</select>';
if ($required == true) $field .= TEXT_FIELD_REQUIRED;
return $field;
}

Ma 2ème fonction dans la quelle j'aimerais ensuite récupérer la ligne sélectionnée pour pouvoir afficher ma 2ème liste, mais comme l'appel ne fonctionnait pas et que je ne sais pas comment faire pour récupérer la ligne sélectionnée en PHP, j'ai essayé avec un simple echo mais sans résultat:
function AfficheMessage() {
echo "test";
}

Merci d'avance pour vos réponses qui me seront utiles car je suis bloquée sur ce point pour terminer mon site.

Infoctet

Eléphanteau du PHP | 27 Messages

31 janv. 2006, 03:04

Bsr infoctet,

La reponse a tes 2 questions est la meme: tu n'y arrives pas pour la simple raison que ce n'est pas possible.
Tu es dans un dialogue clients-serveur où le navigateur est le client.
Le PHP ne peut intervenir que sur le serveur, autrement dit il n'a la main qu'apres que tu ais appuye sur le bouton submit.
Donc pour un evenement 'onchange' ou autre, c'est le javascript(langage qui lui fonctionne sur le client) qui va gerer en fonction de tes actions.

Pour ta question 1) ou est ton probleme? Puisque si tu veux recuperer l'element selectionne de la liste, le php le fera tres bien apres le submit.
Pour la 2) Il te faut gerer l'affichage de la 2eme liste qui depend de ton choix dans la premiere via javascript.
Pour ce faire tu as plusieurs options:
La premiere etant d'utiliser la techno AJAX qui est concue pour repondre a ce besoin.
La deuxieme est, si tes donnees ne sont pas enormes de fabriquer avec le PHP des variables tableaux javascript initialisees avec les valeurs issues de ta base puis de les gerer via javascript.
Une autre methode enfin, si tu tiens absolument a utiliser le php avant le submit est d'utiliser un frame de 1pixel qui sera invisible, et sur l'evenement 'onchange' d'appeler un script php du frame invisible dans lequel tes fonctions php(adaptees en fonction) vont fonctionner, puis toujours via un javascript dans ce frame, tu vas reinjecter les resultats dans ta page principale.

Chacune de ces methodes a ses avantages et ses inconvenients.
A toi de voir en fonction de tes besoins.

Bon courage.

ViPHP
ViPHP | 2144 Messages

31 janv. 2006, 14:05

Oui; mais la solution trois c'est vraiment du bricolage, donc vaudrait mieux envisager les deux premières. Pour Ajax, il y a un poste dans la FAQ

Infoctet
Invité n'ayant pas de compte PHPfrance

02 févr. 2006, 03:27

Bonjour,

Je vous remercie pour vos réponses. je vais encore étudier les solutions et voir ce qe je vais faire. J'ai aussi vu une solution, c'est de mettre chaque liste dans une iFrame et à l'affichage de la page pricipale je remplie la première liste et lors de la sélection de cette liste je passe la sélection en paramètre pour remplir la 2ème liste et ainsi de suite jusqu'à la fin. J'ai jamais essyer cette solution. Qu'est-ce que vous en pensez?
J'ai une crainte quand j'utilise javascript, si l'internaute désactive les scripts dans ces options de navigateur pour une question de sécurité. Mon code ne fonctionne plus.

Salutations