Session
taratatie
-
Pitet Messages postés 2845 Statut Membre -
Pitet Messages postés 2845 Statut Membre -
Bonjour,
Je débute en PHP et j'aurai besoin d'aide. J'ai 4 type d'utilisateurs. Admin, Abonnes, Annonceurs et annonceurs publicitaires. Quand un utilisateur s'inscrit il a le choix entres 3 statuts Abonnes Annonceurs et Annonceurs Publicitaires. il existe une table pour chacun des statuts. Je souhaite que lorsqu'un individu se connecte, il soit renvoyer sur un page celons son statut. par exemple si c'est un admin il sera renvoyer sur la page Admin, si c'est un abonne il sera renvoyer sur sa page abonne ainsi de suite.
pour le code j'ai fait ça mais ca ne fonctionne pas
// si on obtient une réponse, alors l'utilisateur est un membre
if ($data == 1) {
session_start();
$_SESSION['login'] = $_POST['login'];
if ($_SESSION['login'] == 'Abonnes'){
header('Location: espaceMembreAbonnes.php');
}
elseif ($_SESSION['login'] == 'AnnonceursPublicitaires')
{
header('Location: espaceMembre.php');
}
else {
header('Location: EspaceMembreAnnonceurs.php');
}
}
// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
elseif ($data == 0) {
$erreur = 'Compte non reconnu.';
}
// sinon, alors la, il y a un gros problème :)
else {
$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
Je débute en PHP et j'aurai besoin d'aide. J'ai 4 type d'utilisateurs. Admin, Abonnes, Annonceurs et annonceurs publicitaires. Quand un utilisateur s'inscrit il a le choix entres 3 statuts Abonnes Annonceurs et Annonceurs Publicitaires. il existe une table pour chacun des statuts. Je souhaite que lorsqu'un individu se connecte, il soit renvoyer sur un page celons son statut. par exemple si c'est un admin il sera renvoyer sur la page Admin, si c'est un abonne il sera renvoyer sur sa page abonne ainsi de suite.
pour le code j'ai fait ça mais ca ne fonctionne pas
// si on obtient une réponse, alors l'utilisateur est un membre
if ($data == 1) {
session_start();
$_SESSION['login'] = $_POST['login'];
if ($_SESSION['login'] == 'Abonnes'){
header('Location: espaceMembreAbonnes.php');
}
elseif ($_SESSION['login'] == 'AnnonceursPublicitaires')
{
header('Location: espaceMembre.php');
}
else {
header('Location: EspaceMembreAnnonceurs.php');
}
}
// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
elseif ($data == 0) {
$erreur = 'Compte non reconnu.';
}
// sinon, alors la, il y a un gros problème :)
else {
$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
A voir également:
- Session
- Www.yahoomail.com ouverture de session - Forum Yahoo mail
- Teamviewer code de session expiré ✓ - Forum logiciel systeme
- Session invalide ou obsolète ✓ - Forum finances
- TeamViewer, quel risque de donner son le code - Forum Logiciels
- Veuillez ouvrir une session avec les privilèges du gestionnaire ✓ - Forum Windows
4 réponses
Bonjour
Qu'est-ce qui ne fonctionne pas ? Que se passe-t-il ?
Il te manque un exit; après chque header(), mais ça ne devrait pas empêcher le fonctionnement.
Qu'est-ce qui ne fonctionne pas ? Que se passe-t-il ?
Il te manque un exit; après chque header(), mais ça ne devrait pas empêcher le fonctionnement.
Salut,
Dans ton code, tu test si le login est égal au type d'utilisateur :
Plutôt que d'avoir plusieurs tables SQL pour stocker les informations utilisateurs (Abonnes, Annonceurs, AnnonceursPublicitaires...), il serait peut-être plus simple de n'avoir qu'une seule table avec un champ "type", par exemple :
table : utilisateurs
champs : id | login | password | type | etc...
données : 1 | toto | secret | Admin | ...
2 | tata | 12345 | Abonnes | ...
3 | titi | hello | Anonceurs | ...
Ainsi lorsque tu as identifié l'utilisateur qui se connecte, il te suffit de récupérer la valeur de son champ "type" pour savoir quel est son type.
Bonne journée
Dans ton code, tu test si le login est égal au type d'utilisateur :
if ($_SESSION['login'] == 'Abonnes')Mais la login correspond au nom de l'utilisateur, pas à son type.
Plutôt que d'avoir plusieurs tables SQL pour stocker les informations utilisateurs (Abonnes, Annonceurs, AnnonceursPublicitaires...), il serait peut-être plus simple de n'avoir qu'une seule table avec un champ "type", par exemple :
table : utilisateurs
champs : id | login | password | type | etc...
données : 1 | toto | secret | Admin | ...
2 | tata | 12345 | Abonnes | ...
3 | titi | hello | Anonceurs | ...
Ainsi lorsque tu as identifié l'utilisateur qui se connecte, il te suffit de récupérer la valeur de son champ "type" pour savoir quel est son type.
Bonne journée
Si tu es obligé de garder plusieurs tables utilisateurs, une solution possible à ton problème serait d'effectuer 4 requêtes (une pour chaque table) afin de savoir de quel table est issue l'utilisateur. Par exemple :
// on initialise notre variable : on ne connait pas encore le type :
$typeUtilisateur = '';
// on vérifie si l'utilisateur est dans la table Abonnes
$sql = "SELECT count(*) FROM Abonnes WHERE login='" . mysql_escape_string($_POST['login']) . "' AND password= '" . mysql_escape_string($_POST['password']) . "'";
$req = mysql_query($sql, $base) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_num_rows($req);
if ($data == 1) {
// l'utilisateur est dans la table Abonnes
$typeUtilisateur = 'Abonnes';
} else {
// l'utilisateur n'est pas Abonnes, donc on cherche dans une autre table
$sql = "SELECT count(*) FROM Anonceurs WHERE login='" . mysql_escape_string($_POST['login']) . "' AND password= '" . mysql_escape_string($_POST['password']) . "'";
$req = mysql_query($sql, $base) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_num_rows($req);
if ($data == 1) {
// l'utilisateur est dans la table Anonceurs
$typeUtilisateur = 'Anonceurs';
} else {
// l'utilisateur n'est pas Anonceurs, donc on cherche dans une autre table
$sql = "SELECT count(*) FROM Admin WHERE login='" . mysql_escape_string($_POST['login']) . "' AND password= '" . mysql_escape_string($_POST['password']) . "'";
$req = mysql_query($sql, $base) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_num_rows($req);
if ($data == 1) {
// l'utilisateur est dans la table Admin
$typeUtilisateur = 'Admin';
} else {
// l'utilisateur n'est dans aucune table (pas de compte)
}
}
}
// on peut maintenant faire la redirection en fonction du type de l'utilisateur
if ($typeUtilisateur == 'Abonnes') {
header('Location: espaceMembreAbonnes.php');
exit();
} elseif ($typeUtilisateur == 'Anonceurs') {
header('Location: espaceMembreAnonceurs.php');
exit();
} // etc...
<?php
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['password']) && !empty($_POST['password']))) {
$base = mysql_connect ('localhost', 'port****', '******');
mysql_select_db ('portaileco', $base);
// on teste si une entrée de la base contient ce couple login / password
/*$sql = 'SELECT * FROM AnnonceursPublicitaires WHERE login="'.mysql_escape_string($_POST['login']).'" AND password="'.mysql_escape_string($_POST['password']).'"'*/ ;
$sql =
"SELECT count(*) FROM Abonnes, Annonceurs, AnnonceursPublicitaires WHERE (Abonnes.login='" . mysql_escape_string($_POST['login']) . "' AND Abonnes.password= '" . mysql_escape_string($_POST['password']) . "') OR (Annonceurs.login='" . mysql_escape_string($_POST['login']) . "' AND Annonceurs.password= '" . mysql_escape_string($_POST['password']) . "') OR (AnnonceursPublicitaires.login='" . mysql_escape_string($_POST['login']) . "' AND AnnonceursPublicitaires.password= '" . mysql_escape_string($_POST['password']) . "') ";
#echo $sql;
$req = mysql_query($sql, $base) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_num_rows($req);
//print_r($data);
mysql_free_result($req);;
mysql_close();
//print_r($data);
// si on obtient une réponse, alors l'utilisateur est un membre
if ($data == 1) {
session_start();
$_SESSION['login'] = $_POST['login'];
if ($_SESSION['login'] == 'Abonnes'){
header('Location: espaceMembreAbonnes.php');
}
elseif ($_SESSION['login'] == 'AnnonceursPublicitaires')
{
header('Location: espaceMembre.php');
}
else {
header('Location: EspaceMembreAnnonceurs.php');
}
}
// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
elseif ($data == 0) {
$erreur = 'Compte non reconnu.';
}
// sinon, alors la, il y a un gros problème :)
else {
$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?>
<html>
<head>
<title>Accueil</title>
</head>
<body>
Connexion à l'espace membre :<br />
<form action="" method="post">
Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br />
Mot de passe : <input type="password" name="password" value="<?php if (isset($_POST['password'])) echo htmlentities(trim($_POST['password'])); ?>"><br />
<input type="submit" name="connexion" value="Connexion">
</form>
<a href="index.php">Vous inscrire</a>
<?php
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
</body>
</html>
ça se passe dans la partie /// si on obtient une réponse, alors l'utilisateur est un membre
je lui dit que si le loggin appartient à la table Abonnes alors lorsque que je clic sur connexion il doit nous rediriger vers la page espacemenbre.php sinon ..... mais je pence que c'est là que ça bloque.