Page 1 sur 1

Redirection avec location header

Posté : 08 mai 2016, 19:40
par yoann38
Salut à tous.
Je me retourne vers vous mon problème sur mon formulaire.

Si il y a aucune ville de posté on redirigé vers region suivi de ville que l'utilisateur vient de saisir et si il y a déjà une ville de renseignée alors on redirigé également vers region + ville.

Si il n y a pas de ville de renseignée ca me créer le bon lien mais si une ville est déjà renseignée ca redirige vers region + region + ville, en gros ya 2 fois région pourquoi ?
<?php    
    // Check données
    if(isset($_POST['ville']))
    {
		if(!empty($_REQUEST['ville'])) {
        header('Location: '.$_REQUEST['region'].'/'.$_POST['ville'].'.html');
		}else{
        header('Location: '.$_POST['ville'].'.html');
		}
    }
	
	echo 'nom de la ville : <strong>'. $_REQUEST['ville'].'</strong>';
?>
le formulaire:
<form id="choice" method="POST" action="<?php echo  !empty($_POST['ville']) ? '/'.$_REQUEST['ville'] : NULL;?>">
    
        <div class="col-md-10 col-sm-10 max">
        <input title="Recherche par ville" placeholder="Recherche par ville" class="form-control" placeholder="Recherche par ville" value="<?php echo  !empty($_REQUEST['ville']) ? $_REQUEST['ville'] : NULL;?>" name="ville" id="ville" type="search">
        </div>   
                        
        <div class="col-md-2 col-sm-2 max">
        <button type="submit"  class="find" value="Rechercher"><i class="fa fa-search" aria-hidden="true"></i></button>
        </div>   
        </form
Merci à vous

Re: Redirection avec location header

Posté : 08 mai 2016, 21:30
par or 1
if(isset($_POST['ville']))
{
if(!empty($_REQUEST['ville'])) {
$_POST['ville'] et $_REQUEST['ville'], c'est la même chose dans une page appelée en méthode post, donc le second test retournera toujours la même chose.

Re: Redirection avec location header

Posté : 09 mai 2016, 07:19
par yoann38
J'ai essayer ceci alors vous allez me dire c'est du pareil au même mais je ne vois pas comment faire
Si il n y a pas de ville renseignée on est bien redirigé correctement sinon si il y a une ville ca créer l'adresse url mais avec 2 fois la région:
<form id="choice" method="POST" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
    
        <div class="col-md-10 col-sm-10 max">
        <input title="Recherche par ville" placeholder="Recherche par ville" class="form-control" placeholder="Recherche par ville" value="<?php echo  !empty($_REQUEST['ville']) ? $_REQUEST['ville'] : NULL;?>" name="ville" id="ville" type="search">
        </div>   
                        
        <div class="col-md-2 col-sm-2 max">
        <button type="submit"  class="find" value="Rechercher"><i class="fa fa-search" aria-hidden="true"></i></button>
        </div>   
        </form>

<?php    
    
    if(isset($_POST['ville']))
    {
		// Si il n y a pas de ville de renseigné ca renvoi bien par exemple
		// http://127.0.0.1/digital/actu/rhone-alpes/lyon.html
		if(!empty($_REQUEST['ville'])) {
        header('Location: '.$_REQUEST['region'].'/'.$_POST['ville'].'.html');
		}
		
		// on dirait que le else est ignoré car ca renvoi l'url du type 
		// http://127.0.0.1/digital/actu/rhone-alpes/rhone-alpes/lyon.html
		}else{
        header('Location: /'.$_POST['ville'].'.html');
		
    }
	
	echo 'nom de la ville : <strong>'. $_GET['ville'].'</strong>';
	

?>

Re: Redirection avec location header

Posté : 09 mai 2016, 17:28
par yoann38
Bon les puristes vont surement pas aimer mais ca marche:
Que puis je faire pour que ca soit optimal, surtout le else vide comme ca jaime pas ...
Merci encore
<form id="choice" method="POST" action="">
    
        <div class="col-md-10 col-sm-10 max">
        <input title="Recherche par ville" placeholder="Recherche par ville" class="form-control" placeholder="Recherche par ville" value="<?php echo  !empty($_REQUEST['ville']) ? $_REQUEST['ville'] : NULL;?>" name="ville" id="ville" type="search">
        </div>   
                        
        <div class="col-md-2 col-sm-2 max">
        <button type="submit"  class="find" value="Rechercher"><i class="fa fa-search" aria-hidden="true"></i></button>
        </div>   
        </form>



<?php   

    if(isset($_POST['ville']))
    {
        header('Location: /digital/sortie/'.$_REQUEST['region'].'/'.$_POST['ville'].'.html');
    }
    
    else  {
     '';
    }	

?>

Re: Redirection avec location header

Posté : 12 mai 2016, 17:38
par Ryle
Bonjour,

Effectivement, le else vide ne sert à rien, et comme ça n'est pas un opérateur obligatoire, tu peux simplement le dégager :)
<?php   
    if(isset($_POST['ville']))
    {
        header('Location: /digital/sortie/'.$_REQUEST['region'].'/'.$_POST['ville'].'.html');
    }
?>
Tu peux également ajouter un " exit(); " après le header(), il n'est pas utile ici mais c'est une bonne habitude à prendre. En effet, php continue d'exécuter le code après avoir lu le header() et ce n'est qu'une fois la fin du script atteint que le header sera exécuté. Cela peut parfois avoir des comportements surprenant. Avec un exit(), tu dis à php d'arrêter l'exécution juste après le header() et php redirige l'utilisateur immédiatement sans aller plus loin dans le code...