Redirection PHP en fonction de l'URL

Fermé
serges - 14 août 2010 à 17:37
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 - 17 août 2010 à 11:17
Bonjour,

J'ai mis en oeuvre une authentification php avec redirection.

Toutefois, j'aimerais que la redirection se fasse en fonction de la page qu'a demandé l'internaute.

C'est à dire s'il tape http://bipbip.com/ il s'authentifie puis il se fait redirigé sur http://bipbip.com/index.php
Mais s'il saisie http://bipbip.com/coyote/pamplemouse.php, il faut qu'il s'authentifie puis qu'il soit redirigé vers http://bipbip.com/coyote/pamplemouse.php

Merci par avance pour votre aide.

9 réponses

avion-f16 Messages postés 19250 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 22 décembre 2024 4 505
14 août 2010 à 18:37
Salut.

Est-ce que le formulaire de connexion est sur la même page que celle qui vérifie les données, sur toutes les pages, ou dans une seule page mais différente de celle qui fait le traitement ?

1er cas : Lorsque l'utilisateur arrive sur la page (connexion.php), il suffit de stocker d'où il provient dans une variable de session ($_SESSION['redirection'] par exemple). Pour savoir d'où il provient : $_SERVER['HTTP_REFERER'].
Après l'identification, il suffira d'utiliser la variable de session pour la redirection.
<?php
session_start();

if(isset($_POST['login']) && isset($_POST['password'])) {
    /* Si l'utilisateur est bien identifié : */
    header('Location: '.$_SESSION['redirection']);    
} else {
    $_SESSION['redirection'] = (isset($_SERVER['HTTP_REFERER']) && preg_match('#^http://www\.example\.com#i', $_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : '/index.php';

    include 'views/connexion/form.php';
}
?>


Pour les deux autres cas : C'est le même principe, sauf qu'il n'y a pas besoin des variables de session pour stocker l'URL de provenance.
2
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 119
16 août 2010 à 11:27
Je dois t'avertir que session_register est obsolète depuis php 5.3, et qui'l est bien plus facile de lancer un session_start. ;)
Voilà ton code:
<?php
require_once('connexion.php');
/* 
----------------------------------- 
------ SCRIPT DE PROTECTION ------- 
DBProtect V1.2 
----------------------------------- 
*/ 

session_start(); // début de session 

if (isset($_POST['login'])){ // execution uniquement apres envoi du formulaire (test si la variable POST existe) 
$login = addslashes($_POST['login']); // mise en variable du nom d'utilisateur 
$pass = addslashes(md5($_POST['pass'])); // mise en variable du mot de passe chiffré à l'aide de md5 (I love md5) 

// requete sur la table administrateurs (on récupère les infos de la personne) 
mysql_select_db($database_dbprotect, $dbprotect); 
$verif_query=sprintf("SELECT * FROM utilisateurs WHERE login='$login' AND pass='$pass'"); // requête sur la base administrateurs 
$verif = mysql_query($verif_query, $dbprotect) or die(mysql_error()); 
$row_verif = mysql_fetch_assoc($verif); 
$utilisateur = mysql_num_rows($verif); 


if ($utilisateur) { // On test s'il y a un utilisateur correspondant 

session_register("authentification"); // enregistrement de la session 

// déclaration des variables de session 
$_SESSION['privilege'] = $row_verif['privilege']; // le privilège de l'utilisateur (permet de définir des niveaux d'utilisateur) 
$_SESSION['nom'] = $row_verif['nom']; // Son nom 
$_SESSION['prenom'] = $row_verif['prenom']; // Son Prénom 
$_SESSION['login'] = $row_verif['login']; // Son Login 
$_SESSION['pass'] = $row_verif['pass']; // Son mot de passe (à éviter) 

$redirection = $_SERVER['HTTP_REFERER']; //adresse de la page précédente pour la redirection
header("Location:$redirection"); // redirection si OK vers la page précédente 
} 
else { 
header("Location:index.php?erreur=login"); // redirection si utilisateur non reconnu 
} 
} 


// Gestion de la déconnexion 
if(isset($_GET['erreur']) && $_GET['erreur'] == 'logout'){ // Test sur les paramètres d'URL qui permettront d'identifier un contexte de déconnexion 
$prenom = $_SESSION['prenom']; // On garde le prénom en variable pour dire au revoir (soyons polis :-) 
session_unset("authentification"); 
header("Location:index.php?erreur=delog&prenom=$prenom"); 
} 
?> 
<html> 
<head> 
<title>AUTHENTIFICATION - DBProtect</title> 
<link href="styles.css" rel="stylesheet" type="text/css"> 
</head> 
<body> 
<form action="" method="post" name="connect"> 
<p align="center" class="titre"><strong>- : : : ESPACE SECURISE PAR DBProtect : : : -</strong></p> 
<p align="center" class="title"> 
<?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "login")) { // Affiche l'erreur ?> 
<strong class="erreur">Echec d'authentification !!! > login ou mot de passe incorrect</strong> 
<?php } ?> 
<?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "delog")) { // Affiche l'erreur ?> 
<strong class="reussite">Déconnexion réussie... A bientôt <?php echo $_GET['prenom'];?> !</strong> 
<?php } ?> 
<?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "intru")) { // Affiche l'erreur ?> 
<strong class="erreur">Echec d'authentification !!! > Aucune session n'est ouverte ou vous n'avez pas les droits pour afficher cette page</strong> 
<?php } ?> 
</p> 
<p align="center"><u>Authentification sécurisée utilisant :</u><br> 
- BDD MySQL<br> 
- Sessions PHP côté serveur <br> 
- Empreintes des mot de passe stockés par md5</p> 
<p align="center"><em><a href="lisez_moi.htm">lire les instructions d'installation >></a><br> 
<a href="details.doc">lire le fonctionnement détaillé >></a></em></p> 
<table width="300" border="0" align="center" cellpadding="10" cellspacing="0" bgcolor="#eeeeee" class="tableaux"> 
<tr> 
<td width="50%""><div align="right">login</div></td> 
<td width="50%"><input name="login" type="text" id="login"></td> 
</tr> 
<tr> 
<td width="50%""><div align="right">mot de passe</div></td> 
<td width="50%"><input name="pass" type="password" id="pass"></td> 
</tr> 
<tr> 
<td height="34" colspan="2"><div align="center"> 
<input type="submit" name="Submit" value="Se connecter"> 
</div></td> 
</tr> 
</table> 
<p align="center"><a href="http://www.cv-webmaster.com" title="cv webmaster webdesigner développeur php/mysql">CV webmaster et auteur du script</a></p> 
</form> 
</body> 
</html>

