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
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
A voir également:
- Php redirect to url
- Lien url - Guide
- Qwerty to azerty - Guide
- M3u to url - Forum TV & Vidéo
- Atlas pro url serveur invalide - Forum TV & Vidéo
- The requested url was rejected. please consult with your administrator. ✓ - Forum Réseaux sociaux
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
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.
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.
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
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:
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>
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
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é
<?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é
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
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
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)
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
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 ?
Ensuite, c'est moi, ou il y a un mélange de session à la mode PHP ancien et PHP5 ?
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
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?
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
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
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
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... ;)