[HTML/PHP] redirections soumises à conditions

Fermé
owi - 25 juil. 2007 à 11:58
david77179 Messages postés 157 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 9 janvier 2019 - 13 août 2010 à 12:25
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
A voir également:

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?
0
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 :(
0
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.
0
Utilisateur anonyme
25 juil. 2007 à 15:49
Remplace ç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
0

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 ///!\
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
25 juil. 2007 à 17:01
Ben oui, tu as laissé la balise <body> devant !

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');
        }
      }
    }
  }
?>
0
Utilisateur anonyme
25 juil. 2007 à 17:06
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');
0
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

?>
0
smile88 Messages postés 51 Date d'inscription mardi 23 mars 2010 Statut Membre Dernière intervention 29 décembre 2014 3
15 mai 2010 à 19:49
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
0
david77179 Messages postés 157 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 9 janvier 2019 22
13 août 2010 à 12:25
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
0