Page 1 sur 1

probleme pour garder une séléction de liste déroulante

Posté : 31 janv. 2009, 14:35
par graffx
Salut a tous,

je pense que vous allez être les seuls a pouvoir m' aider, je dis ca car les deux dernieres fois ou j' ai posté, on m' a rarement autant apporté qu' ici.


Voila le petit hic, j' éssaie de construire un petit site d' annonce, bon je n' en suis qu' au stricti début.

J' ai sur une page ajout_annonce.php (pour les visiteurs voulant deposer une annonce) :

Code : Tout sélectionner

<form method="post" action=""> <select name="cat" onchange="submit()"> > <option>>--choisissez une catégorie--<</option> <option style='background-color:#CCFFFF' disabled>VEHICULES</option> <option value="automobiles">Automobiles</option> <option>Motos</option> <option>Camping</option> <option>Utilitaires</option> <option>Equipements</option> <option>Tuning</option> </select> </form>

Bon jusque la, rien d' anormal.

Ce que je souhaite dans ce formulaire, c' est que lorsque l' on choisit sa catégorie, la suite du formulaire corréspondat au choix apparait.

Vous imaginez que pour "automobiles" ou bien "jardinage", le type de formulaire ne sera pas du tout le meme.

J' ai ensuite dans la même page plus bas ceci :

Code : Tout sélectionner

<?php $r=$_POST["cat"]; if ($r=="automobiles") include("includes/form_ajout/automobiles.php"); if ($r=="motos") include("includes/form_ajout/motos.php"); if ($r=="camping") include("includes/form_ajout/camping.php"); if ($r=="utilitaires") include("includes/form_ajout/utilitaires.php"); if ($r=="equipements") include("includes/form_ajout/equipements.php"); if ($r=="tuning") include("includes/form_ajout/tuning.php"); ?>

Pour l' instant, ca fonctionne, à un détail prés. Si le visiteur choisit "automobiles", la suite du formulaire correspondat apparait bien sous le choix de catégorie, mais la liste déroulante du choix de catégorie revient automatiquement sur:

Code : Tout sélectionner

>--choisissez une catégorie--<


Il doit me manquer une astuce mais je pense que je ne la connais pas. Quelqu' un aurait un super conseil pour moi svp? :lol:


En attendant, je vous dis bon week end et peu etre a tout a l heure! :roll:

Posté : 31 janv. 2009, 16:49
par Stef
Hello,

Tu n'indiques aucun fichier pour traiter le formulaire! le champ "action" dans la balise "form" au début de ton formulaire est vide...

Il faut appeler le fichier qui va traiter le formulaire; soit le fichier en cours, soit un autre!

Posté : 31 janv. 2009, 20:03
par graffx
Oui je sais, mais mon probleme n' est pas le traitement de la page aprés envoi :wink:


Bon pour mieux expliquer, regardez:

Seule le lien "automobiles" a des scribouillis pour montrer que ca fonctionne, seulement le nom de la catégorie disparais, hors j' en ai besoin pour le traitement de la page aprés, du nom de cette catégorie.


Une idée?

http://piot.mickael.free.fr/ajout_annonce_test.php

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 31 janv. 2009, 20:50
par Stef
ok j'ai regardé et essayé...

je maintiens (peut-être que je me trompe, je suis comme toi un débutant) que si tu ne mets rien dans "action" le traitement du formulaire ne peut s'exécuter tel que tu l'escomptes!


y a un ordre si tu veux obtenir ce que tu souhaites:

1. ton formulaire te permet de recuillir des données
2. vers le traitement que tu as définis

Posté : 31 janv. 2009, 23:49
par graffx
D' accord, donc en fait tu penses que si je lui met une page action genre action="traitement_page.php", cela changera quelque chose pour le fait de garder la catégorie à l' écran?

Je finis ma partie cs et je vais essayer, lol, aprés ca va être encore plus dur, ce n' est que le début, car toutes les annonces doivent être validées par moi et ca, ca va pas etre facile ^^


edit: nope, ca ne change rien, mais je le savais un petit peu.

Je me demande simplement si je dosi utiliser une commande php ou javascript pour le détail qui me gêne...

Posté : 01 févr. 2009, 05:54
par Stef
Javascript sera peut-ête plus adapté pour réaliser ce que tu veux!

et puis pense aussi que tu dois placer ton include dans le formulaire si tu veux qu'elle soit traiter avec le reste du formulaire...

pour le coup du javascript, il faut peut-être écrire une fonction dans laquelle les options de ton select sont représentés par des variables: lorsque l'utilisateur choisis dans la liste ça exécute ta fonction qui selon la variable que tu lui envoie va afficher ce que tu veux...

Posté : 01 févr. 2009, 17:04
par graffx
Bon alors j' ai un souci, en effet, si j' avais mis action="", c' était pour la bonne raison que tout se trouvait sur la meme page.

En ajoutant action="traitement_page", des que je choisi une catégorie, la page change. Recliquez sur le lien plus haut pour voir.


J' avoue que je ne vois pas trop coment me sortir de ce puzzle, pour imager, je me retrouve avec un formulaire de ce type:

Code : Tout sélectionner

<form> liste_premiere =>formulaire qui apparait en fonction de la categorie choisie SUR LA MEME PAGE </form> or pour etre bien <form> action_traitement_page.php (liste_premiere + ce qui suit et donc forumialre interne au global) </form>
Bon en fait je vois aps trop comment expliquer, regardez le lien, j' ai rajouté action="traitement", ce qui fait tout foirer quand on choisi une catégorie

