Redirection et listes dynamiques liées

Eléphant du PHP | 254 Messages

15 févr. 2006, 14:54

J'ai résolu le problème!

Dis, j'ai lu et essayé d'appliquer les "Listes déroulantes dynamiques liées" de la FAQ !
bravo, cela m'a beaucoup aidée.
Je suis arrivée donc, à afficher dans le premier volet déroulant la catégorie, puis le second s'ouvre avec les sous-cat associées.
Pour l'affichage du résultat, je souhaiterai que cela soit une fonction moteur, et que l'on soit redirigés vers ma page "recherche.php".

J'ai donc modifié dans le formulaire:

Code : Tout sélectionner

<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
en

Code : Tout sélectionner

<form action="home/recherche.php?VARcategorie=<?php echo $_GET['VARcategorie']; ?>&VARmarque=<?php echo $_GET['VARmarque']; ?>" method="get" id="chgdept">
Le souci, est que je suis redirigée automatiquement sur ma page de résultats de recherche, juste après avoir sélectionné la catégorie (qui correspond à region dans ton tuto).

Je suis super débutante, je pense que je passe à côté de qqch, merci de m'aider !

Mammouth du PHP | 19672 Messages

15 févr. 2006, 15:02

Bien, j'ai créé un nouveau sujet : nouvelle question :arrow: nouveau post.

Ceci posé : la question est de savoir s'il ne manque pas un test dans tes modifications. En effet, le formulaire ne doit rediriger, si j'ai compris ce que tu veux faire, qu'après avoir sélectionné un élément de la seconde liste, c'est bien ça ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 254 Messages

15 févr. 2006, 15:18

post, effectivement, on change de sujet !

non en fait, le formulaire doit diriger vers la liste des réponses, qu'une fois sélectionnés
- la catégorie,
- la marque et
- après avoir cliqué sur "envoyer".

Cela vient-il du fait que je sois passée en méthode "GET" et que l'id du formulaire étant "chgdept", dès que je sélectionne la catégorie il redirige ?
<form action="home/recherche.php?VARcategorie=<?php echo $_GET['VARcategorie']; ?>&VARmarque=<?php echo $_GET['VARmarque']; ?>" method="get" id="chgdept"> 
<fieldset style="border: 3px double #333399"> 
<legend>Sélectionnez une catégorie</legend> 
<select name="VARcategorie" id="VARcategorie" onchange="document.forms['chgdept'].submit();"> 
  <option value="-1">- - - Choisissez une catégorie - - -</option>.....</form> 
Le "onchange" ne doit pas être bien renseigné.
L'url affiche bien
.../home/recherche.php?VARcategorie=1 mais la marque n'est pas prise en compte.

Je n'ai rien modifié d'autre que la méthode du formulaire, à priori en PHP_SELF, j'obtenais bien les réponses : "vous avez sélectionné la marque xxx de la catégorie xxxx" en haut de la page.

Mammouth du PHP | 19672 Messages

15 févr. 2006, 15:28

Alors question subsidiaire : pourquoi passer en méthode GET : tu ne gagnes rien. Enfin bon, à la limite, peu importe.

Dans le onchange, tu peux dans ce cas peut-être modifier un détail: en ajoutant un champ caché dans ton formulaire, tu en modifie la valeur avec un évènement JavaScript quand tu sélectionnes un élément de la seconde liste. Tu laisse PHP_SELF, mais au rechargement, tu vérifie la valeur de ce champ supplémentaire : selon la valeur, tu recharges la page elle-même avec les traitements nécessaires à la création de la seconde liste, ou bien tu reconstruis l'url de destination en ajoutant les paramètres récupérés et tu fais une redirection vers l'autre page.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 254 Messages

15 févr. 2006, 15:34

:? je me disais bien que j'allais trop loin, et que ce n'est pas de mon ressort. Je ne connais pas Javascript. Je suis "amateuse-passionnée" :lol: , mais là, ça sort de mes compétences.
Tant pis, je vais laisser mon bon vieux formulaire
type / categorie.
Mon souci était que je dois afficher toutes les categories de la base....et donc parfois, c'est difficile de s'y retrouver.
Merci en tous cas de ton aide !

Mammouth du PHP | 19672 Messages

15 févr. 2006, 15:38

C'est toute la difficulté du développement web, il faut des bases sur au moins 4 langages différents : HTML, JavaScript, PHP et SQL et on peu de préférence ajouter le cinquième : CSS.

Ceci dit, si tu regardes le code qui est inscrit actuellement dans le onchange, tu verras quand même que ce n'est pas particulièrement sorcier non-plus, la structure générale du langage est assez proche du PHP.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

tom_nameless
Invité n'ayant pas de compte PHPfrance

15 févr. 2006, 16:23

Je suis très intéressé par ce probleme...

Mais idem... Je suis nul en Javascript :?

Si tu pouvais me donner un coup de main :oops:

Eléphant du PHP | 254 Messages

