[HTML/PHP] redirections soumises à conditions
owi
-
david77179 Messages postés 172 Statut Membre -
david77179 Messages postés 172 Statut Membre -
Bonjour,
Je fais actuellement un petit site intranet. Ce site ne doit etre accessible que pour certaines personnes disposant d'un mot de passe. On distingue 2 catégories d'utilisateurs parmis ceux disposant d'un pass. Chacune de ces catégories a accès à une partie différente du site.
Pour satisfaire mes besoins, j'ai une base de données mysql comportant les logins de tous les membres, ainsi que leur niveau d'autorisation quand à l'accès au site (admin ou user)
Pour ma page ou l'utilisateur devra se log, j ai donc un fichier connec.php se présentant comme ca:
<body>
<table width="auto">
<form method="post" action="login.php">
<tr>
<td align="right">Login : <input type="text" name="login" value=""></td>
</tr>
<tr>
<td align="right">Password : <input type="password" name="password"></td>
</tr>
<tr>
<td align="center"><input type="submit" value="valider" /></td>
</tr>
</form>
</table>
</body>
Voilà, ca c est pour la creation du formulaire servant à s identifier, l'envers du décor se trouve sur login.php, avec notamment la réception des données saisies dans le formulaire, et la comparaison des valeurs avec celles de la base de données:
<?
$db=mysql_connect("serveur_bdd", "login_bdd", "mot de passe_bdd");//connection à la bdd
mysql_select_db("humantoc",$db);//selection de la bdd
$result = mysql_query("SELECT * FROM Utilisateurs WHERE nom = '". $_POST["login"] ."'");//requete: on recupere les donnees dans la bdd correspondant au login saisi dans connec.php
if(!$result){
echo("Une erreur est survenue lors de la tentative de connexion");
}
else{
if(mysql_num_rows($result) == 0){
echo("Le nom d'utilisateur " . $_POST["nom"] . " n'existe pas");//pas de login correspondant
}
else{
$row = mysql_fetch_array($result);
if($_POST["password"] != $row["mdp"]){
echo("Votre mot de passe est incorrect");//le login correspond, mais le pass est incorrect
}
else{//le pass est correct
mysql_close();
if($row["fonction"] == "admin"){//les infos correspondent à un compte admin
echo("<a href=\"admin.php\"/>page admin</a>");//on redirige vers la partie admin
}
else if($row["fonction"] == "utilisateur"){//les infos correspondent à un compte utilisateur
echo("<a href=\"utilisateur.php\"/>page notaire</a>");//on redirige vers la partie utilisateur
}
}
}
}
?>
Tout fonctionne correctement. Mon probleme et que je veux optimiser la redirection, au moment ou l'utilisateur est redirigé vers le contenu admin OU utilisateur (atterir sur une page avec un lien n est pas tres ergonomique...). Les solutions à base de header() me semblant inadaptées. J'aimerai savoir comment procéder.
merci d avance
Je fais actuellement un petit site intranet. Ce site ne doit etre accessible que pour certaines personnes disposant d'un mot de passe. On distingue 2 catégories d'utilisateurs parmis ceux disposant d'un pass. Chacune de ces catégories a accès à une partie différente du site.
Pour satisfaire mes besoins, j'ai une base de données mysql comportant les logins de tous les membres, ainsi que leur niveau d'autorisation quand à l'accès au site (admin ou user)
Pour ma page ou l'utilisateur devra se log, j ai donc un fichier connec.php se présentant comme ca:
<body>
<table width="auto">
<form method="post" action="login.php">
<tr>
<td align="right">Login : <input type="text" name="login" value=""></td>
</tr>
<tr>
<td align="right">Password : <input type="password" name="password"></td>
</tr>
<tr>
<td align="center"><input type="submit" value="valider" /></td>
</tr>
</form>
</table>
</body>
Voilà, ca c est pour la creation du formulaire servant à s identifier, l'envers du décor se trouve sur login.php, avec notamment la réception des données saisies dans le formulaire, et la comparaison des valeurs avec celles de la base de données:
<?
$db=mysql_connect("serveur_bdd", "login_bdd", "mot de passe_bdd");//connection à la bdd
mysql_select_db("humantoc",$db);//selection de la bdd
$result = mysql_query("SELECT * FROM Utilisateurs WHERE nom = '". $_POST["login"] ."'");//requete: on recupere les donnees dans la bdd correspondant au login saisi dans connec.php
if(!$result){
echo("Une erreur est survenue lors de la tentative de connexion");
}
else{
if(mysql_num_rows($result) == 0){
echo("Le nom d'utilisateur " . $_POST["nom"] . " n'existe pas");//pas de login correspondant
}
else{
$row = mysql_fetch_array($result);
if($_POST["password"] != $row["mdp"]){
echo("Votre mot de passe est incorrect");//le login correspond, mais le pass est incorrect
}
else{//le pass est correct
mysql_close();
if($row["fonction"] == "admin"){//les infos correspondent à un compte admin
echo("<a href=\"admin.php\"/>page admin</a>");//on redirige vers la partie admin
}
else if($row["fonction"] == "utilisateur"){//les infos correspondent à un compte utilisateur
echo("<a href=\"utilisateur.php\"/>page notaire</a>");//on redirige vers la partie utilisateur
}
}
}
}
?>
Tout fonctionne correctement. Mon probleme et que je veux optimiser la redirection, au moment ou l'utilisateur est redirigé vers le contenu admin OU utilisateur (atterir sur une page avec un lien n est pas tres ergonomique...). Les solutions à base de header() me semblant inadaptées. J'aimerai savoir comment procéder.
merci d avance
A voir également:
- [HTML/PHP] redirections soumises à conditions
- Editeur html - Télécharger - HTML
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Mise en forme conditionnelle excel plusieurs conditions - Guide
- Espace en html ✓ - Forum HTML
9 réponses
Salut,
Malheureusement tu devra faire avec les headers!
header(Location:tonadresse);
fais attention de ne pas ecrire de HTML avant.
A mon tour pour la question :
pourquoi ne veux tu pas passer par un header?
Malheureusement tu devra faire avec les headers!
header(Location:tonadresse);
fais attention de ne pas ecrire de HTML avant.
A mon tour pour la question :
pourquoi ne veux tu pas passer par un header?
J appréhende les soucis pour intégrer les header dans mon code, en fait je ne vois pas comment adapter la chose pour placer un header dans mes conditions, en faisant en sorte de ne pas mettre de html devant (en fait ca me parait incompatible dans le cas précédent).
En bref, je sais pas ou placer mes header :(
En bref, je sais pas ou placer mes header :(
re,
alors en fait ton header dois etre place avant tout envoi de HTML (meme la balise <br> compte!)
pour mes identification c'est le premier truc que je fais.
Dans le cas de cette page il ne devrait pas y avoir d'erreur (sauf si tu affiches le formulaire dans la meme page que le script de verification) car tu n'ecris du HTML que s'il y a une erreur et donc tu ne fais pas de redirection.
je repetes : si ton script de verification est tout seul dans ta page tu n'aura pas de problem, tu as juste a faire le header a la place d'afficher ton lien.
alors en fait ton header dois etre place avant tout envoi de HTML (meme la balise <br> compte!)
pour mes identification c'est le premier truc que je fais.
Dans le cas de cette page il ne devrait pas y avoir d'erreur (sauf si tu affiches le formulaire dans la meme page que le script de verification) car tu n'ecris du HTML que s'il y a une erreur et donc tu ne fais pas de redirection.
je repetes : si ton script de verification est tout seul dans ta page tu n'aura pas de problem, tu as juste a faire le header a la place d'afficher ton lien.
Remplace ça
Par ça
if($row["fonction"] == "admin")//les infos correspondent à un compte admin
echo("<a href=\"admin.php\"/>page admin</a>");//on redirige vers la partie admin
}
else if($row["fonction"] == "utilisateur"){//les infos correspondent à un compte utilisateur
echo("<a href=\"utilisateur.php\"/>page notaire</a>");//on redirige vers la partie utilisateur
}
Par ça
if($row["fonction"] == "admin") //les infos correspondent à un compte admin
header('Location: admin.php');//on redirige vers la partie admin
else if($row["fonction"] == "utilisateur") //les infos correspondent à un compte utilisateur
header('Location: utilisateur.php');//on redirige vers la partie utilisateur
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'avais déjà essayé la solution des header:
<body>
<? ///!\
$message="";
$db=mysql_connect("***", "***", "***");
mysql_select_db("nombdd",$db);
$result = mysql_query("SELECT * FROM Utilisateurs WHERE nom = '". $_POST["login"] ."'");
if(!$result){
echo("Une erreur est survenue lors de la tentative de connexion");
}
else{
if(mysql_num_rows($result) == 0){
echo("Le nom d'utilisateur " . $_POST["nom"] . " n'existe pas");
}
else{
$row = mysql_fetch_array($result);
if($_POST["password"] != $row["mdp"]){
echo("Votre mot de passe est incorrect");
}
else{
mysql_close();
if($row["fonction"] == "admin"){
header('Location: admin.php');
}
else if($row["fonction"] == "utilisateur"){
header('Location: utilisateur.php');
}
}
}
}
?>
</body>
Comme je m y attendais, j obtiens l erreur:
Warning: Cannot modify header information - headers already sent by (output started at /home.3/site/www/dossier/login.php:9) in /home.3/site/www/dossier/login.php on line 31
ou la ligne 9 en cause correspond au ///!\
<body>
<? ///!\
$message="";
$db=mysql_connect("***", "***", "***");
mysql_select_db("nombdd",$db);
$result = mysql_query("SELECT * FROM Utilisateurs WHERE nom = '". $_POST["login"] ."'");
if(!$result){
echo("Une erreur est survenue lors de la tentative de connexion");
}
else{
if(mysql_num_rows($result) == 0){
echo("Le nom d'utilisateur " . $_POST["nom"] . " n'existe pas");
}
else{
$row = mysql_fetch_array($result);
if($_POST["password"] != $row["mdp"]){
echo("Votre mot de passe est incorrect");
}
else{
mysql_close();
if($row["fonction"] == "admin"){
header('Location: admin.php');
}
else if($row["fonction"] == "utilisateur"){
header('Location: utilisateur.php');
}
}
}
}
?>
</body>
Comme je m y attendais, j obtiens l erreur:
Warning: Cannot modify header information - headers already sent by (output started at /home.3/site/www/dossier/login.php:9) in /home.3/site/www/dossier/login.php on line 31
ou la ligne 9 en cause correspond au ///!\
Ben oui, tu as laissé la balise <body> devant !
Tente plutôt ça :
Tente plutôt ça :
<? ///!\
$message="";
$db=mysql_connect("***", "***", "***");
mysql_select_db("nombdd",$db);
$result = mysql_query("SELECT * FROM Utilisateurs WHERE nom = '". $_POST["login"] ."'");
if(!$result){
echo("<body>Une erreur est survenue lors de la tentative de connexion</body>");
}
else{
if(mysql_num_rows($result) == 0){
echo("<body>Le nom d'utilisateur " . $_POST["nom"] . " n'existe pas</body>");
}
else{
$row = mysql_fetch_array($result);
if($_POST["password"] != $row["mdp"]){
echo("<body>Votre mot de passe est incorrect</body>");
}
else{
mysql_close();
if($row["fonction"] == "admin"){
header('Location: admin.php');
}
else if($row["fonction"] == "utilisateur"){
header('Location: utilisateur.php');
}
}
}
}
?>
Ou alors tu modifies tes pages et tu fais des includes :/
if($row["fonction"] == "admin") //les infos correspondent à un compte admin
include ('admin.php');
else if($row["fonction"] == "utilisateur") //les infos correspondent à un compte utilisateur
include ('utilisateur.php');
bonjour je developpe un site dans lequel je compte integre des comptes utilisateurs avec du contenu personnel telechargeable, cest pourquoi cette méthode me semble efficace, en fonction de tel utilisateur une page lui sera affiché. voici mon code qui ne fonctionne pas, la connexion se fait sans souci mais la redirection non, Pouvez vous m'aider ? merci :)
<?
// pensez a ouvrir une connexion vers mysql ici
// voir les exercices dans le menu de droite pour cela.
$db = mysql_connect('bruno.cenac-assurances.com', 'bruno', 'Drpd.066');
mysql_select_db('bruno',$db);
if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
extract($_POST);
// on recupère le password de la table qui correspond au login du visiteur
$sql = "select pwd from tbl_user where login='".$login."'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_assoc($req);
if($data['pwd'] != $pass) {
echo '<p>Mauvais login / password. Merci de recommencer</p>';
include('login.htm'); // On inclut le formulaire d'identification
exit;
}
else {
session_start();
$_SESSION['login'] = $login;
echo 'Vous etes bien logué';
// ici vous pouvez afficher un lien pour renvoyer
// vers la page d'accueil de votre espace membres
}
}
else {
echo '<p>Vous avez oublié de remplir un champ.</p>';
include('login.htm'); // On inclut le formulaire d'identification
exit;
}
if($data["fonction"] == "bruno") //les infos correspondent à un compte admin
header('Location: bruno.htm');//on redirige vers la partie admin
else if($data["fonction"] == "alex") //les infos correspondent à un compte utilisateur
header('Location: alex.htm');//on redirige vers la partie utilisateur
?>
<?
// pensez a ouvrir une connexion vers mysql ici
// voir les exercices dans le menu de droite pour cela.
$db = mysql_connect('bruno.cenac-assurances.com', 'bruno', 'Drpd.066');
mysql_select_db('bruno',$db);
if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['pass'])) {
extract($_POST);
// on recupère le password de la table qui correspond au login du visiteur
$sql = "select pwd from tbl_user where login='".$login."'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_assoc($req);
if($data['pwd'] != $pass) {
echo '<p>Mauvais login / password. Merci de recommencer</p>';
include('login.htm'); // On inclut le formulaire d'identification
exit;
}
else {
session_start();
$_SESSION['login'] = $login;
echo 'Vous etes bien logué';
// ici vous pouvez afficher un lien pour renvoyer
// vers la page d'accueil de votre espace membres
}
}
else {
echo '<p>Vous avez oublié de remplir un champ.</p>';
include('login.htm'); // On inclut le formulaire d'identification
exit;
}
if($data["fonction"] == "bruno") //les infos correspondent à un compte admin
header('Location: bruno.htm');//on redirige vers la partie admin
else if($data["fonction"] == "alex") //les infos correspondent à un compte utilisateur
header('Location: alex.htm');//on redirige vers la partie utilisateur
?>
bsr,
j'ai essayé ce code mais il ne marche pas il m'affiche une page vide meme si je saisie dé login et password fausse.
est ce je peu faire header ( 'location : Administrateur/admin_frame.html') parceque ma page de connexion se trouve dans le dossier parent et ma page de redirection dans un sous dossier
j'ai essayé ce code mais il ne marche pas il m'affiche une page vide meme si je saisie dé login et password fausse.
est ce je peu faire header ( 'location : Administrateur/admin_frame.html') parceque ma page de connexion se trouve dans le dossier parent et ma page de redirection dans un sous dossier
slt,
il faut que tu mette tt dans la meme page avec
<?php // si l'utilisateur est connecté comme admin ...
c la partie admin{ // Affichage conditionnel : si et seulement si l'utilisateur est connecté avec le privilege administrateur ?>
<tr align="center">
</tr><tr></tr>
<tr></tr>
<tr></tr>
<tr>
<?php } // fin de l'affichage conditionnel?>
et c a chaque fois que tu veut que ce soit different. Tu peux faire la meme avec user.
Bon courage
il faut que tu mette tt dans la meme page avec
<?php // si l'utilisateur est connecté comme admin ...
c la partie admin{ // Affichage conditionnel : si et seulement si l'utilisateur est connecté avec le privilege administrateur ?>
<tr align="center">
</tr><tr></tr>
<tr></tr>
<tr></tr>
<tr>
<?php } // fin de l'affichage conditionnel?>
et c a chaque fois que tu veut que ce soit different. Tu peux faire la meme avec user.
Bon courage