Changer l'action d'un formulaire de recherche en PHP

cs_JABE Messages postés 13 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 9 juillet 2009 - 15 mars 2009 à 18:28
cs_JABE Messages postés 13 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 9 juillet 2009 - 9 juil. 2009 à 17:01
Bonjour,

Je cherche un moyen de changer l'action d'un formulaire de recherche en PHP.

Exemple de code HTML:

<!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">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Changement en PHP</title>
</head>

<form action="action.php" method="post">

<label for="youtube">Youtube</label>
<label for="dailymotion">Dailymotion</label>
<label for="google_video">Google Video</label>

</form>

</html>

Maintenant c'est pour le fichier action.php que je suis largué...

En fait il faudrait que lorsque le bouton radio youtube est coché ça lance une recherche sur:
http://www.youtube.com/results?search_type=&amp;search_query=
et donc qu'après query = ça récupère le texte remplit dans le formulaire.

Par contre si dailymotion est coché ça lancerait:
http://www.dailymotion.com/relevance/search/
Et si Google Video est coché ça lancerait:
http://video.google.com/videosearch?q=

J'ai cherché en vain des codes équivalents en PHP (et non en Javascript) et je n'ai rien trouvé, voilà pourquoi je fais appel à vous .

4 réponses

stanilou Messages postés 193 Date d'inscription mercredi 5 mai 2004 Statut Membre Dernière intervention 18 novembre 2009
20 mars 2009 à 19:56
Tout simplement car c'est impossible en PHP... La seule façon serais que quand tu clique sur ton bouton radio, ça recharge ta page en détectant le bouton radio précedement coché pour modifier le contenu du champ "action"....

Passe par le javascript, c'est vraiment pas compliqué pour faire ça.
0
cs_JABE Messages postés 13 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 9 juillet 2009
20 mars 2009 à 23:28
Citation de stanilou: "Tout simplement car c'est impossible en PHP"

Si c'est possible en PHP !
Je me suis pris la tête dessus et j'ai réussi voir ici:
http://www.jabe.fr/testphpok.html

Ça marche parfaitement mais j'aimerais améliorer mon code pour l'alléger.

En fait avec le code PHP actuel change l'action du formulaire en fonction de ce que je mets comme value="" sur le bouton radio, j'aimerais faire la même chose mais en fonction de l'id du bouton radio.
Ça allégera un peu mon code car j'utilise déjà les id pour les <label>.
Mais comment faire ça en PHP ?
En javascript il faut passer par un getElementById mais en PHP ?

Voici mon code php actuel:
<?php

$champ_de_recherche = trim($_POST['champ_video']);
$moteur_de_recherche = trim($_POST['video']);

if (empty($champ_de_recherche)) {

echo "Veuillez entrer une valeur de recherche";

} else {

$url_params = preg_replace('/(\ )+/', '+', $champ_de_recherche);

switch ($moteur_de_recherche) {

case 'youtube':
$url = 'http://www.youtube.com/results?search_type=&amp;search_query=' . $url_params;
header('Location: ' . $url);
break;

case 'dailymotion':
$url = 'http://www.dailymotion.com/relevance/search/' . $url_params;
header('Location: ' . $url);
break;

case 'google_video':
$url = 'http://video.google.com/videosearch?q=' . $url_params;
header('Location: ' . $url);
break;

default:
echo 'Veuillez s&eacute;lectionner un moteur de recherche';
break;
}
}
?>

Merci d'avance pour votre aide.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
21 mars 2009 à 03:04
Salut,

Je n'ai pas tout lu mais :
Changer l'action d'un formulaire de recherche en PHP
= > c'est impossible en PHP, comme le dit Stanilou.
J'imagine que tu t'es mal exprimé car :
L'"action" d'un formulaire c'est ça :
<form method="post" action="bidule.php" >
== impossible à modifier par PHP une fois envoyé au client.
Que tu gères les radios côté php et que tu rediriges vers le moteur qui va bien est une chose, mais ce n'est pas une modification de l'action du formulaire.
En somme ton sujet prête à confusion.