15 févr. 2006, 19:49

voir une grosse partie des posts sur ce sujet par la fonction rechercher....
Mais en fait, malgré mes petites connaissances en PHP, CSS, je n'y connais rien au javascript.
Malgré le tuto du même menu en JAVASCRIPT, je n'arrive pas à rediriger vers la liste des réponses. Les boites marchent bien...mais quand je clique sur "envoyer".... :cry:
Je n'ose pas solliciter les modos pour qu'ils nous tapent tout fait du code.... :oops:

Mammouth du PHP | 19672 Messages

15 févr. 2006, 20:45

La première chose à savoir, c'est si tu utilises la formule 100% PHP ou celle utilisant JavaScript (je ne parle pas de la version avec AJAX)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 254 Messages

16 févr. 2006, 11:41

J'ai utilisé pour le moment la formule 100% PHP.
Si la seconde est plus "manipulable", je peux l'adapter !
C'est vrai que j'ai ce souci de reroutage automatique, une fois après avoir sélectionné la catégorie (region). Je devrais peut-être mettre un second formulaire ??? pour le bouton envoyer les données ?
Merci de t'attarder un peu sur mon pb :wink: :oops:


Ah, j'ai un souci, pour le menu Javascript :

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in d:\programmes\easyphp1-8\www\cw\menu.php on line 40

:? Je vais voir où ça peut clocher, je n'ai pas modifié les deux fichiers .js, juste les requêtes du fichier .php pour les faire concorder avec ma base.....
Modifié en dernier par coxine le 16 févr. 2006, 11:51, modifié 1 fois.

Mammouth du PHP | 19672 Messages

16 févr. 2006, 11:47

Bon,alors on va poser le problème simplement sur la base du tuto.

L'idée est de générer la liste des départements sur la base du choix dans la liste des régions: à ce stade, on reste sur la même page. Une fois le département sélectionné, il est envisageable de se diriger vers une autre page pour envoyer la sélection.

Mais d'après ce que tu dis, on dirait que tu voudrais aller sur une autre page dès la sélection de la région: dans ce cas, le principe des listes liées est sans intérêt. Je ne suis pas certain de bien saisir ce que tu veux faire... :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 254 Messages

16 févr. 2006, 11:57

Aujourd'hui, j'ai un menu (boite de recherche)
Avec une liste déroulante : region
Une seconde liste : departements
Un bouton Envoyer.
Le formulaire, me renvoie sur une page intitulée : recherche.php, dans laquelle je récupère les résultats de ma recherche : "région" sélectionnée, et "département" sélectionné.

Le souhait est de faciliter la recherche, une fois la région sélectionnée, je souhaite que les départements qui s'afficheraient dans la seconde liste, ne soient liés qu'à la région.
ex. :
Région A = 5 départements
Région B = 15 départements
Région C = 1 département.

Au lieu d'afficher les 21 départements, je veux aider l'internaute à s'y retouver.

Puis une fois la région, et le département choisi, on clique sur RECHERCHER....

Voilà en gros ce que je veux faire.
Donc l'utilisation du menu listes dynamiques liées, m'intéressait énormément. Il fonctionne bien en PHP_SELf, mais plus quand je renseigne différement l'action du formulaire.

Mammouth du PHP | 19672 Messages

16 févr. 2006, 12:04

Bon, je vais te donner une piste de solution : il va falloir un petit peu de JavaScript :

Lors du premier chargement, tu n'auras que les régions . Ajoute un champ caché dans le formulaire :
<input type="hidden" name="choixdept_ok" id="choixdept_ok" value="-1" />
Dans la balise <select> de la liste des département, ajoute une instruction onchange :
<select name="dept" id="dept" onchange="document.forms['id_du_formulaire'].elements['choixdept_ok'].value='ok'">
En début de script, quand tu récupères ce qui a été sélectionné dans le formulaire, teste la valeur de $_POST['choixdept_ok'] : si cette variable retourne "-1", tu peux faire une redirection vers l'autre page en ajoutant les paramètres à l'url des régions et dépertement choisis. Sinon, c'est que seule la région a été choisie et qu'il reste à sélectionner un dépertement.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 254 Messages

16 févr. 2006, 12:07

je vais mettre en application ce que tu viens de me donner.
Je reviendrais après avoir planché !!!
Merci :)

Eléphant du PHP | 254 Messages

16 févr. 2006, 13:56

Je me suis penchée sur une autre solution.
Je rajoute un second formulaire, sous le premier, et je récupère les valeurs sélectionnées.
Tout va bien, je récupère la variable "region", mais pas la variable "departement" (undefined index VARmarque).
Il doit y avoir une vérification que j'oublie. Mais je ne trouve pas.
Je te mets mon code, Où ai-je fait une erreur ? :?:
Merci de m'éclairer ! :idea: :shock:
<?php 
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"); 
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */ 
$serveur = "localhost"; 
$admin   = "root"; 
$mdp     = ""; 
$base    = "base"; 
/* On récupère si elle existe la valeur de la région envoyée par le formulaire */ 
$idr = isset($_POST['VARcategorie'])?$_POST['VARcategorie']:null; 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" /> 
<title>Sélectionner un marque selon la catégorie choisie</title> 
</head> 
<body style="font-family: verdana, helvetica, sans-serif; font-size: 85%"> 
 <h3>Rechercher</h3> 
 <?php 
