Page 1 sur 2

php generant du html enfonction du choix sur une comboBox

Posté : 02 mai 2005, 13:15
par celsius
salut a tous,

j'ai actuellement un travail a faire sur une page php et cela fait pres d'une semaine que je cherche dans des bouquins et sur le net mais je n'arrive pas a trouver d'exemple similaire, je galere vraiment...
cette page php qui doit généré du html en fonction de ce que l'utilisateur choisit parmi 4 propositions: X, W, Y, Z

en gros le haut de la page php propose 4 choix dans une combo box (avec en plus un vide, dans la comboBox, par defaut lors de l'arrivée sur la page), et lorsque l'utilisateur choisi une proposition (c'est à dire lorsqu'il passe du choix vide par defaut a un clic sur le choix X) et bien le reste de la page devra généré un formulaire en html en fonction justement des caracteristique de X,

donc les pages X , Y , W, et Z sont differentes,

et la seule chose qui change dans la page est le formulaire de milieu de page, pas la combo Box par laquel le choix primaire est fait.

j'ai essayé avec onChange en javascript mais je n'arrive pas l'utiliser

et je me demande aussi ce que vous pensez de rediriger vers une page X dans la page actuelle ou de simplement généré du html dans la page actuel ?

voici une partie du code :


<th align="center">
<select name="choix" onChange="window.location=nav.choix[nav.choix.selectedIndex].value">
<option value=""> </option>
<option value='/stage/admin.php'>Ajouter un administrateur </option>
<option value=/stage/liste_user.php>>Ajouter un technicien </option>
<option value=/stage/confirmation.php>>Supprimer un administrateur </option>
<option value=/stage/accueil.php>>Supprimer un technicien </option>
</select>
</th>


si quelquechose n'est pas claire, posez moi la question merci de votre aide

Posté : 02 mai 2005, 13:18
par ouckileou
tu peux recharger ta page en incluant le fichier sélectionné dans la combobox

avec OnChange, tu soumets ton formulaire (=ta combobox) qui va recharger ta page

Code : Tout sélectionner

<form id="form1" action="<php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <select name="choix" onChange="document.getElementById('form1').submit();"> <option value=""> </option> <option value='/stage/admin.php'>Ajouter un administrateur </option> <option value=/stage/liste_user.php>>Ajouter un technicien </option> <option value=/stage/confirmation.php>>Supprimer un administrateur </option> <option value=/stage/accueil.php>>Supprimer un technicien </option> </select> </form>
// en début de fichier
$choix = (isset($_POST['choix']))?$_POST['choix']:null;

// là où tu veux inclure ton formulaire
if ($choix) include($choix);
tu peux quand même ajouter un petit bouton "submit" à ta combobox car si l'utilisateur n'a pas le javascript ça te pourri ta navigation

Posté : 02 mai 2005, 13:35
par Cyrano
Ça peut fonctionner avec le onchange : il faut que tu captures la sélection qui a été faite et tu alimentes un champ de type hidden. En cliquant sur le bouton, la page se recharge mais là, tu peux récupérer le paramètre du champ caché et choisir le contenu de ta page en fonction. Voici à peu près (à arranger selon ta mise en page, tester et fignoler au besoin) à quoi devrait ressembler ton formulaire:
<form id="choixform">
    <select name="choix" onChange="document.forms['choixform'].elements['choix'].value=this.value">
        <option value=""> </option>
        <option value="/stage/admin.php'">Ajouter un administrateur </option>
        <option value="/stage/liste_user.php">Ajouter un technicien </option>
        <option value="/stage/confirmation.php">Supprimer un administrateur </option>
        <option value="/stage/accueil.php">Supprimer un technicien </option>
    </select>
    <input type="hidden" name="choix" id="choix" value="" />
    <input type="submit" name="envoi" id="envoi" value="Valider le choix" />
</form>
Il te reste à récupérer la valeur choisie qui sera dans $_POST['choix']; si cette valeur est vide, tu charges la page par défaut, sinon, tu diriges vers l'include du formulaire correspondant.

Posté : 02 mai 2005, 13:52
par ouckileou
c'est ce que j'ai mis en gros, sauf que je trouve ça un peu tordu, pourquoi ne pas récupérer directement la valeur du select en soumettant le formulaire ?

là je ne vois pas l'intérêt d'alimenter un champ caché pour le lire ensuite... :)

Posté : 02 mai 2005, 13:57
par Cyrano
En y réfléchissant, j'avoue que tu as raison et on peut carrément supprimer le onchange et le champ caché: mais le principe de fonctionnement est le même: tu récupères la valeur envoyée en début de page, si vide, page par défaut sinon formulaire approprié.

Posté : 02 mai 2005, 14:15
par ouckileou
oui bien sûr le fonctionnement est le même et censé marcher :)
mais c'est juste que tu rajoutais une étape et je voyais pas pourquoi :roll: :wink:

Posté : 02 mai 2005, 14:25
par Cyrano
Même pas, je pensais à autre chose à cause d'un système que j'ai monté où je devais précisément faire comme ça et où je ne peux pas simplifier comme ici...

Mais finalement, ça fonctionne ou pas ton script ? Parce qu'en fin de compte, c'est surtout ça qui t'intéresse je présume ?

