Page 1 sur 1

Liste déroulante lien pour aller a la page suivante

Posté : 04 déc. 2007, 18:02
par guigui69
Bonjour à tous,

j'ai utilisé le post pour réaliser une liste déroulante, elle fonctionne.

Mais je voudrait que quand je valide sur ok. Cela part sur la page suivante.

Voici le code:

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html lang="fr"> </body></html> <head> Selectionné votre matiere premiere que vous voulez modifier: <?php $server="*******"; $user="******"; $pass="******"; $db="pdr"; /* On récupère si elle existe la valeur de la gamme envoyée par le formulaire */ $matiere_type = isset($_POST['matiere_type'])?$_POST['matiere_type']:null; $connexion = mysql_connect($server, $user, $pass); if($connexion != false) { $choixbase = mysql_select_db($db, $connexion); $sql1 = "SELECT id_matiere_type, ref_matiere_type, nom_matiere_type FROM matiere_type ORDER BY id_matiere_type"; $query = mysql_query($sql1); ?> <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgsgamme" action="modmatiere.php"> <u>Sélectionnez la type de matiere</u> <br> <select name="matiere_type" id="matiere_type" onchange="document.forms['chgsgamme'].submit();"> <option value="-1">- - - Choisissez une gamme - - -</option> <?php while ( $list = mysql_fetch_array( $query ) ) { echo '<option value="'.$list["ref_matiere_type"].'"'; if ($gamme == $list["ref_matiere_type"]) echo " SELECTED"; echo '>'.$list["ref_matiere_type"].' '.$list['nom_matiere_type'].'</option>'; } } echo "</SELECT>"; echo "<br>"; if(isset($matiere_type) && $matiere_type != -1) { //print("<center> selection $gamme</center>"); // Cération de la requête pour avoir les sous gammes de cette gamme $sql2 = "SELECT code_m, nom_m FROM matiere WHERE ref_matiere_type = '$matiere_type' ORDER BY code_m"; //echo $sql2; if($connexion != false) { $query2 = mysql_query($sql2) or die('erreur2'); $nb2= mysql_num_rows($query2); //recupere le nombre de ligne de la variable contenue dans la variable query. Impeccable if ($nb2 == null){ // si le nombre de ligne est egal a ensemble vide cela ecrit dans la list deroulante selectionner echo "Pas de sous gamme."; } else { echo '<br>'; echo '<select name="matiere" id="matiere">'; while ( $list2 = mysql_fetch_array( $query2 ) ) { echo '<option value="'.$list2["code_m"].'">'.$list2["nom_m"].' </option>'; } } echo "</SELECT>"; //on ferme la liste--> } /* Un petit coup de balai */ mysql_free_result($query2); } //echo '<form method="post" action="/v0.1a/index.php">'; //echo '<input type="submit" value="next">'; //echo '<input type="hidden" name="test" value="'.$matiere.'">'; //echo '</form>'; echo '<br /><input type="submit" name="ok" id="ok" value="Envoyer" />'; echo '<input type="hidden" name="test" value="'.$matiere.'">'; echo '</form>'; // Terminé, on ferme la connexion */ mysql_close($connexion); print_r($_POST) ?> </body> </html>
Qu est que j'ai mal fait ?

Merci d'avance

guigui69

Posté : 04 déc. 2007, 18:14
par Ryle
Ton bouton "ok" étant de type submit, lorsque tu cliques dessus, il envoi les données du formulaire à la page spécifiée dans l'attribut "action" du formulaire. Dans ton cas, tu en as deux :
action="<?php echo($_SERVER['PHP_SELF']); ?>" et action="modmatiere.php"

Va déjà falloir que l'une des deux quitte la ville et laisse sa place à l'autre :)

Posté : 05 déc. 2007, 15:28
par guigui69
ok c'est bien ce que je pensait, mais la fonction <?php echo($_SERVER['PHP_SELF']); ?> sert a quoi? j'ai pas compris a quoi elle sert.

Merci

Posté : 05 déc. 2007, 15:35
par AB
$_SERVER['PHP_SELF']
Le nom du fichier du script en cours d'exécution, par rapport à la racine web. Par exemple, $_SERVER['PHP_SELF'] dans le script situé à l'adresse http://www.monsite.com/test.php/foo.bar sera /test.php/foo.bar. La constante __FILE__ contient le chemin complet ainsi que le nom du fichier (i.e. inclut) courant. Si PHP fonctionne en ligne de commande, cette variable contient le nom du script depuis PHP 4.3.0. Dans les versions antérieures, cette variable n'était pas disponible.

Source
http://fr.php.net/reserved.variables

Posté : 05 déc. 2007, 15:46
par AB
Donc action = "<?php echo $_SERVER['PHP_SELF']?>" indique au formulaire d'aller sur la page en cours, c'est à dire de recharger ta page.
Cela indique que tu fais le traitement du formulaire dans la même page que le formulaire (cas assez courant).

C'est plus propre que de faire action = "" et plus portable que de faire action = "mapage.php" car en cas de changement de nom de ta page, <?php echo $_SERVER['PHP_SELF']?> renverra toujours la bonne valeur.

Posté : 06 déc. 2007, 15:21
par guigui69
Merci , comment je pourrais faire pour que quand j'appuie sur le bouton suivant cela parte sur la page suivante.

Car la j'ai modifier et cela ne change rien. En fait si je mets action ma page suivant étant donnée qui a besoin d'un refresh pour faire apparaitre la seconde liste il m'envoie sur la page suivante.

Merci

guigui69

Posté : 06 déc. 2007, 15:30
par Snipy
tu mets l'adresse de ta page suivante comme action :roll:

Posté : 06 déc. 2007, 16:53
par guigui69
ok , mais ça fonctionne pas car lors du premier refresh réaliser par la liste de roulante ca par sur la second page.

Comment faire ?

Posté : 07 déc. 2007, 13:00
par Ryle
Il te faut changer l'action du formulaire dynamiquement en fonction de ce que fait l'utilisateur. Tu peux par exemple laisser spécifiée la page suivante dans ton action, et lorsque l'utilisateur sélectionne un élément dans ta liste déroulante, avant de soumettre le formulaire avec submit(), il te suffit de modifier l'attribut action :
onChange="document.forms['chgsgamme'].action = '<?php echo $_SERVER['PHP_SELF']; ?>'; document.forms['chgsgamme'].submit();"
Ainsi lorsque l'utilisateur changera de valeur sélectionné, cela aura pour effet de modifier l'action du formulaire en spécifiant le chemin de la page courrante et de soumettre le formulaire. La page sera donc rechargée avec les données du formulaire. Et si l'utilisateur clic sur le bouton Envoyer, l'action ne sera pas modifiée et les données du formulaire seront soumises à la page suivante :)

Posté : 10 déc. 2007, 17:56
par guigui69
Oui c'est ca Merci je test ca demain et je reviens pour vous demandé des informations ou je coince^^