1
niconovice Messages postés 954 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 3 mars 2014 86
15 août 2010 à 00:21
il faut que tu apprennes à utiliser les sessions:

<?php
session_start();

if(empty($_SESSION['membre']))
{
header('Location: ../index.php');
}
else
{
...
}
c'est beaucoup plus simple qu'on pourrait le croire ici 2 liens pour te familiariser:
https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/913348-variables-superglobales
et
https://www.grafikart.fr/tutoriels/securiser-sessions-php-58
voilà en espérant t'avoir aidé
0
niconovice Messages postés 954 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 3 mars 2014 86
15 août 2010 à 00:24
celui ci est payant 4 €uros mais fait exactement ce que tu veux faire:
https://fr.tuto.com/php/espace-membre-en-phpmysql,10368.html
0
Merci pour votre aide mais je n'arrive pas a intégrer votre code dans le mien.

Pour info voici mon code :

<?php require_once('connexion.php'); ?>
<?php
/*
-----------------------------------
------ SCRIPT DE PROTECTION -------
DBProtect V1.2
-----------------------------------
*/

session_start(); // début de session

if (isset($_POST['login'])){ // execution uniquement apres envoi du formulaire (test si la variable POST existe)
$login = addslashes($_POST['login']); // mise en variable du nom d'utilisateur
$pass = addslashes(md5($_POST['pass'])); // mise en variable du mot de passe chiffré à l'aide de md5 (I love md5)

// requete sur la table administrateurs (on récupère les infos de la personne)
mysql_select_db($database_dbprotect, $dbprotect);
$verif_query=sprintf("SELECT * FROM utilisateurs WHERE login='$login' AND pass='$pass'"); // requête sur la base administrateurs
$verif = mysql_query($verif_query, $dbprotect) or die(mysql_error());
$row_verif = mysql_fetch_assoc($verif);
$utilisateur = mysql_num_rows($verif);


if ($utilisateur) { // On test s'il y a un utilisateur correspondant

session_register("authentification"); // enregistrement de la session

// déclaration des variables de session
$_SESSION['privilege'] = $row_verif['privilege']; // le privilège de l'utilisateur (permet de définir des niveaux d'utilisateur)
$_SESSION['nom'] = $row_verif['nom']; // Son nom
$_SESSION['prenom'] = $row_verif['prenom']; // Son Prénom
$_SESSION['login'] = $row_verif['login']; // Son Login
$_SESSION['pass'] = $row_verif['pass']; // Son mot de passe (à éviter)

header("Location:accueil.php"); // redirection si OK
}
else {
header("Location:index.php?erreur=login"); // redirection si utilisateur non reconnu
}
}


