Formulaire avec method GET
Bonjour à vous,
je souhaite faire un formulaire dans une page static avec la méthode GET.
J'ai un sérieux doute et trou de mémoire sur le fonctionnement ...
Car ça me redirige sur la page /index.php?dep=06 ... d'où une erreur pour article inconnu !
Je souhaite une redirection vers /index.php?static2/nos-revendeurs&dep=06
( note: la méthod en post fonctionne bien, je souhaite passer en get pour un partage d'url )
Quel est l'action à renseigner pour le formulaire ?
Voici mon code actuel:
Le code de traitement des données de la page static2/nos-revendeurs:
Puis selon le résultat, on redirige vers la catégorie ou on affiche un message d'erreur:
Quelqu'un a une idée ?
Merci.
_____
D.San
je souhaite faire un formulaire dans une page static avec la méthode GET.
J'ai un sérieux doute et trou de mémoire sur le fonctionnement ...
Car ça me redirige sur la page /index.php?dep=06 ... d'où une erreur pour article inconnu !
Je souhaite une redirection vers /index.php?static2/nos-revendeurs&dep=06
( note: la méthod en post fonctionne bien, je souhaite passer en get pour un partage d'url )
Quel est l'action à renseigner pour le formulaire ?
Voici mon code actuel:
<form action="<?php $plxShow->urlRewrite("index.php?static2/nos-revendeurs"); ?>" method="get">
<label for="dep"><h3>Entrez un code département</h3></label>
<INPUT type="text" name="dep" size="3" maxlength="3">
<input type="submit" value="Chercher">
</form>
Le code de traitement des données de la page static2/nos-revendeurs:
<?php
$catTab = $plxShow->plxMotor->aCats; // récupération du tableau des catégories
$catUrl_rev = array(); // création d'un tableau avec seulement les id catégories + url
$catName_rev = array(); // création d'un tableau avec seulement les id catégories + nom
foreach($catTab as $k=>$value) {
$catUrl_rev[$k] = $catTab[$k]['url'];
$catName_rev[$k] = $catTab[$k]['name'];
}
if (isset($_GET["dep"]) AND !empty($_GET["dep"]) ){ // récupération des données formulaires
if(in_array("dep-".$_GET["dep"], $catUrl_rev)) { // vérification de l'adéquation du paramètre avec nos données possibles
$get_dep = "dep-".$_GET["dep"]; // article du département
$catNum = intval(array_search($get_dep, $catUrl_rev)); // formatage du numéro de la catégorie
$catName = array_search($get_dep, $catName_rev); // définition du nom de la catégore
}else{
echo "<p>Code département non valide</p>\n";
}
} else{}
$urlCat = "index.php?categorie".$catNum."/".$get_dep; // formatage de l'url de la catégorie visée
$catSearch = str_pad($catNum, 3, "0", STR_PAD_LEFT); // formatage du numéro de la catégorie ( 3 > 003 )
?>
Puis selon le résultat, on redirige vers la catégorie ou on affiche un message d'erreur:
<?php
if($get_dep){
$motif = '/^[0-9]{4}.+'.$catSearch.'+.[0-9]{3}.[0-9]{12}.[a-z0-9-]+.xml$/';
if($aFiles = $plxMotor->plxGlob_arts->query($motif,'art','rsort', 0, false, 'before')) { // s'il y a des articles dans la catégorie visée
header('Location: '.$urlCat); // on redirige vers la catégore
}else{ // sinon message d'erreur
echo "<p>Contactez-nous</p>";
}
}else{} ?>
Quelqu'un a une idée ?
Merci.
_____
D.San
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Place la ligne
<?php $plxShow = plxShow::getInstance(); ?>
au début de ta page
Edit : Préfère <?php global $plxShow; ?>, qui est plus performant.
ça ne change rien. Les 2 solutions écrites autant au début de la page static, ou du formulaire ( il est à part et est intégré un peu partout sur le site ... ), ou dans le header.php.
Qu'entends-tu par "$plxShow qui n'est pas initialisé", s'il ne l'était les fonctions de cet objet fonctionneraient quand-même ?
Merci de ton aide.
Que renvoie cette ligne chez toi ?
Pour que cette ligne fonctionne :
Il te faut avoir mis <?php global $plxShow ?> en amont.
NB. J'ai parlé de $plxShow non initialisé, car si on veut avoir accès aux fonctions de plxShow, il faut que la variable $plxShow contienne une référence vers un objet plxShow. C'est ce que permet de faire le global ou le getInstance.
ça joue donc bien sa fonction ... sans avoir mis le plxShow en global en amont ( il doit y être déjà quelque part ... mais je n'ai pas le souvenir de l'avoir mis ! ^^^)
Il y a un ? dans ton url. Après validation de ton formulaire ça en ferait deux... ce qui n'est pas possible...
http://localhost/le-site/index.php?static2/nos-revendeurs?dep=26
Donc, il faut que tu actives l'url rewriting (en plus c'est plus joli... :-))
Je vais continuer de creuser dans ce sens ( l'url est bien devenue comme je l'attendais, mais ça bloque après apparemment ... ).
Normalement le script devrait fonctionner avec ou sans l'urlRewriting.
( je l'active une fois tout le site fini, publié etc ... )
Fais un $_GET = intval($_GET); pour être sûr que ta variable ne contienne que des chiffres.
Initialise proprement tes variables car si on passe pas dans ton if, $catNum et $get_dep sont pas définis, or tu les utilises plus bas dans ton code. Si ton environnement de dev est bien paramétré, tu devrais avoir des warnings.
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
j'ai fait un test dans un PluXml propre et vierge:
dans le template static par défaut
avec le mode urlRewrite activé:
si on met 06 dans le champ recherche, cela devrait m'afficher 06 sur la page ... mais non ça n'affiche que "static1/statique-1"
C'est moi ou il y a un bug quelque part ..?
GROSSE RECTIFICATION: les codes ci-dessus étaient écrits dans le template static-revendeurs.php ( et la page static2/nos-revendeurs appelait ce template ).
ça doit changer la donne ( genre insérer global $plxShow ... qui doit-être prévu si le code est inséré dans la static ... )
Les essais d'écritures dans le template comme dans l'article static ne change rien quant à la variable GET.
L'url générée est du type http://localhost/le-site/static2/nos-revendeurs?dep=06
Lorsque j'écris manuellement http://localhost/le-site/static2/nos-revendeurs&dep=06, tout se passe comme prévu.
Est-ce que quelqu'un a déjà fait un formulaire avec la method GET ?
La method POST me pose aussi pb lorsque l'internaute clique sur page précédente ...
Note: je souhaite écrire ce code dans le template pour laisser libre au client de modifier le contenu de la page static
En attendant, je vais rester en mode POST pour ma présentation de demain :cool:
Plutôt que d'utiliser $plxShow->urlRewrite(index.php?p=static2/nos-revendeurs) dans l'attribut action de la balise form, j'utiliserais plutôt $plxShow->urlrewrite() tout court et un champ input de type hidden indiquant la page à traiter (ici static2/nos-revendeurs).
La récupération du tableau des variables passées (getGets) devrait permettre de retrouver tous ses petits.
*/ Déjà, lorsque j'écris ce lien
j'obtiens le & devient &#; ( avec ou sans la réécriture de lien )
Par contre fonctionne bien mais me renvoie une erreur W3C à cause du & seul ...
( j'utilise ces liens dans le footer. Il n'y a pas de formulaire )
*/ La recherche par formulaire maintenant:
dans le template static-revendeurs.php
génère l'url:
si je tape directement dans la barre d'adresse: tout fonctionne bien.
C'est que je commence un peu à criser là ...
Si vous avez des lumières, je suis preneur !
Merci
D.San
fallait y penser.
Me reste la génération de l'url via le formulaire maintenant ... et je suis à court d'idée.
Ta suggestion de mettre le paramètre "static2/nos-revendeurs" dans un champ hidden ne fonctionne pas
Cordialement,
et ensuite, en haut de page :
Je te laisse le soin de sécuriser un peu plus les $_GET, mais l'idée est là.
PS: à la réflexion, plutôt qu'un input pour le choix du département, je mettrais un select avec tous les départements disponibles afin d'éviter les erreurs de saisie.
Je trouve ça quand même bizarre de passer par ce genre méthode ...
Je devrais pouvoir renvoyer les résultats du formulaire vers une page donnée et non sur l'accueil pour refaire une redirection vers la page appropriée.
Faudrait voir si c'est un pb de PluXml ...
Concernant une liste de choix plutôt qu'un champ recherche:
il y a plus de 90 départements, ça fait une sacrée liste !
Autant faire comme dans le footer ...
( bon, ça me résoudrait pas mal de pb, je vais tenter pour voir )
Essaies ça :
et ensuite, en haut de page :
Question à deux sous : pourquoi tu tiens absolument à passer tes paramètres en get ?
Pour résoudre le problème de la page précédente en post, essaie avec un header après traitement des tes arguments.
http://amoweb.fr/fichiers/forum/12_0730-RAP-pagesStatiquesAmp.pdf
http://amoweb.fr/fichiers/forum/12_0730-RAP-pagesStatiquesAmp.odt
Amaury
Note pour moi-même : il faut vraiment que je me repenche sur les règles de ré-écriture du module apache !
Je pensais que les URLs de PluXml était du style
D'ailleurs, pourquoi n'avoir pas suivi ce modèle ?
Perso, je ne touche plus au core
J'ai finalement fait un formulaire avec les 2 méthodes puis une redirection en fonction.
Bien cordialement,
Nous allons effectuer des tests sur ces modifications, et essayer de les porter nativement dans PluXml. La modification du .htaccess est obligatoire (pour moi, c'est un bug), la modification de urlRewriting est une fonctionnalité.