Petit pb UR d'un formulaire.

Discussion dans 'URL Rewriting et .htaccess' créé par vitalizo, 9 Octobre 2010.

  1. vitalizo
    vitalizo WRInaute impliqué
    Inscrit:
    27 Novembre 2005
    Messages:
    946
    J'aime reçus:
    0
    Bonjour,

    j'ai un form
    <form action="search.php" method="GET">
    J'ai qu'une variable qui est transmise.

    J'ai essayé:
    RewriteRule ^search-([a-zA-Z0-9]+)\.html$ /search.php?requete=$1 [L]

    Mais la règle ne s'opère pas.

    Une idée ?
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 184
    J'aime reçus:
    352
    C'est le navigateur qui passe les paramètres en _GET lors du submit.
    Le seul moyen c'est de rediriger.
     
  3. vitalizo
    vitalizo WRInaute impliqué
    Inscrit:
    27 Novembre 2005
    Messages:
    946
    J'aime reçus:
    0
    Justement c'est que je me suis dit, j'ai donc mis en début du fichier recherche2.php:
    session_start();
    $requete = htmlspecialchars($_GET['requete']))
    header("location:/recherche2-".$requete.'.html');

    Mais la redirection ne s'effectue point :p "La page n'est pas redirigée correctement"
     
  4. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 184
    J'aime reçus:
    352
    Il faut un espace après "Location:" http://php.net/manual/fr/function.header.php

    Et je pense que ce serait plus simple de faire un _POST vers search.php et ensuite faire la redirection pr passer les paramètres en _GET ;)
     
  5. vitalizo
    vitalizo WRInaute impliqué
    Inscrit:
    27 Novembre 2005
    Messages:
    946
    J'aime reçus:
    0
    Bon, je reprends à 0 pour être plus clair:

    mon formulaire:

    Code:
    <form action="search2.php" method="GET">
    <input type="text" name="requete" size="50" value="machin" onfocus="if(this.value='machin') { this.value='' }" onblur="if(this.value='') { this.value='machin' }">
    ma page search2
    Code:
    <?php       
     session_start();
     $_SESSION['requete']=htmlentities($_GET['requete']); 
     if (isset($_SESSION['requete'])){
    $requete=$_SESSION['requete'];}
    else {$requete = (htmlspecialchars($_GET['requete']));
    header("location:/search2-".$requete.'.html');}
      ?>
    Donc mon but est de transformer les url de type search2.php?requete=exemple en search2-exemple.html.

    Dans mon htaccess, je mets:
    Code:
    RewriteRule ^search2-([a-zA-Z0-9\-]+).html$ /search2.php?requete=$1 [L] 
    Quand je texte, cela me mets "Cette page Web présente une boucle de redirection.
    La page Web à l'adresse http://localhost/search2-exemple.html a déclenché trop de redirections"

    J'ai tenté de rajouter une variable dans l'url: search2-nom-$requete. Sans succès.

    Voilà mon soucis :)
     
  6. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Ben oui, tu pars en boucle... Ton formulaire envoie sur search2.php?requete=toto, qui fait un redirect sur search2-toto.html qui est en fait search2.php?requete=toto, qui fait un redirect vers la même chose, et ainsi de suite.

    Si tu veux faire ça, il te faut deux scripts différents: un qui fait le redirect, et l'autre qui gère le résultat.

    Alternativement, tu peux faire en sorte que ce soit le client (avec un JS) qui forme l'URL search2-toto.php.

    Et pourquoi utiliser une variable de session? Et il te manque de l'urlencode.

    Jacques.
     
  7. vitalizo
    vitalizo WRInaute impliqué
    Inscrit:
    27 Novembre 2005
    Messages:
    946
    J'aime reçus:
    0
    BOnjour,

    Ah ok, merci des explications, j'ai compris.

    J'utilise les sessions pour garder en mémoire la requete de l'internaute pour, plus tard, lui permettre de revenir sur la page de recherche de sa requête.