// Gestion de la déconnexion
if(isset($_GET['erreur']) && $_GET['erreur'] == 'logout'){ // Test sur les paramètres d'URL qui permettront d'identifier un contexte de déconnexion
$prenom = $_SESSION['prenom']; // On garde le prénom en variable pour dire au revoir (soyons polis :-)
session_unset("authentification");
header("Location:index.php?erreur=delog&prenom=$prenom");
}
?>
<html>
<head>
<title>AUTHENTIFICATION - DBProtect</title>
<link href="styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<form action="" method="post" name="connect">
<p align="center" class="titre"><strong>- : : : ESPACE SECURISE PAR DBProtect : : : -</strong></p>
<p align="center" class="title">
<?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "login")) { // Affiche l'erreur ?>
<strong class="erreur">Echec d'authentification !!! > login ou mot de passe incorrect</strong>
<?php } ?>
<?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "delog")) { // Affiche l'erreur ?>
<strong class="reussite">Déconnexion réussie... A bientôt <?php echo $_GET['prenom'];?> !</strong>
<?php } ?>
<?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "intru")) { // Affiche l'erreur ?>
<strong class="erreur">Echec d'authentification !!! > Aucune session n'est ouverte ou vous n'avez pas les droits pour afficher cette page</strong>
<?php } ?>
</p>
<p align="center"><u>Authentification sécurisée utilisant :</u><br>
- BDD MySQL<br>
- Sessions PHP côté serveur <br>
- Empreintes des mot de passe stockés par md5</p>
<p align="center"><em><a href="lisez_moi.htm">lire les instructions d'installation >></a><br>
<a href="details.doc">lire le fonctionnement détaillé >></a></em></p>
<table width="300" border="0" align="center" cellpadding="10" cellspacing="0" bgcolor="#eeeeee" class="tableaux">
<tr>
<td width="50%""><div align="right">login</div></td>
<td width="50%"><input name="login" type="text" id="login"></td>
</tr>
<tr>
<td width="50%""><div align="right">mot de passe</div></td>
<td width="50%"><input name="pass" type="password" id="pass"></td>
</tr>
<tr>
<td height="34" colspan="2"><div align="center">
<input type="submit" name="Submit" value="Se connecter">
</div></td>
</tr>
</table>
<p align="center"><a href="http://www.cv-webmaster.com" title="cv webmaster webdesigner développeur php/mysql">CV webmaster et auteur du script</a></p>
</form>
</body>
</html>


(code libre de droits)
0
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 119
15 août 2010 à 18:45
En lignes 1/2, pourquoi fermer PHP pour le rouvrir?
Ensuite, c'est moi, ou il y a un mélange de session à la mode PHP ancien et PHP5 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 119
15 août 2010 à 18:48
Pour ton problème, je epnse qu'il faut juste modifier cette ligne:
header("Location:accueil.php"); // redirection si OK
}

Elle redirige vers accueil si la connection est réussi.
Elle doit rediriger vers $_SERVER['HTTP_REFERER'] qui est la page précédente.
Je pense qu'avec ca, tu devaris t'en sortir non?
0
Merci pols12 pour ta réponse.

Cependant étant débutant en php te serait il possible de me faire un exemple avec ton code afin que je comprennes mieux et que je puisses le modifier pour l'intégrer au mien.
0
Merci pols12 pour ton aide.

Toutefois, le code que tu me propose ne répond pas tout à fais à mon attente.

Je m'explique :
Lorsque je m'authentifie la redirection me renvoie sur la dernière page demandé donc sur celle ou je suis pour m'authentifiai.
Je voudrais qu'elle me redirige vers celle que j'ai demandé dans la barre d'URL.


Pour info sur toute mes pages j'ai un bout de code qui dit si utilisateur non authentifié, le renvoyé vers la page d'authentification.
Voici un exemple concret :

je saisie dans la barre d'URL : http://monsite/images/troubadour.php
Je ne suis pas authentifié donc la page me renvoie sur : http://monsite/index.php
Une fois sur la page : http://monsite/index.php je m'authentifie et devrais être redirigé sur la page que j'avais demandé à la base soit :
http://monsite/images/troubadour.php
A l'heure actuel ce n'est pas le cas avec ta méthode une fois que je suis authentifié il me renvoie sur : http://monsite/index.php

Encore merci
0
Encore merci pour ton aide je suis arrivé à faire la redirection comme je le désirais.

Désolé de t'avoir autant sollicité mais mon niveau de php et proche du néant...

Enfin, je me demandais comment faire une itération correcte pour qu'il affiche la bonne redirection en fonction de la page demandé soit :

Code :

if (page_demandé = index.php) {
header("Location:accueil.php");
}
else {
header('Location: ' . $_SESSION['page_demandee']);
}


J'ai tenté de remplacer page_demandé par $_SERVER['REQUEST_URI'] mais cela ne fonctionne pas.

MERCI
0
pols12 Messages postés 1143 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 31 juillet 2019 119
17 août 2010 à 11:17
Salut
Pour ton problème que tu as résolu, comment as-tu fait?Indique-le, poour els prochains... ;)
Moi, j'aurais dis que sur la page index.php , il fallait mettre en session $_SERVER['HTTP_REFERER'] et récupérer la session sur la page de conection. :)
Ainsi, index.php
<?php
session_start();
$_SESSION['referer'] = $_SERVER['HTTP_REFERER'];
?>

Et connection.php:
<?php
session_start();
[...]
header("Location:$_SESSION['referer']"); // redirection si OK 
}
?>


Pour ton deuxième problème, je n'ai aps vraiment compris ce qui ne vas pas, ce que tu veux faire?

Mais je dois t'avertir de 2 choses, dans l'exemple de code que tu m'as montré:
->Mettre un double == dans la condition, et pas un seul!
->Pour REQUEST_URI, le manuel indique:
"L'URI qui a été fourni pour accéder à cette page. Par exemple : '/index.html'."
Ainsi, il faut prendre en compte exactement l'uri fourni, que ce soir relatif, absolu, semi-relatif... ;)
0