Redirigé sur la page en cours si le formulaire est vide

Mammouth du PHP | 643 Messages

01 juil. 2016, 14:31

Salut à tous.
J'ai un formulaire qui permet de renvoyer sur la page une fois la ville renseignée, le hic c'est que pour le robot ( crawl ) quand c'est vide, ça fait une 404. Donc pas terrible quoi ?
<form id="choice" method="POST" action="">
    <div class="input-group">
    <input title="Recherche par ville" placeholder="Recherche par ville" class="search-motor form-control"  value="<?php echo  !empty($_REQUEST['ville']) ? $_REQUEST['ville'] : NULL;?>" name="ville" id="ville" type="search">
    <span class="input-group-btn">
    <button type="submit" class="btn btn-default search-btn">GO !</button>
    </span>
    </div>
    </form>
Et donc l'idée et de faire en sorte que si on post est que c'est vide on renvoie sur la page en cours avec :
$monUrl = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
Pour l'instant j'ai tester ca:
if(isset($_POST['ville'])) {
        header('Location: /sortie/region-'.$_REQUEST['region'].'/ville-de-'.simplification($_POST['ville']).'.html');
		exit;
    }
Merci à vous

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

01 juil. 2016, 14:52

Bonjour,

Si je comprends bien, le problème c'est que lorsque le robot soumet le formulaire sans avoir sélectionné une ville ça fait une 404, c'est ça ?

Si c'est le cas, la meilleure façon de faire à mon avis serait que tu testes le nom de ville rentré et que si il ne correspond pas à une ville que tu gères (ou que c'est vide, ce qui revient au même), alors tu affiche la liste complète des villes gérées, ainsi les bot d'indexation pourront accéder (et indexer) à toutes tes pages
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

01 juil. 2016, 14:57

Oui c'est exactement ça, le crawl définit cette page comme une erreur 404.

Je souhaite parcontre le redirigé sur la page sur laquelle il se trouve :(

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 juil. 2016, 15:17

Bonjour,

Tu peux soit retrouver l'url de la page sur laquelle tu te trouve avec $_SERVER['PHP_SELF'].

Ou tu peux, encore plus simplement, ne pas rediriger l'utilisateur, puisqu'il appel déjà la page sur laquelle il est. Il suffit de la laisser s'exécuter sans redirection :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 643 Messages

01 juil. 2016, 15:21

C'est à dire ?
Il suffit de la laisser s'exécuter sans redirection;

Le soucis c'est que le crawl voit la 404 donc je souhaite le redirigé si on soumet le formulaire vide alors on redirige sur la page en cours...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 juil. 2016, 15:39

salut,

tu finis simplement la validation du formulaire avec un beau message d'erreur indiquant que celui-ci n'est pas valide.
du genre : Vous devez sélectionner une ville.

sinon pour ton exemple de code
if(empty($_POST['ville'])) { redirection vers la page )
parce que la ça redirige que si l'index ville existe dans le formulaire et tu ne sais pas si région existe.


@+
Il en faut peu pour être heureux ......

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 juil. 2016, 15:41

Ben "Rediriger sur la page en cours" ... y a pas besoin de rediriger l'utilisateur sur la page en cours... y a juste besoin d'afficher la page en cours puisque l'utilisateur est déjà en train de la consulter :)

Ton besoin c'est de rediriger l'utilisateur vers une autre page, uniquement si la page demandée existe. Ton code est donc bon, il faut juste compléter le if(isset($_POST['ville'])) par un test vérifiant que $_POST['ville'] est bien un id ville valide et le tour est joué :)

Au pire tu peux aussi le gérer via le htaccess pour vérifier si la page demandée au serveur existe, et pour le coup rediriger l'utilisateur vers une autre page (pas 404 donc, mais éventuellement celle d'où il vient) quand la page demandée n'existe pas. Mais c'est à mon sens plus complexe que de vérifier si un id existe :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...