/* On établit la connexion à MySQL avec mysql_pconnect() plutôt qu'avec mysql_connect() 
*  car on aura besoin de la connexion un peu plus loin dans le script */ 
$connexion = mysql_pconnect($serveur, $admin, $mdp); 
if($connexion != false) 
{ 
    $choixbase = mysql_select_db($base, $connexion); 
    $sql1 = "SELECT `id_type`, `categorie`". 
    " FROM `type`". 
    " ORDER BY `id_type`"; 
    $rech_regions = mysql_query($sql1); 
    $code_region = array(); 
    $region = array(); 
    /* On active un compteur pour les régions */ 
    $nb_regions = 0; 
    if($rech_regions != false) 
    { 
        while($ligne = mysql_fetch_assoc($rech_regions)) 
        { 
            array_push($code_region, $ligne['id_type']); 
            array_push($region, $ligne['categorie']); 

            /* On incrémente de compteur */ 
            $nb_regions++; 
        } 
    } 
    ?> 
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">  
<fieldset style="border: 3px double #333399"> 
<legend>Sélectionnez une catégorie</legend> 
<select name="VARcategorie" id="VARcategorie" onchange="document.forms['chgdept'].submit();">
  <option value="-1" selected="selected">- - - Choisissez une catégorie - - -</option> 
    <?php 
    for($i = 0; $i < $nb_regions; $i++) 
    { 
?> 
  <option value="<?php echo($code_region[$i]); ?>"<?php echo((isset($idr) && $idr == $code_region[$i])?" selected=\"selected\"":null); ?>><?php echo($region[$i]); ?></option> 
<?php 
    } 
    ?> 
</select> 
    <?php 
    mysql_free_result($rech_regions); 
    /* On commence par vérifier si on a envoyé un numéro de région et le cas échéant s'il est différent de -1 */ 

    if(isset($idr) && $idr != -1) 
    { 
        /* Cération de la requête pour avoir les départements de cette région */ 
        $sql2 = "SELECT `id_marque`, `marque`". 
        " FROM `marque`". 
        " WHERE `id_type` = ". $idr ."". 
        " ORDER BY `id_marque`;"; 
        if($connexion != false) 
        { 
            $rech_dept = mysql_query($sql2, $connexion); 
            /* Un petit compteur pour les départements */ 
            $nd = 0; 
            /* On crée deux tableaux pour les numéros et les noms des départements */ 
            $code_dept = array(); 
            $nom_dept = array(); 
            /* On va mettre les numéros et noms des départements dans les deux tableaux */ 
            while($ligne_dept = mysql_fetch_assoc($rech_dept)) 
            { 
                array_push($code_dept, $ligne_dept['id_marque']); 
                array_push($nom_dept, $ligne_dept['marque']); 
                $nd++; 
            } 
            /* Maintenant on peut construire la liste déroulante */ 
            ?> 
<select name="VARmarque" id="VARmarque"> 
            <?php 
            for($d = 0; $d<$nd; $d++) 
            { 
                ?> 
  <option value="<?php echo($code_dept[$d]); ?>"<?php echo((isset($dept_selectionne) && $dept_selectionne == $code_dept[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_dept[$d]); ?></option> 
                <?php 
            } 
?> 
</select> 
<?php 
        } 
        /* Un petit coup de balai */ 
        mysql_free_result($rech_dept); 
    } 
?>
</fieldset> 
</form> 
<form id="form1" method="post" action="home/recherche.php?VARcategorie=<?php echo $_POST['VARcategorie']; ?>&VARmarque=<?php echo $_POST['VARmarque']; ?>">

<input name="VARcategorie" type="hidden" id="VARcategorie" value="<?php echo $_POST['VARcategorie']; ?>" />
  <input name="VARmarque" type="hidden" id="VARmarque" value="<?php echo $_POST['VARmarque']; ?>" />
 
  <input name="ok" type="submit" id="ok" value="Envoyer" />
</form> 
<?php 
    /* Terminé, on ferme la connexion */ 
    mysql_close($connexion); 
} 
else 
{ 
    /* Si on arrive là, c'est pas bon signe, il faut vérifier les 
    * paramètres de connexion, mot de passe, serveur pas démarré etc... */ 
?>
 
<p>Un incident s'est produit lors de la connexion à la base de données, veuillez essayer à nouveau ultérieurement.</p> 
<?php 
} 
?> 
</body>
</html> 
Je sais que je dois récupérer la valeur 'VARmarque' envoyée par le premier formulaire, mais je ne sais pas à quel endroit.
merci :oops: