Espace de connexion pour utilisateurs
Résolu
MrHip7
Messages postés
31
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Alors voila, je vous pose mon problème:
Je réalise un site qui contient un espace membre. Les utilisateurs peuvent s'inscrire (ajout dans la BD, pas de soucis). MAINTENANT Il faut qu'ils puissent s'y connecter! Et c'est là que ça coince, je n'arrive pas à faire marcher ma fonction connect($pseudo, $mdp).
Je vous montre ça de suite, je précise que 'corbac' est le nom de mon bouton pour valider la demande de connexion:
Actuellement, ce code me renvoie "NOTHING" à l'appuie sur le bouton, et j'aimerais plutot qu'il me connexte, donc qu'il envoie l'id du membre qui se connecte, voila! =)
merci d'avance
greg
Alors voila, je vous pose mon problème:
Je réalise un site qui contient un espace membre. Les utilisateurs peuvent s'inscrire (ajout dans la BD, pas de soucis). MAINTENANT Il faut qu'ils puissent s'y connecter! Et c'est là que ça coince, je n'arrive pas à faire marcher ma fonction connect($pseudo, $mdp).
Je vous montre ça de suite, je précise que 'corbac' est le nom de mon bouton pour valider la demande de connexion:
<?php
if (isset($_POST['pseudo']) && isset($_POST['mdp'])) {
$pseudo=$_POST['pseudo'];
$mdp=md5($_POST['mdp']);
}
if(isset($_POST['corbac'])){
connect($pseudo,$mdp, $base);
if(isset($_SESSION['id'])) echo $_SESSION['id'];
else echo "NOTHING";
}
function connect($pseudo, $mdp, $base){
if(!empty($pseudo)&& !empty($password))
{
$req = $base->prepare('SELECT membre_id FROM membres WHERE membre_pseudo = :pseudo AND membre_mdp = :password');
$req->execute(array(
'pseudo' => $pseudo,
'password' => $password));
$res = $req->fetch();// on parcourt la base de données
if (!$res)// si $res ne se trouve pas dans la base de données
{
echo 'Mauvais identifiant ou mot de passe !';
}
else // sinon on demare la session et on définie les variables de session
{
session_start();
$_SESSION['id'] = $resultat['id'];
$_SESSION['pseudo'] = $pseudo;
header('Location:index.php'); // on redirige l'utilisateur vers l'espace reservé
}
}
}
?>
Actuellement, ce code me renvoie "NOTHING" à l'appuie sur le bouton, et j'aimerais plutot qu'il me connexte, donc qu'il envoie l'id du membre qui se connecte, voila! =)
merci d'avance
greg
A voir également:
- Espace de connexion pour utilisateurs
- Gmail connexion - Guide
- Espace insécable - Guide
- Espace de stockage gmail plein - Guide
- Espace de stockage google - Guide
- Connexion chromecast - Guide
6 réponses
$base = mysqli_connect ('localhost', 'root', '');
Cette ligne te connecte à un serveur, pas à une base.
Où apparaît le nom de ta base de données ?
Cette ligne te connecte à un serveur, pas à une base.
Où apparaît le nom de ta base de données ?
Bonjour
Compte-tenu des deux lignes précédentes, la troisième ligne ne devrait-elle pas plutôt être
$_SESSION['id'] = $res['membre_id']; ?
D'autre part
À mon avis, $password est toujours "empty" puisque la variable que tu passes, c'est $mdp.
$req = $base->prepare('SELECT membre_id FROM..." ... $res = $req->fetch();// on parcourt la base de données ... $_SESSION['id'] = $resultat['id'];
Compte-tenu des deux lignes précédentes, la troisième ligne ne devrait-elle pas plutôt être
$_SESSION['id'] = $res['membre_id']; ?
D'autre part
function connect($pseudo, $mdp, $base){ if(!empty($pseudo)&& !empty($password))
À mon avis, $password est toujours "empty" puisque la variable que tu passes, c'est $mdp.
Bonjour,
on peut pas transmettre une variable PDO ($base) dans une fonction.
faire plutôt :
retirez également le header(...) à la fin de la fonction sinon il n'affichera jamais le $_SESSION['id']
Cordialement
on peut pas transmettre une variable PDO ($base) dans une fonction.
faire plutôt :
function connect($pseudo, $mdp) { Global $base; ... }
retirez également le header(...) à la fin de la fonction sinon il n'affichera jamais le $_SESSION['id']
Cordialement
Je reviens vers vous, j'ai du neuf!
Primo, je suis une buse: 1 étourderie, ça passe, 2, ça passe, mais 3 du même genre, je paye mon coup ce soir!
Secundo, j'ai une nouvelle erreur (que j'ai déjà vu, mais qui avait disparu quand j'avais refais mon code sous forme de fonction...
Fatal error: in.. ligne 80
mysqli_sql_exception sur la ligne 80:
la ligne 80:
Primo, je suis une buse: 1 étourderie, ça passe, 2, ça passe, mais 3 du même genre, je paye mon coup ce soir!
Secundo, j'ai une nouvelle erreur (que j'ai déjà vu, mais qui avait disparu quand j'avais refais mon code sous forme de fonction...
Fatal error: in.. ligne 80
mysqli_sql_exception sur la ligne 80:
la ligne 80:
$req = $base->prepare('SELECT membre_id FROM membres WHERE membre_pseudo = :pseudo AND membre_mdp = :password');
C'est chose faites:
<?php if (isset($_POST['pseudo']) && isset($_POST['mdp'])) { $pseudo=$_POST['pseudo']; $mdp=md5($_POST['mdp']); } if(isset($_POST['corbac'])){ connect($pseudo,$mdp); if(isset($_SESSION['membre_id'])) echo $_SESSION['membre_id']; else echo "NOTHING"; } function connect($pseudo, $mdp){ if(!empty($pseudo)&& !empty($mdp)) { Global $base; $req = $base->prepare('SELECT membre_id FROM membres WHERE membre_pseudo = :pseudo AND membre_mdp = :password'); $req->execute(array( 'pseudo' => $pseudo, 'password' => $password)); $res = $req->fetch();// on parcourt la base de données if (!$res)// si $res ne se trouve pas dans la base de données { echo 'Mauvais identifiant ou mot de passe !'; } else // sinon on demare la session et on définie les variables de session { session_start(); $_SESSION['membre_id'] = $res['membre_id']; $_SESSION['pseudo'] = $pseudo; } } } ?>
Non, c'était inutile de mettre $base en global. Ça ne marchera ni mieux ni plus mal comme ça.
Thorak83 affirme, mais il ne donne aucune explication. Et il ne risque pas d'en donner, car c'est faux.
Où y a-t-il une restriction de ce type dans le passage de paramètres à une fonction en PHP ?
Je viens d'ailleurs de faire l'essai.
Thorak83 affirme, mais il ne donne aucune explication. Et il ne risque pas d'en donner, car c'est faux.
Où y a-t-il une restriction de ce type dans le passage de paramètres à une fonction en PHP ?
Je viens d'ailleurs de faire l'essai.
Tu utilises mysqli, mais tu fais comme si tu utilisais PDO.
D'après ce que je lis dans la doc, mysqli ne supporte pas les marqueurs nommés dans les requêtes préparées, tu devrais avoir des ? au lieu de :pseudo et :password. Ensuite, tu devrais utiliser bind_param, et enfin la méthode execute de mysqli n'attend pas d'array comme paramètre
D'après ce que je lis dans la doc, mysqli ne supporte pas les marqueurs nommés dans les requêtes préparées, tu devrais avoir des ? au lieu de :pseudo et :password. Ensuite, tu devrais utiliser bind_param, et enfin la méthode execute de mysqli n'attend pas d'array comme paramètre
Hum je vois..
Du coup je me suis refait la fonction connect comme suis:
Qu'en pensez-vous?
Du coup je me suis refait la fonction connect comme suis:
function connect($pseudo, $mdp) { Global $base; $stmt = mysqli_prepare($base, 'SELECT membre_id FROM membres WHERE membre_pseudo = ? AND membre_mdp = ?'); mysqli_stmt_bind_param($stmt, 's', $pseudo, $mdp); mysqli_stmt_execute($stmt); mysqli_stmt_bind_result($stmt, $id); $res=mysqli_stmt_fetch($stmt); if (!$res)// si $res ne se trouve pas dans la base de données { echo 'Mauvais identifiant ou mot de passe !'; } else // sinon on demare la session et on définie les variables de session { session_start(); $_SESSION['membre_id'] = $res['membre_id']; $_SESSION['pseudo'] = $pseudo; } }
Qu'en pensez-vous?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
mysqli_stmt_bind_param($stmt, 's', $pseudo, $mdp);
D'après la doc, ce serait plutôt 'ss' car il y a deux paramètres
D'après la doc, ce serait plutôt 'ss' car il y a deux paramètres
J'ai finalement trouvé la docs sur mysqli_prepare (je ne sais pas pourquoi php ne veux pas du mien...)
j'ai remplacé par $id... -_-
Je n'utilise pas le style objet, j'ai peur de ces ::
EDIT
Attendez voir! J'avais cette ligne là:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
en haut de mon fichier,
lorsque je la passe en commentaire, j'ai des erreurs plus précises!
mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, boolean given
mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, boolean given
mysqli_stmt_bind_result() expects parameter 1 to be mysqli_stmt, boolean given
mysqli_stmt_fetch() expects parameter 1 to be mysqli_stmt, boolean given
j'ai remplacé par $id... -_-
Je n'utilise pas le style objet, j'ai peur de ces ::
EDIT
Attendez voir! J'avais cette ligne là:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
en haut de mon fichier,
lorsque je la passe en commentaire, j'ai des erreurs plus précises!
mysqli_stmt_bind_param() expects parameter 1 to be mysqli_stmt, boolean given
mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, boolean given
mysqli_stmt_bind_result() expects parameter 1 to be mysqli_stmt, boolean given
mysqli_stmt_fetch() expects parameter 1 to be mysqli_stmt, boolean given
Ta première erreur montre que le "prepare" se passe mal. Le reste ne peut pas marcher.
Si $base a été obtenu avec un new mysqli, c'est un objet et il ne peut pas te servir de ressource dans des fonctions du style procédural. Tu travailles en objet ou en procédural, mais pas les deux .
Si $base a été obtenu avec un new mysqli, c'est un objet et il ne peut pas te servir de ressource dans des fonctions du style procédural. Tu travailles en objet ou en procédural, mais pas les deux .
Voila a quoi correspond $base:
Je comprends pas du tout pourquoi il ne veux pas du prepare, j'utilise le même dans ma validation :(
$base = mysqli_connect ('localhost', 'root', '');
<?php if (isset($_POST['pseudo']) && isset($_POST['mdp'])) { $pseudo=$_POST['pseudo']; $mdp=md5($_POST['mdp']); } if(isset($_POST['corbac'])){ connect($base,$pseudo,$mdp); if(isset($_SESSION['membre_id'])) echo $_SESSION['membre_id']; else echo "NOTHING"; }
function connect($base, $pseudo, $mdp) { $stmt = mysqli_prepare($base, 'SELECT membre_id FROM membres WHERE membre_pseudo = ? AND membre_mdp = ?'); mysqli_stmt_bind_param($stmt, 'ss', $pseudo, $mdp); mysqli_stmt_execute($stmt); mysqli_stmt_bind_result($stmt, $id); $res = mysqli_stmt_fetch($stmt); if (!$res)// si $res ne se trouve pas dans la base de données { echo 'Mauvais identifiant ou mot de passe !'; } else // sinon on demare la session et on définie les variables de session { session_start(); $_SESSION['membre_id'] = $id; $_SESSION['pseudo'] = $pseudo; } }
Je comprends pas du tout pourquoi il ne veux pas du prepare, j'utilise le même dans ma validation :(
Je vais me pendre et je reviens vers vous si j'ai un soucis (oubli de tabouret ou de corde).
Merci beaucoup le père pour ton aide précieuse!
N'oublie pas de vérifier le point de fixation de la corde, ce serait bête de te faire une entorse en te décrochant ^^