Page 1 sur 2
Merci de ton aide !
Posté : 15 févr. 2006, 14:54
par coxine
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 !
Posté : 15 févr. 2006, 15:02
par Cyrano
Bien, j'ai créé un nouveau sujet : nouvelle question

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 ?
ok merci pour la création du nouveau
Posté : 15 févr. 2006, 15:18
par coxine
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.
Posté : 15 févr. 2006, 15:28
par Cyrano
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.
oups !
Posté : 15 févr. 2006, 15:34
par coxine

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"

, 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 !
Posté : 15 févr. 2006, 15:38
par Cyrano
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.
Posté : 15 févr. 2006, 16:23
par tom_nameless
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

:-( je suis allée
Posté : 15 févr. 2006, 19:49
par coxine
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"....
Je n'ose pas solliciter les modos pour qu'ils nous tapent tout fait du code....

Posté : 15 févr. 2006, 20:45
par Cyrano
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)
Merci Cyrano de me répondre
Posté : 16 févr. 2006, 11:41
par coxine
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
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.....
Posté : 16 févr. 2006, 11:47
par Cyrano
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...

je reformule mon besoin
Posté : 16 févr. 2006, 11:57
par coxine
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.
Posté : 16 févr. 2006, 12:04
par Cyrano
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.
merci !
Posté : 16 févr. 2006, 12:07
par coxine
je vais mettre en application ce que tu viens de me donner.
Je reviendrais après avoir planché !!!
Merci

re!
Posté : 16 févr. 2006, 13:56
par coxine
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 !
<?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
