Session

Fermé
taratatie - 18 oct. 2013 à 14:00
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 18 oct. 2013 à 15:33
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.';
}

}


4 réponses

Utilisateur anonyme
18 oct. 2013 à 14:11
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.
0
En faite quand je clic sur le bouton connexion une fois mes identifiants remplis il ne se passe rien la page deviens blanche voici mon code en entier



<?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.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
18 oct. 2013 à 14:59
Salut,

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
0
Malheureusement mon chef de projet m'a demandé d'avoir ces tables dans la base de données
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
Modifié par Pitet le 18/10/2013 à 15:37
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...
0