Rechercher : dans
Par :

[HTML/PHP] redirections soumises à conditions

Dernière réponse le 19 fév 2009 à 11:25:20 owi, le 25 jui 2007 à 11:58:03 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Firefox 2.0.0.5

Meilleures réponses pour « [HTML/PHP] redirections soumises à conditions » dans :
[Webmaster] Faire une redirection VoirLes différentes solutions sont présentées de la meilleure (.htaccess) à la moins bonne (JavaScript). Un .htaccess Le .htaccess est à placer dans le répertoire qui doit être redirigé. On applique une redirection de cette façon : RedirectPermanent...
[PHP] Les ressemblances à ne pas confondre VoirIntroduction Concaténation ou paramètres ? Guillemets/Apostrophe Structure require/include isset vs empty htmlentities ou htmlspecialchars ? Nombre de signes égal Introduction Cette astuce présente plusieurs fonction ou astuces en...
Télécharger PHP Edit VoirPHPEdit est un environnement de développement intégré (IDE) sous Windows pour le langage PHP. Il offre un grand nombre de fonctionnalités permettant de développer plus efficacement : Coloration syntaxique Auto-complétion des fonctions Débuggeur...
PHP - Structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-à-dire si la valeur de son expression vaut 0 ou 1 (le PHP associe le mot clé true à 1...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...
Introduction à PHP VoirQu'est-ce que PHP? PHP est un langage interprété (un langage de script) exécuté du côté serveur (comme les scripts CGI, ASP, ...) et non du côté client (un script écrit en Javascript ou une applet Java s'exécute sur votre ordinateur...). La...

1

Henry, le 25 jui 2007 à 14:57:29

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?

Répondre à Henry

2

owi, le 25 jui 2007 à 15:37:44

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 :(

Répondre à owi

3

Henry, le 25 jui 2007 à 15:44:43

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.

Répondre à Henry

4

fil1958, le 25 jui 2007 à 15:49:44

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

Répondre à fil1958

5

owi, le 25 jui 2007 à 16:53:51

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 ///!\

Répondre à owi

6

Reivax962, le 25 jui 2007 à 17:01:03

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');
        }
      }
    }
  }
?>

Répondre à Reivax962

7

fil1958, le 25 jui 2007 à 17:06:55

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');

Répondre à fil1958

8

 bruno08, le 19 fév 2009 à 11:25:20

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

?>

Répondre à bruno08