8721 sujets

Développement web côté serveur, CMS

salut tout le monde!
Voilà, je viens au près de vous aujourd'hui pour demander votre aide parce que je suis pratiquement bloqué et ne sais plus quoi faire.
En faite, j'ai crée une page d'inscription et de connexion en PHP, les données s'enregistrent correctement dans la base de données, aucun problème avec cela. Je parvient à connecter les premier utilisateur inscrit dans la base de données, mais pour ce qui est du reste des autres utilisateurs, leur connexion est impossible à partir du deuxième utilisateur. J'ai vraiment regardé partout dans mon code, je ne parvient pas à détecter
d'où vient le problème.
Je dépose mon code et j'espère que vous pourrez vraiment me venir en aide Smiley smile

Le formulaire d'inscription :
<style type="text/css">
a{
text-decoration:none;
color:green;
}
.c
ontain_form{
width:45%;
height:360px;
border:1px solid #568;
margin-top:60px;
border-radius:15px;
}
.input{
margin-top:30px;
height:40px;
text-align:center;
width:68%;
}
.button{
width:30%;
height:40px;
}
</style>

<center>

<h2>Création de compte</h2><h3><a href="se_connecter.php">Se connecter</a></h3><hr/>

<?php include('includes/registre.php') ?>

<div class="contain_form">
<form method="post" action="">
<input type="text" name="pseudo" placeholder="Nom d'utilisateur" class="input" required="required" /><br/><br/>

<input type="email" name="email" placeholder="Entrez votre Email" style="margin-top:12px;" class="input" required="required" /><br/><br/>

<input type="password" name="motdepasse" placeholder="Entrez votre mot de passe" required="required" style="margin-top:12px;" class="input" /><br/><br/>

<input type="password" name="motdepasse2" placeholder="Confirmez votre mot de passe" required="required" style="margin-top:12px;" class="input" /><br/><br/>

<input type="submit" name="envoyer" class="button" />
</form>
</div>

</center>

Le code PHP qui contrôle le formulaire:
<?php include('includes/connect.php'); ?>
<?php

if(isset($_POST['envoyer'])){

if(isset($_POST['pseudo']) && !empty($_POST['pseudo']) && isset($_POST['email']) && !empty($_POST['email']) && isset($_POST['motdepasse']) && !empty($_POST['motdepasse']) && isset($_POST['motdepasse2']) && !empty($_POST['motdepasse2'])){

$pseudo = htmlspecialchars($_POST['pseudo']);
$email = htmlspecialchars($_POST['email']);
$motdepasse = htmlspecialchars(md5($_POST['motdepasse']));
$motdepasse2 = htmlspecialchars(md5($_POST['motdepasse2']));

$id = 0;

if($motdepasse == $motdepasse2){
//INSERTION OF INFORMATION TO THE TABLE REGISTRATION

$req1 = $db -> prepare('INSERT INTO registration VALUES (:id, Smiley langue seudo, :email, :motdepasse)');
$req1 -> execute(array(

'id' => $id,
'pseudo' => $pseudo,
'email' => $email,
'motdepasse' => $motdepasse
));

echo "<h3>Félicitations, votre compte a été créé avec succès !</h3>";

}
else{
echo "<h3>Les deux mots de passes doivent être identiques !</h3>";
}
}

}
?>

Et en fin le code qui gère la connexion des utilisateurs:
<?php include('includes/connect.php'); ?>

<?php

if (isset($_POST['send'])) {

if(isset($_POST['username']) && !empty($_POST['username']) && isset($_POST['password']) && !empty($_POST['password'])){
$pseudo = htmlspecialchars($_POST['username']);
$motdepasse = htmlspecialchars(md5($_POST['password']));

$req3 = $db -> query('SELECT pseudo, motdepasse FROM registration');
$connect = $req3 -> fetch();

if($pseudo == $connect['pseudo'] && $motdepasse == $connect['motdepasse']){
session_start();

$SESSION['pseudo'] = $pseudo;

header('Location: userspace.php');
}
else{
echo "<h3>Nom d'utilisateur ou mot de passe incorrecte !</h3>";
}
}
else{
echo "<h3>Veillez compléter tout les champs...</h3>";
}
}

?>

Comme je vous l'ai dit, ce n'est que le premier utilisateur qui peux se connecter à la base de données mais le reste non. Je ne comprend vraiment pas pour quoi mon code ne fonctionne pas totalement, pourtant d'après moi il n'y pas de problème. Merci d'avance
Salut et merci pour ta réponse, mais ça ne marche toujours pas, même après avoir utilisé fetchAll()...
Merci de partager une autre idée !
salut,
tu ne mets aucune condition pour récupérer les utilisateurs, du coup, c'est toute la table qui est renvoyée et comme tu utilises un ->fetch(), seule la première entrée est retournée (et ce quelque soit le nombre d'entrées dans ta table).

Il faut ajouter quelque chose pour filtrer :
SELECT pseudo, motdepasse FROM registration

devient
SELECT pseudo, motdepasse FROM registration WHERE pseudo = :valeur_pseudo

Avec cette requête, tu sélectionnes l'entrée qui contient "pseudo" et ce n'est que là que tu vérifies le mot de passe (tu gardes fetch et non fetchAll).
Tu devrais d'ailleurs pour cela préférer les fonctions natives password_hash et password_verify plutôt qu'aux MD5.
Si aucune entrée n'est retournée, cela signifie que le pseudo n'existe pas.

Autre chose, ça ne sert à rien de stocker tes données avec htmlspecialchars.