Posté : 02 mai 2005, 14:32
par ouckileou
ben je n'ai pas testé alors je ne peux pas t'assurer que ça fonctionne mais bon a priori y'a pas de raisons que ça ne fonctionne pas

seulement ce n'est pas moi qui ai posé la question :lol:
alors je propose, celsius dispose:)

Posté : 02 mai 2005, 14:37
par Cyrano
Décidément, c'est lundi et j'ai pas les yeux en face des trous ce aujourd'hui, je suis mûr pour une sieste je crois bien... #-o

Posté : 02 mai 2005, 15:48
par celsius
je vais essayer de tester vos idées de suite mais je vous préviens ça va pas etre gagner vu que je suis débutant en php et que je mis suis mis il ya 2 semaines , donc je vous préviens je risque de revenir assez souvent sur cette page...

en tout cas merci de vos réponses rapide

Posté : 03 mai 2005, 10:56
par celsius
j'ai compris vos code mais je pense que j'ai oubliez de précisez un point:

peut-on faire ce que j'ai précisez plus haut dans le post, MAIS sans le bouton "submit" pour envoyer le type de page a afficher, je veux que sa se fasse automatiquement lorsque l'on clic que le choix de la combo box comme sur ce lien qui n'as aucun submit :

http://horspool.org.uk/nz/picview.php?n ... ariro&id=1


vous voyez ce que je veux dire ?

Posté : 03 mai 2005, 11:04
par celsius
et aussi une petite precision les liens (admin.php, confirmation.php etc) que j'ai mis dans les value du select (comboBox) sont TOTALEMENT arbitraire, ce n'était qu'un test de ma part, ce n'est pas une autre page que je veux afficher mais ce qui sera affiché est deja dans la page mais sera généré grace au php (à l'aide d'un IF) si l'utilisateur l'as choisit dans la comboBox

Posté : 03 mai 2005, 15:28
par Invité
help !

j'ai utilisé le script de ouckileou mais il ne recharge pas la page, mais renvoit vers une page d'erreur:

Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/www/stage/ajout_suppress.php on line 25


dont voici le code :
       <form METHOD=POST id="form1" action=" <?php echo(" $_SERVER['PHP_SELF'] "); ?> ">
       <select name="choix" onChange="document.getElementById('form1').submit();">
               <option value=""> </option>
               <option value='ajout_admin'>Ajouter un administrateur </option>
               <option value='ajout_tech'>Ajouter un technicien </option>
               <option value='suppress_admin'>Supprimer un administrateur </option>
               <option value='suppress_tech'>Supprimer un technicien </option>
       </select>
       </form>
quant au code de cyrano je l'ai testé et adapté mais il ne semble pas vouloir me généré les pages désiré et il recharge la meme page avec seulement le choix de la comboBox qui change mais pas le reste de la page comme je le désirais.... :

       <form method=POST id="choixform">
       <select name="choix" onChange="document.forms['choixform'].elements['choix'].value=this.value">
                <option value=""> </option>
                <option value="ajout_admin">Ajouter un administrateur </option>
                <option value="ajout_tech">Ajouter un technicien </option>
                <option value="suppress_admin">Supprimer un administrateur </option>
                <option value="suppress_tech">Supprimer un technicien </option>
       </select>


       <input type="hidden" name="choix" id="choix" value="" />
       <input type="submit" name="envoi" id="envoi" value="Valider le choix" />
       </form>
       </td>
       </tr>
avec bien sur le IF qui choisit le reste du HTML (généré) de la page:
<?php

if ($_POST['choix']="")
{ echo("RIEN DU TOUT"); }
else if ($_POST['choix']="ajout_admin")
{ echo("<b>AJOUT ADMIN</b>"); }
     else if ($_POST['choix']="ajout_tech")
          { echo("<b>AJOUT TECH</b>"); }
          else if ($_POST['choix']="suppress_admin")
               { echo("<b>SUPPRESSION ADMIN</b>"); }
               else if ($_POST['choix']="suppress_tech")
                    { echo("<b>SUPPRESSION TECH</b>"); }

?>
dans cette seconde version, il affiche "AJOUT ADMIN" mais par defaut, lors de la selection dans la comboBox d'un autre choix, rien, la page se recharge mais avec toujours le meme "AJOUT ADMIN" et non le texte en fonction de ce que j'ai choisi

je vois vraiment pas comment faire....

Posté : 03 mai 2005, 15:29
par celsius
le post precedent est bien le mien mais j'ai seulement oublié de me logger

Posté : 03 mai 2005, 15:34
par Cyrano
Attention :
- = est un opérateur d'assignation:
- == est un opérteur de comparaison;
<?php

if ($_POST['choix']=="")
{
    echo("RIEN DU TOUT");
}
else if ($_POST['choix']=="ajout_admin")
{
    echo("<b>AJOUT ADMIN</b>");
}
else if ($_POST['choix']=="ajout_tech")
{
    echo("<b>AJOUT TECH</b>");
}
else if ($_POST['choix']=="suppress_admin")
{
    echo("<b>SUPPRESSION ADMIN</b>");
}
else if ($_POST['choix']=="suppress_tech")
{
    echo("<b>SUPPRESSION TECH</b>");
}

?>
Compare bien avec ton propre code.
En passant, indentes donc soigneusement, ce sera plus facile à lire, même pour toi (c'est pas mieux comme ça ?)