Redirection PHP en fonction de l'URL
serges
-
pols12 Messages postés 1143 Date d'inscription Statut Membre Dernière intervention -
pols12 Messages postés 1143 Date d'inscription Statut Membre Dernière intervention -
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.
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.
A voir également:
- Php redirect to url
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Avertissement de redirection - Forum Virus
- L'url suivante, censée aboutir à un article, donne lieu à une redirection indiquant que la page n'a pas été trouvée. retrouvez la page recherchée. reportez le titre de l’article et son auteur. - Forum Microsoft Edge / Internet Explorer
- Alert php ✓ - Forum PHP
9 réponses
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.
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.
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.
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:
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>
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é
<?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é
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
https://fr.tuto.com/php/espace-membre-en-phpmysql,10368.html
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)
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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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?
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?
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.
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.
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
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
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
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
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
Et connection.php:
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... ;)
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... ;)