Pour etre bien il faudrait que ce formulaire avec include soit a l' interieur d' un autre formulaire.


Bref, SOS!


edit:

je ne vois pas quoi faire, vraiment, je vous remontre:



ajout_annonce.php:

Code : Tout sélectionner

<form method="post" action=""> <select name="cat" onchange="submit()"> <option disabled selected="selected">>--choisissez une catégorie--<</option> <option style='background-color:#CCFFFF' disabled>VEHICULES</option> <option value="automobiles">Automobiles</option> <option>Motos</option> <option>Camping</option> <option>Utilitaires</option> <option>Equipements</option> <option>Tuning</option> <option>Casse/pieces</option> <option>Autres</option> </select> </form> </td> </tr> <tr> <td height="46" colspan="3"><center><?php $r=$_POST["cat"]; if ($r=="automobiles") include("includes/form_ajout/automobiles.php"); if ($r=="motos") include("includes/form_ajout/motos.php"); if ($r=="camping") include("includes/form_ajout/camping.php"); if ($r=="utilitaires") include("includes/form_ajout/utilitaires.php"); if ($r=="equipements") include("includes/form_ajout/equipements.php"); if ($r=="tuning") include("includes/form_ajout/tuning.php"); ?>

Puis include/forms/automobiles.php :

tout le reste du formulaire.


Le hic, est que action="" joue sur la liste déroulante.

Si je ne met rien dans action, ma page ne peut pas etre traitée, si je met action="traitement.php", des que je choisis une catégorie (par exemple "automobiles", la page change pour traitement.php.


Svp, aidez moi a résoudre ce souci, ca m' embeterai de tout recommencer, parce que je vois pas d' autres facons de m' y prendre, étant low level en php.

Aprés si j' ai pas le choix....

Mais bon, il doit bien y avoir un moyen d' envelopper cette liste déroulante quand même :cry:

Posté : 02 févr. 2009, 22:09
par Stef
hello mec,
essaie de mettre "ajout_annonce.php" en paramètre de action!

Posté : 03 févr. 2009, 20:03
par graffx
Je ne peux pas faire cela, car ajout_annonce.php est la page actuelle :cry:

Je crois que je vais devoir recommencer à zero en trouvant une autre stratégie, mais mon niveau est pas assez élevé. :roll:

Posté : 05 févr. 2009, 01:49
par rolusseum
Un truc du genre, ça pourrait aller?
A améliorer, bien sûr...
<?php
$value_categories_sess='Selectionner';
if(!empty($_POST['categories']){
  $value_categories_sess=$_POST['categories']; 
  if ($value_categories_sess=="automobiles") include("includes/form_ajout/automobiles.php");
  if ($value_categories_sess=="motos") include("includes/form_ajout/motos.php"); 
}
<form method="post" action="<?php $_SERVER['PHP_SELF'];?>">
<select name="categories">
  <?php
   $array_categories=array('Selectionner','Auto','Moto','Camping','Utilitaires');
   $j=0;
    while($j<count($array_categories)){
    ?>
    <option value="<?php echo $array_categories[$j];?>"
      <?php  if($array_categories[$j]==$value_categories_sess)
                {
                  echo 'selected="selected"';
                 } 
       ?>
     >
     <?php echo $array_categories[$j];?>
    </option>
    <?php  $j++;
    }
    ?>
 </select>
</form>

Posté : 05 févr. 2009, 07:34
par graffx
Oula, bon déjà merci pour ton code, que je ne comprend pas et qui me donne mal au crane parce que je viens de me lever :lol:

Je regarde ca ce soir pour déchiffrer ce que tu m' a mis^^


En attendant, merci d' avoir répondu :wink:

Posté : 05 févr. 2009, 14:41
par rolusseum
Il faut procéder par étape.

Etapes obligatoires
1. Création d'un formulaire simple en HTML valide ;
2. Gestion des données côté serveur (PHP) : récupération, vérification, traitement ;

Etapes optionnelles
3. Gestion des données côté client (JavaScript) : récupération, vérification ;
4. Amélioration de l'ergonomie et du confort d'utilisation (CSS, JavaScript).


Petite modif pour avoir par défaut "selectionnez une categorie" + ajout bouton submit
<?php
$value_categories_sess='';
//Si form envoyé 
if(!empty($_POST['envoiForm']){
  $value_categories_sess=$_POST['categories']; 
  if ($value_categories_sess=="automobiles") include("includes/form_ajout/automobiles.php");
  if ($value_categories_sess=="motos") include("includes/form_ajout/motos.php"); 
}
<form method="post" action="<?php $_SERVER['PHP_SELF'];?>">
<select name="categories">
 <option value="">Selectionnez une categorie</option>
  <?php
   $array_categories=array('Auto','Moto','Camping','Utilitaires');
   $j=0;
    while($j<count($array_categories)){
    ?>
    <option value="<?php echo $array_categories[$j];?>"
      <?php  if($array_categories[$j]==$value_categories_sess)
                {
                  echo 'selected="selected"';
                 } 
       ?>
     >
     <?php echo $array_categories[$j];?>
    </option>
    <?php  $j++;
    }
    ?>
 </select>
<input type="submit" name="envoiForm"  alt="envoyer"/>
</form>