Espace de connexion pour utilisateurs
Résolu/Fermé
MrHip7
Messages postés
31
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
6 mai 2015
-
23 avril 2015 à 14:09
Utilisateur anonyme - 24 avril 2015 à 13:13
Utilisateur anonyme - 24 avril 2015 à 13:13
A voir également:
- Espace de connexion pour utilisateurs
- Espace insécable word - Guide
- Gmail connexion - Guide
- Espace de stockage gmail plein - Guide
- Espace de stockage google - Guide
- Facebook connexion - Guide
6 réponses
Utilisateur anonyme
Modifié par le père. le 23/04/2015 à 16:54
Modifié par le père. le 23/04/2015 à 16:54
$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 ?
Utilisateur anonyme
Modifié par le père. le 23/04/2015 à 14:28
Modifié par le père. le 23/04/2015 à 14:28
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.
MrHip7
Messages postés
31
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
6 mai 2015
Modifié par MrHip7 le 23/04/2015 à 14:36
Modifié par MrHip7 le 23/04/2015 à 14:36
Je me suis dis, bon sang, si c'est ça, je mange mon chapeau.
Cela me renvoie toujours mon "NOTHING", malgrès le fait que j'ai remplacé les 'id' par 'membre_id', et le 'resultat' par 'res'... Déjà une erreur d'étourderie de régler..
Cependant, je ne vois pas ce qui cloche...
Cela me renvoie toujours mon "NOTHING", malgrès le fait que j'ai remplacé les 'id' par 'membre_id', et le 'resultat' par 'res'... Déjà une erreur d'étourderie de régler..
Cependant, je ne vois pas ce qui cloche...
MrHip7
Messages postés
31
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
6 mai 2015
23 avril 2015 à 15:00
23 avril 2015 à 15:00
Je réagis plutot rapidement, car ce soucis me cours sur le haricot etant donné que j'y suis depuis hier soir :(
Thorak83
Messages postés
1051
Date d'inscription
jeudi 20 juin 2013
Statut
Membre
Dernière intervention
22 décembre 2017
156
23 avril 2015 à 14:35
23 avril 2015 à 14:35
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
MrHip7
Messages postés
31
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
6 mai 2015
23 avril 2015 à 15:00
23 avril 2015 à 15:00
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');
Thorak83
Messages postés
1051
Date d'inscription
jeudi 20 juin 2013
Statut
Membre
Dernière intervention
22 décembre 2017
156
>
MrHip7
Messages postés
31
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
6 mai 2015
23 avril 2015 à 15:10
23 avril 2015 à 15:10
je confirme, faire:
function connect($pseudo, $mdp) { Global $base; ... }
MrHip7
Messages postés
31
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
6 mai 2015
>
Thorak83
Messages postés
1051
Date d'inscription
jeudi 20 juin 2013
Statut
Membre
Dernière intervention
22 décembre 2017
Modifié par MrHip7 le 23/04/2015 à 15:16
Modifié par MrHip7 le 23/04/2015 à 15:16
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; } } } ?>
Utilisateur anonyme
>
MrHip7
Messages postés
31
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
6 mai 2015
23 avril 2015 à 15:34
23 avril 2015 à 15:34
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.
Utilisateur anonyme
23 avril 2015 à 15:17
23 avril 2015 à 15:17
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
MrHip7
Messages postés
31
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
6 mai 2015
Modifié par MrHip7 le 23/04/2015 à 15:29
Modifié par MrHip7 le 23/04/2015 à 15:29
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?
Thorak83
Messages postés
1051
Date d'inscription
jeudi 20 juin 2013
Statut
Membre
Dernière intervention
22 décembre 2017
156
23 avril 2015 à 15:31
23 avril 2015 à 15:31
c'est ce qui ma trompé
Utilisateur anonyme
>
Thorak83
Messages postés
1051
Date d'inscription
jeudi 20 juin 2013
Statut
Membre
Dernière intervention
22 décembre 2017
23 avril 2015 à 15:41
23 avril 2015 à 15:41
Moi aussi je croyais qu'il s'agissait de PDO au départ. Mais ça ne change rien au fait qu'on peut passer une ressource PDO ou mysqli en paramètre à une fonction.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
23 avril 2015 à 15:40
23 avril 2015 à 15:40
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
MrHip7
Messages postés
31
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
6 mai 2015
23 avril 2015 à 15:44
23 avril 2015 à 15:44
Comme c'est deux String, deux s? j'ai essayé, j'ai toujours cette errreur:
mysqli_sql_exception: a propos de mysqli_prepare()
Lorsque je clique sur le lien vers la doc proposé.. il me dis que mysqli_prepare n'existe pas.. alors que je l'utilise dans mes fonctions de validation de formulaire!!! :(
mysqli_sql_exception: a propos de mysqli_prepare()
Lorsque je clique sur le lien vers la doc proposé.. il me dis que mysqli_prepare n'existe pas.. alors que je l'utilise dans mes fonctions de validation de formulaire!!! :(
MrHip7
Messages postés
31
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
6 mai 2015
Modifié par MrHip7 le 23/04/2015 à 16:00
Modifié par MrHip7 le 23/04/2015 à 16:00
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
Utilisateur anonyme
23 avril 2015 à 16:11
23 avril 2015 à 16:11
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 .
MrHip7
Messages postés
31
Date d'inscription
jeudi 9 janvier 2014
Statut
Membre
Dernière intervention
6 mai 2015
23 avril 2015 à 16:16
23 avril 2015 à 16:16
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 :(
24 avril 2015 à 11:42
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!
24 avril 2015 à 13:13
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 ^^