URL rewriting et formulaire

Nouveau WRInaute
Bonjour,

Je me permet de poster ce message afin de vous faire part d'un problème que je n'arrive pas à solutionner.

J'ai suivi la méthode de "Spout"
https://www.webrankinfo.com/forum/pratique-htaccess-lire-avant-poser-t13288 ... l#p1217718
Mais je coince sur un petite point .

Mon formulaire
Code:
	<form method="GET" action="">
		Enter a value for $_POST['some_text']: <input type="text" name="some_text" />
		<input type="submit" />
	</form>

Traitement de données URL
Code:
$type = 'GET';//QUERY_STRING, REQUEST_URI, PATH_INFO ou GET

switch ($type) {
    case 'QUERY_STRING':
    case 'PATH_INFO':
        $url = $_SERVER[$type];
        break;

    case 'REQUEST_URI':
        $url = substr($_SERVER[$type], strlen($_SERVER['SCRIPT_NAME']));
        break;

    case 'GET':
        $url = $_GET['some_text'];
        break;

    default:
        break;
}

$params = explode('/', $url);
array_shift($params);//Suppression du premier paramètre vide

//Récupération des variables pour l'exemple: http://example.com/module/action/param1/param2
list($module, $action, $param1, $param2) = $params;
echo sprintf('module: %s<br />action: %s<br />param1: %s<br />param2: %s<br />', $module, $action, $param1, $param2);

.Htaccess
Code:
Options -Indexes
RewriteOptions Inherit
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^recherche/(.+)$ recherche.php?some_text=/$1 [L,QSA]

Traitement du code (ça fonctionne)
Code:
if(isset($_GET['some_text']) && $_GET['some_text'] != NULL)
	{
	$requete = rename_dir($_GET['some_text']);
	//$requete_new=explode("recherche.php?requete=", $_SERVER['REQUEST_URI']);
	//if(rename_dir($requete_new[1])!=rename_dir($_SESSION['some_text']) && $requete_new[1]!=NULL){$requete=$requete_new[1];}
	$req = $GLOBALS['connexion']->prepare("SELECT * FROM cleusb WHERE ref LIKE :requete or gamme LIKE :requete ORDER BY id DESC");
	$req->execute(array('requete' => '%'.$requete.'%'));
	$nb_resultats = $req->rowCount(); 
	if($nb_resultats != 0)
		{?>
		<h3>R&eacute;sultats de votre recherche.</h3>
		<p>Nous avons trouv&eacute; <?php echo $nb_resultats; 
		
		
		if($nb_resultats > 1) { echo 'r&eacute;sultats'; } else { echo 'r&eacute;sultat'; } 
		?>
		dans notre base de donn&eacute;es. Voici les fonctions que nous avons trouv&eacute;es :<br/><br/>
		<?php
		while( $donnees = $req->fetch(PDO::FETCH_OBJ) )
			{
			?>
			<a href="fonction.php?id=<? echo $donnees->id; ?>"><? echo $donnees->ref ?></a><br/>
			<?php
			} 
		?>
		<br/>
		<br/>
		<a href="recherche.php">Faire une nouvelle recherche</a></p>
		<?php
		} 
	else
		{ ?>
		<h3>Pas de r&eacute;sultats</h3>
		<p>Nous n'avons trouv&eacute; aucun r&eacute;sultat pour votre requ&ecirc;te. <a href="recherche.php">R&eacute;essayez</a> avec autre chose.</p>
		<?php
		}
		$req->closeCursor(); 
	} ?>


Je voudrai que quand une personne effectue une recherche l'url soit du type
http://www.site.com/recherche/[Var]

en tapant dans ma barre d'url http://www.site.com/recherche/[Var] j'arrive directement sur la bonne page mais en cliquant via mon formulaire pas moyen il me retourne toujours http://www.site.com/recherche.php?... (pas moyen de faire passer le $_GET dans la action du formulaire)
Il y a t-il une solution pour contourner cela sans passer par un script de soumission javascript un peu comme http://equidir.com/fr/annuaire/search/test ?
 
WRInaute accro
Nouveau WRInaute
Ok merci pour ta réponse rapide, ça fonctionne assez bien après avoir bidouillé un peu
Par contre quand j'ai recherche vide avec l'url recherche/ j'ai une page d'erreur comme si l'url rewriting ne fonctionnait plus.
de plus quand on tape par exemple /recherche/recherche/recherche/test on arrive toujours à la page de recherche pareil pour ton site perso. Ce n'est pas considéré comme de duplicate content ça?

Code:
<?php
if(isset($_SESSION['some_text']) && $_SESSION['some_text'] != NULL)
	{
	$requete = rename_dir($_SESSION['some_text']);
	$requete_new=explode("/impors/recherche/", $_SERVER['REQUEST_URI']);
	echo  $_SERVER['REQUEST_URI'];
	if(rename_dir($requete_new[1])!=rename_dir($_SESSION['some_text']) && $requete_new[1]!=NULL){$requete=rename_dir($requete_new[1]);}
	$req = $GLOBALS['connexion']->prepare("SELECT * FROM cleusb WHERE ref LIKE :requete or gamme LIKE :requete ORDER BY id DESC");
	$req->execute(array('requete' => '%'.$requete.'%'));
	$nb_resultats = $req->rowCount(); 
	if($nb_resultats != 0)
		{?>
		<h3>R&eacute;sultats de votre recherche.</h3>
		<p>Nous avons trouv&eacute; <?php echo $nb_resultats; 
		
		
		if($nb_resultats > 1) { echo 'r&eacute;sultats'; } else { echo 'r&eacute;sultat'; } 
		?>
		dans notre base de donn&eacute;es. Voici les fonctions que nous avons trouv&eacute;es :<br/><br/>
		<?php
		while( $donnees = $req->fetch(PDO::FETCH_OBJ) )
			{
			?>
			<a href="fonction.php?id=<? echo $donnees->id; ?>"><? echo $donnees->ref ?></a><br/>
			<?php
			} 
		?>
		<br/>
		<br/>
		<a href="recherche.php">Faire une nouvelle recherche</a></p>
		<?php
		} 
	else
		{ ?>
		<h3>Pas de r&eacute;sultats</h3>
		<p>Nous n'avons trouv&eacute; aucun r&eacute;sultat pour votre requ&ecirc;te "<? echo htmlspecialchars($requete_new[1]); ?>". <a href="recherche.php">R&eacute;essayez</a> avec autre chose.</p>
		<?php
		}
		$req->closeCursor(); 
	} ?>



	<form method="POST" action="">
		<p>Enter a value for $_POST['some_text']: <input type="text" name="some_text" /></p>
		<p><input type="submit" /></p>
	</form>

Code:
	if (isset($_POST['some_text']) && $_POST['some_text']!=NULL) {
	$_SESSION['some_text'] = $_POST['some_text'];

	header ('HTTP/1.1 303 See Other');
	header ('Location: ../recherche/'.rename_dir($_POST['some_text']));



Code:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^recherche/(.+)$ recherche.php?some_text=/$1 [L,QSA]
 
Nouveau WRInaute
Ok merci j'ai corrigé

Merci pour ton aide

Petite question, car j'aime comprendre mon code : Pourquoi utilise t-on [QSA] dans la règle de ré-écriture dans l'Htaccess?
 
Discussions similaires
Haut