[...]value="" sur le bouton radio, j'aimerais faire la même chose mais en fonction de l'id du bouton radio
=>
Ce qui va surtout alourdir ton code c'est de vouloir passer par des chemins exotiques.
Pour moi ton code ne devrait pas être changer dans ce sens; tu n'as que 3 choix, inutile de chercher la petite bête (avec plusieurs dizaines de choix il faudrait sans doute procéder autrement) Et en plus il est bien plus lisible comme ça !!

Si tu veux alléger pense plutôt à ça : $moteur_de_recherche trim($_POST['video']); > ne sert à rien

header('Location: ' . $url);
> tu le répètes à chaque fois > ne sert à rien
=>
switch ( $_POST['video'] ) {
  case 'bidule':
  $url = 'patati';
  break;
  etc ...

}
header('Location:'.$url);

default:
echo 'Veuillez s&eacute;lectionner un moteur de recherche';
break;
= > ne sert à rien puisque tu as forcement un radio actif (rien à voir avec les centrales nucléaires hein)
$url_params preg_replace('/(\ )+/', '+', $champ_de_recherche); > en terme d'allégement la regex n'est peut être pas le meilleur choix (pas testé, à voir)

Tu pourrai faire encore bien mieux, comme virer tout le switch et faire un truc du genre :
$url = array('youtube'=>'http://www.youtube.com/results?search_type=&amp;search_query=',
etc...);
header('Location:'.$url[$_POST['video']].$url_params);

En gros, si tu cherche un allégement réduit ton code d'une quinzaine de ligne mais ne cherche pas à réinventer la poudre côté données formulaire.

Cordialement,

Kohntark -
0
cs_JABE Messages postés 13 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 9 juillet 2009
9 juil. 2009 à 17:01
Bonjour,

Je remonte ce topic car il y a du nouveau, merci à kohntark
pour ses remarques, j’en ai pris note, et j’ai fait évoluer mon code dispoici.

Par contre kohntark m’avait dit que:




$moteur_de_recherche
= trim($_POST['video']);


=> ne sert à rien



Mais quand je l’enlève ça ne fonctionne plus.



D'autre part dans mon code actuel j’utilise 2 fichiers d’actions
différents , un pour la recherche audio et un pour la recherche vidéo,
existe-t-il un moyen de fusionner ces actions dans un seul fichier action.php
mais en gardant 2 formulaires différents ?



Je pense que ce serait mieux car le fichier d’action ne
serait chargé qu’une fois par les visiteurs du site.



Voici les code php actuels :



audio_action.php :



<?php



$champ_de_recherche = trim($_POST['champ_audio']);



$moteur_de_recherche = trim($_POST['audio']);



$url_params = preg_replace('/(\ )+/', '+',
$champ_de_recherche);




$url =
array('deezer'=>'http://www.deezer.com/s.php?s=',
'jiwa'=>'http://www.jiwa.fm/#search/track/',
'last.fm'=>'http://www.last.fm/music?q=');







header('Location:'.$url[$_POST['audio']].$url_params)






?>




 






video_action.php :



<?php



$champ_de_recherche = trim($_POST['champ_video']);



$moteur_de_recherche = trim($_POST['video']);



$url_params = preg_replace('/(\ )+/', '+',
$champ_de_recherche);




$url =
array('youtube'=>'http://www.youtube.com/results?search_type=&amp;search_query=',
'dailymotion'=>'http://www.dailymotion.com/relevance/search/',
'google_video'=>'http://video.google.com/videosearch?q=');







header('Location:'.$url[$_POST['video']].$url_params)






?>




 






Autre problème pour faire une recherche sur Jiwa il faut que
ça soit sous la forme :




http://www.jiwa.fm/#search/track/{%22q%22%3A%22mots+cles%22}




Où « mots+cles » représente les mots tapés par l’utilisateur.



Seulement il y a les caractères %22} après les termes de
recherche, et sans ces caractères ça ne fonctionne pas.



Donc comment faire évoluer mon code PHP actuel pour que ça
prenne en compte les caractères qu’il y a après les termes de recherche ?




Merci encore pour votre aide.
0
Rejoignez-nous