pb recup input avec GET
paysan hardi
Member
dans Entraide
bonjour,
jour de pluie= jour d'ordi
je fais un formulaire de recherche dans une page statique :
le select fonctionne, les 3 variables aussi si elles sont saisies en direct dans l'url
avant de polluer le forum, j'ai tenté :
- de traiter input par javascript (si ça marche pour le select) : mauvaise url
- de vider, changer form action : mauvaise url
- if (isset...){header.location....} : mauvaise url
chaque fois je me tape "index.php?gamme=index.php%3Fstatic010%2Fplantes%26gamme%3D001&nom=pho"
- je n'ai pas l'urlrewriting activé
je prends tous vos conseils, merci !
jour de pluie= jour d'ordi
je fais un formulaire de recherche dans une page statique :
[== PHP==]
global $plxShow;
$html = '';
$IMAGEPATH = $plxShow->plxMotor->aConf['images'];
$urlpage= "index.php?static010/plantes"; //$urlpage= $_SERVER['REQUEST_URI'];
$plante_id = plxUtils::strCheck(plxUtils::unSlash($_GET['plante']));
$gamme_id = plxUtils::strCheck(plxUtils::unSlash($_GET['gamme']));
$nom = plxUtils::strCheck(plxUtils::unSlash($_GET['nom']));
# champs de recherche
echo '<form method="GET" name="f_plantes" action="'.$plxShow->plxMotor->aConf['racine'].$urlpage.'">';
# select des gammes
$o= array();
$o["table"]="plantes_gamme";
$o["out"]="array";
$gammes = $plxShow->callHook('spxdatas::getData',$o);
echo '<span><select name="gamme" onchange="location.href = this.value;">'; // remplace submit();
echo '<option title"toutes" value="" '.$selected.'>Toutes les gammes</option>';
foreach ($gammes as $c)
{ $c1 = $c['plantes_gamme_id'];
$selected = ($c1==$gamme_id) ? 'selected': '';
$c1 =$urlpage.'&gamme='.$c1;
echo '<option title="'.$c1.' '.$c['desc'].'" value="'.$c1.'" '.$selected.'>'.$c['gamme'].'</option>';
}
echo'</select></span>';
# recherche sur un nom
?><span><input type="text" name="nom" value="<?php echo $nom ?>" style="width:200px;" title="entrez le mot ou texte à rechercher" placeholder="chercher par nom"
onChange="location.href('static010/plantes&mot='+this.value)"
/></span><?php
echo '</form>';
#créer le tableau global
$o2= array();
$o2["table"]="plantes";
//$o2["filter"]=$filter; //on filtrera après le tableau $plantes
$o2["out"]="array";
$plantes = $plxShow->callHook('spxdatas::getData',$o2);
$fiches_selected= array(); // tableau des fiches filtrées
# on applique les filters à tous ses enregistrements
foreach ($plantes as $p)
{ $id_fiche = $p['plantes_id'];
if(in_array($gamme_id, explode(' ', $p['gamme']))) { $fiches_selected[].=$id_fiche;}
if($plante_id==$p['plantes_id']) { $fiches_selected[].=$id_fiche;}
if($nom!="" AND strpos($p['genre'],$nom)!== false) { $fiches_selected[].=$id_fiche;}
}
if ($fiches_selected=="") {$fiches_selected[].=$plantes[0];} //si aucun tri affiche première fiche
$fiches_selected = array_unique($fiches_selected); // supprime les fiches en doublons
$fiches_selected = array_values($fiches_selected); // remet les clefs dans un bon ordre
$nbfiches = sizeof($fiches_selected); // compte le nombre de fiche unique
$i=0; // rang de fiche
# on prend dans le tableau filtré et on affiche
echo '<div class="col1">';
foreach ($plantes as $a)
{ if ($a["plantes_id"]==$fiches_selected[$i])
{ $famille= $a["famille"];
$genre= $a["genre"];
$espece= $a["espece"];
$urlfiche= $urlpage."&plante=".$a["plantes_id"];
$html .='<div class="resp">
<a href="'.$urlfiche.'" alt="no photo" title="ouvrir fiche individuelle" >
<b>'.$famille.' '.$genre.' '.$espece.'</b>
<img style="height:200px;" src='.$IMAGEPATH.$a["photo"].' alt="url absente" /></a>
</div>
';
$i++;
}
}
#affichage (prévoir sortie html2pdf)
echo $html;
echo '</div>';
le select fonctionne, les 3 variables aussi si elles sont saisies en direct dans l'url
avant de polluer le forum, j'ai tenté :
- de traiter input par javascript (si ça marche pour le select) : mauvaise url
- de vider, changer form action : mauvaise url
- if (isset...){header.location....} : mauvaise url
chaque fois je me tape "index.php?gamme=index.php%3Fstatic010%2Fplantes%26gamme%3D001&nom=pho"
- je n'ai pas l'urlrewriting activé
je prends tous vos conseils, merci !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Après, quand tu dis mauvaise url, qu'elle est l'erreur en question ?
j'ai mis en ligne sur http://paysanhardi.free.fr/index.php?static010/plantes&gamme=001
(imaginez un mur en pierre qui m'a ruiné les mains en background et un slider qui marche comme en local :cool: )
Tu mets une balise de type bloc (form) dans une balise de type inline (span). C'est pas bien.
Tu as un span fermant qui n'est pas ouvert.(</select></span><span>)
De manière générale, pourquoi passer par javascript pour traiter ton formulaire ? Pourquoi n'ajoutes-tu pas un bouton de soumission et un traitement par php ?
PS : J'ai navigué un peu. Pour la météo, tu as le site http://www.tameteo.com/ plutôt que d'inclure le site de météo france dans une iframe...
j'ai corrigé le slider et tes remarques, merci, je récupèrerai le mur plus tard
concernant mon form :
- avec action="'.$urlpage.'" ou action="" j'obtiens : http://paysanhardi.free.fr/index.php?nom=dfsdf&gamme=index.php%3Fstatic010%2Fplantes%26gamme%3D003
il semble y avoir une réecriture à l'envoi
j'ai testé avec un <input submit> j'obtiens encore ces url à rallonge
c'est la raison pour laquelle j'avais passé le select en javascript avec value="'.$urlpage.'&gamme='.$c1.'";
en mettant le select en commentaire j'obtiens : http://paysanhardi.free.fr/index.php?nom=dfsdf
je décommente et ça repart : http://paysanhardi.free.fr/index.php?nom=dfsdf&gamme=index.php%3Fstatic010%2Fplantes%26gamme%3D003
là je patauge !
Il faut utiliser un plugin qui utilise le hook plxMotorPreChauffageBegin pour pouvoir récupérer tes paramètres avant le filtrage. Regarde le fichier core/lib/class.plx.motor.php ligne 128 et inspire t'en.
Je viens de lire plx.motor.php, je n'y rajouterai pas une condition preg_match('/^staticBibi([0-9].../) ...quoique ce serai plus rapide ?
Je vais essayer en désossant plxMySearch ou un autre, ce sera plus propre, puis récupérer mes filtres par un callHook() dans la statique.
Je suis sûr que vous l'avez tous déjà fait, on a tjrs besoin d'un _GET.
Autre solution "moins propre", envoyer la variable par javascript (comme le select) mais je crains :
- de perdre le multicritères ou de m'emm* pour le mettre en place
- que ça ne marche que chez moi (PC vs Mac, Linux, android, etc..)
J'ai raison sur tout ?
- le constructeur de base (voir un exemple dans la doc) qui se cantonnera à appeler le hook plxMotorPreChauffageBegin,
- le hook plxMotorPreChauffageBegin dans lequel tu ajouteras ta condition pour récupérer tes variables à la façon de plxMotor.
Il ne faut pas modifier le fichier de plxMotor pour éviter de perdre ces modifications lors des mises à jour.
Un conseil : le javascript ne doit être utilisé que pour faciliter la vie et pas pour faire ce qui peut être fait en html/css/php.
D'ici là je posterai surement d'autres questions, le seul plugin à mon actif est une icone qui ouvre les articles dans l'administration, je mesure le temps que ça va prendre.
Concernant les mises à jour, j'étais croyant et je ne le suis plus, quand je tiens une version stable...avec TOUS les plugins qui suivent...je ne la lache plus.
Forcément j'ai chargé la nouvelle version 5.3+plxdatas x.x ...je testerai le transfert, mais je dois d'abord répondre à mon besoin de base botanique car elle me sert tous les jours.
Exemple :
$_GET => correspond au titre d'un article
$_GET => correspond à l'id d'un article
...
Fais moi le listing complet de ce que tu souhaites utiliser et leur correspondance...
Dans tous les cas mon pb vient du traitement de l'url sans javascript
La liste des champs à requêter serait trop longue (j'utilise actuellement un outil perso php+sql avec des accordéons javascript pour ne pas surcharger l'affichage)
concernant $_GET la variable sera utilisée sur une 20aine de champs avec
dans ma statique j'appelle le plugin par et l'url retournée est tjrs structurée http://localhost/Domaine/index.php?nom=ar&gamme=index.php?static010/plantes
j'ai raté qq chose non ?
pour que le plugin intervienne avant l'envoi du get, c'est tout le code qui précède le tri et l'affichage qui part dans le plugin ?
qu'est-ce qui reste dans la statique et qui part dans le plugin ?
l'intégralité du code est en début de post, mais je serais gêné que tu te tapes tout le boulot, j'ai juste besoin d'indications précises pour connaitre la procédure.
Ce matin je testerai les filtres dans le plugin.
Je pense préférable d'en mettre le moins possible dans le plugin:
- pour éviter la syntaxe de tous les échappements, entre doubles et simples quotes
- pour avoir un plugin qui puisse servir pour toutes les forms suivantes style $champ1=$plxShow->callhook('forms', 'input', 'champ1')
bonne journée
Le plugin peut prendre des paramètres. Relis la documentation du développeur pour savoir comment faire (globalement, les paramètres sont dans un array, chaque index correspondant à un paramètre).