je tente de creer un espace membre mais j'avoue je galère. beaucoup de façon de procéder d'apres ce je lis dans les posts. voici ce que j'ai fait et qui ne fonctionne pas.
<?php
session_start();
$DB = new PDO('mysql:host=*******;dbname=*****;charset=utf8', '******', '****');
//récupération des variables
$pseudo = ($_POST['pseudo']);
$pass = ($_POST['pass']);
$pseudo = ($_GET['pseudo']);
// Récupération de l'utilisateur et de son pass hashé
$req = $DB->prepare('SELECT pass FROM collectionneur WHERE pseudo = :pseudo');
$req->execute(array('pseudo' => $pseudo));
$resultat = $req->fetch();
// Comparaison du pass envoyé via le formulaire avec la base
$isPasswordCorrect = password_verify($_POST['pass'], $resultat['pass']);
if (!$resultat) {
echo 'Mauvais identifiant ';
} else {
if ($isPasswordCorrect) {
echo 'connexion avec le pseudo '; echo $pseudo;
session_start();
$_SESSION['id'] = $resultat['id'];
$_SESSION['pseudo'] = $pseudo;
$DB->exec("UPDATE collectionneur SET session='$session' WHERE pass='$pass'");
header('Location:login2.php');
//redirection vers l'index
} else {
echo 'Mauvais mot de passe !';
}
}
?>
Merci de colorer votre code à l'aide du bouton Code
Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: php;">Votre code ici</pre>.
Merci de modifier votre message d'origine en fonction.
Manque de précisions
Vous êtes ici sur un forum d'entraide communautaire et non pas sur un forum de demande de service, le but n'est donc pas de fournir une réponse toute faite ou de directement fournir la solution à quiconque viendrait sans la moindre trace. Afin d'obtenir de l'aide et une solution à votre problème, il est fortement recommandé de présenter clairement l'état actuel du problème en nous fournissant :
Un descriptif clair et précis du problème : qu'est-ce qui ne marche pas, quels sont les messages d'erreur ?
La tentative actuelle de résolution que vous avez effectué : il nous faudrait probablement le formulaire aussi (tu sembles récupérer le pseudo via $_GET *et* $_POST…)
Le résultat attendu et le résultat actuel
Toutes pistes de recherches pouvant aider à la résolution
Pas d'aide concernant le code par MP, le forum est là pour ça :)
C'est du GET ou du POST ? (sachant que le dernier écrase le premier donc ce dernier ne sert à rien)
> $DB->exec("UPDATE collectionneur SET session='$session' WHERE pass='$pass'");
C'est quoi cette requête ? $session sort de nulle part, avec le mot de passe en clair en clause WHERE ?!?
Enfin, bon, c'est le code qui vous est donné dans le TP du cours PHP/MySQL où on retrouve l'erreur du password_verify effectué avant d'avoir exclu le cas où fetch renvoie FALSE (pseudo n'existant pas dans la base) : il suffit de le suivre, pas besoin d'inventer.
Merci Julp, je vais supprimer le GET, je ne savais pas que l'un écrasais l'autre.
pour la session en effet je pense qu'il doit manquer la création de la variable session.
<?php
session_start();
$DB = new PDO('mysql:host=*******;dbname=*****;charset=utf8', '******', '****');
//récupération des variables
$pseudo = ($_POST['pseudo']);
$pass = ($_POST['pass']);
// Récupération de l'utilisateur et de son pass hashé
$req = $DB->prepare('SELECT pass FROM collectionneur WHERE pseudo = :pseudo');
$req->execute(array('pseudo' => $pseudo));
$resultat = $req->fetch();
// Comparaison du pass envoyé via le formulaire avec la base
$isPasswordCorrect = password_verify($_POST['pass'], $resultat['pass']);
if (!$resultat) {
echo 'Mauvais identifiant ';
} else {
if ($isPasswordCorrect) {
echo 'connexion avec le pseudo '; echo $pseudo;
session_start();
$_SESSION['id'] = $resultat['id'];
$_SESSION['pseudo'] = $pseudo;
$DB->exec("UPDATE collectionneur SET session='$session' WHERE pass='$pass'");
header('Location:login2.php');
//redirection vers l'index
} else {
echo 'Mauvais mot de passe !';
}
}
?>
je n'arrive pas a trouver d'ou vient le probleme. Vois tu ce qui ne va pas?
page login.php
<?php
session_start();
$DB = new PDO('xxxxxx');
//récupération des variables
$pseudo = ($_POST['pseudo']);
$pass = ($_POST['pass']);
// Récupération de l'utilisateur et de son pass hashé
$req = $DB->prepare('SELECT pass FROM collectionneur WHERE pseudo = :pseudo');
$req->execute(array('pseudo' => $pseudo));
$resultat = $req->fetch();
if (!$resultat) {
echo 'Mauvais identifiant ';
} else {
// Comparaison du pass envoyé via le formulaire avec la base
$isPasswordCorrect = password_verify($_POST['pass'], $resultat['pass']);
if ($isPasswordCorrect) {
echo 'connexion avec le pseudo '; echo $pseudo;
session_start();
$_SESSION['id'] = $resultat['id'];
$_SESSION['pseudo'] = $pseudo;
$DB->exec("UPDATE collectionneur SET session='$session' WHERE pass='$pass'");
header('Location:login2.php');
//redirection vers l'index
} else {
echo 'Mauvais mot de passe !';
}
}
?>
On ne sait toujours pas à quoi sert cet UPDATE ni d'où sort $session (et qui devrait valoir une notice: undefined variable session) ni ce que vient faire le mot de passe en clair en clause WHERE quand tu le haches ni pourquoi la requête n'est pas préparée non plus !
Il manque un session_start pour le second script ?
Encore une fois, compare ton code à celui du TP : tu nous redonnes le même code avec les mêmes erreurs toujours sans nous expliquer en quoi "ça marche po" soit aucun effort de ta part !
EDIT : trop lent
> $resultat['id']
Ne peut pas exister avec SELECT pass FROM, ça devrait te valoir une notice: undefined index id si tant est que tu travailles avec toutes les erreurs PHP affichées.
En principe, faire un echo avant une redirection est censé bloquer cette dernière, gare aux surprises quand tu passeras en production avec un output_buffering à off parce que tu ne respectes pas le fonctionnement du protocole http (entêtes puis corps)
N'oublions pas les XSS, il n'y a aucun htmlspecialchars non plus.
Pas besoin de passer le pseudo de l'utilisateur courant en GET quand tu l'as en session.
Et en supposant que le formulaire soit bien en method="POST" et que tes variables POST existent bel et bien parce que tu n'as fourni aucun var_dump de $_POST ni même le formulaire.
require_once n'est pas une fonction, les parenthèses ne sont pas nécessaires.
Idem pour les variables $_POST, pas besoin de les parenthéser.
array( ... ) se simplifie depuis PHP 5.4.0 par [ ... ]
PS : honnêtement, mon impression, c'est qu'il (elle ?) est tombé je ne sais comment directement sur la partie TP espace membre pour le recopier (c'est le même code avec la même erreur quand même !) sans le comprendre, ni même les parties du cours qui précèdent (si tant est qu'elles aient été ne serait-ce que lues déjà). Je n'ai pas de problème avec les débutants, il y tout un tas de domaines où je le suis, mais je ne fais pas genre j'ai écrit un code quand je l'ai pompé pour commencer. De plus, on me dirait que telle chose est fausse, j'essaierais de creuser pour comprendre en quoi et si vraiment je ne comprends toujours pas, je demande or, là, non, strictement aucun effort, même code, même description inexistante du "problème".
j'ai enfin compris mes erreurs. mes débuts sont laborieux.
creation d'un espace membre
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Pas d'aide concernant le code par MP, le forum est là pour ça :)
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
Activer les erreurs PDO / (julp) htmlspecialchars / FAQ PHP / Pas d'aide par MP
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli