JeuWeb - Crée ton jeu par navigateur
Espace membre - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Espace membre (/showthread.php?tid=6869)



Espace membre - relax76011 - 15-11-2013

Bonjour à vous,
J'ai un soucis lorsque met utilisateur s'inscrit je voudrait verifier si leurs identifiant n'est déjà pas dans la bdd.
mais je ne vois pas j'ai essayer un code mais cela ne marche pas voici le code:




<?php


if (!isset($_POST['inscription'])) {
?>
<div class="flaot">
<h1> Formulaire d'inscription </h1>
<form method="POST" action="login.php" id="form2">
<input type="text" name="nom" placeholder="Votre Nom" required autofocus/> <br/>
<input type="text" name="prenom" placeholder="Votre Prénom" required/><br/>
<input type="text" name="identifiant" placeholder="Votre Pseudo" required/> <br/>
<input type="text" name="codePostal" placeholder="Votre Code Postal" required /><br/>
<input type="text" name="adresse" placeholder="Votre Adresse" required /><br/>
<input type="text" name="ville" placeholder="Votre Ville" required /><br/>
<input type="mail" name="mail" placeholder="Votre mail" required/><br/>
<input type="password" name="motDePasse" placeholder="Votre Mot de passe" required /><br/>
<input type="password" name="confirmationMdp" placeholder="Confirmez votre Mot de passe"required /><br/>
Votre sexe ? <br />
<input type="radio" name="choix" checked id="Homme" /> Homme<br/>
<input type="radio" name="choix" id="Femme" /> Femme<br/>
<input type="submit" value="inscription" name="inscription" />
</form>
</div>

<?php }
else{

$login = $_POST['identifiant'];


include "php/bdd.php";
$loginbdd = $connexion->prepare( "SELECT COUNT(*) as nombre FROM client WHERE 'login' = $login");
$loginbdd->execute(array(":idCli"=> $login));
$loginIns = $loginbdd->fetch();

if ($loginIns['nombre'] != 0 )
{
if ($_POST['motDePasse'] == $_POST['confirmationMdp']) {


try
{
// Insertion dans la base de donnée

$statement = $connexion->prepare("INSERT INTO client (nomCli, pnomCli,adrCli,idCli,mdpCli,mailCli,codPostCli,vilCli) VALUES (:nomCli, :pnomCli,:adrCli,:idCli,:mdpCli,:mailCli,:codPostCli,:vilCli)");

$statement->execute(array(":nomCli" => $_POST['nom'],
":pnomCli" => $_POST['prenom'],
":adrCli" => $_POST['adresse'],
":idCli" => $_POST['identifiant'],
":mdpCli" =>$_POST['motDePasse'],
":mailCli" => $_POST['mail'],
":codPostCli" => $_POST['codePostal'],
":vilCli" => $_POST['ville']
));



// Redirection vers la page d'accueil

echo "<p>L'inscription c'est bien passée</p>";


}
catch(Exception $e)

{

die('Erreur : '.$e->getMessage());

}
}
else{
echo "<p>Le mot de passe n'est pas identique </p> ";
unset($_POST['motDePasse'],
$_POST['confirmationMdp']);
}
}

else
{

echo "<p>Identifiant déjà pris </p>";
unset($_POST);
}


}
?>

Merci à vous d'avance


RE: Espace membre - Sephi-Chan - 15-11-2013

Bonjour !

Place ton code entre les balises [code=php]...[/code], et pas [php]...[/php] ou [code]...[/code].

Par ailleurs, précise ce que tu obtiens : "ça ne marche pas" n'est jamais une bonne description.

Enfin, JeuWeb n'est pas le bon endroit pour apprendre à faire des choses aussi simples qu'un espace membre. Il y a des communautés plus appropriées pour apprendre à programmer. Je laisse passer pour cette fois mais n'en fais pas une habitude.


RE: Espace membre - Anarion - 15-11-2013

Oui, le "ça marche pas" est sans doute assez vague.

Vite fait, en regardant, est-ce que ce ne sont pas tous les $_POST['bidule'] dans l'execute de ton $statement ?

Peut-être que tu peux les récupérer avant sous des noms de variables dédiées (plus simples à manipuler que ces $_POST) ce qui te permettra aussi de les sécuriser en passant.

Après, sinon, essaie d'identifier où ça plante quitte à isoler des bouts de code. Fais juste afficher le résultat de ta requête avant de l'exécuter, par exemple.


RE: Espace membre - Poubi - 15-11-2013

Salutations,

Une requête préparée en SQL permet justement d'éviter l'injection SQL, pas de risque de ce côté là, même si un traitement préalable des entrées utilisateur est toujours conseillé.

A vu de nez, je dirais que ça provient de ces lignes :
Code PHP :
<?php 
$loginbdd
= $connexion->prepare( "SELECT COUNT(*) as nombre FROM client WHERE 'login' = $login");
$loginbdd->execute(array(":idCli"=> $login));

et

Code PHP :
<?php 
if ($loginIns['nombre'] != 0 )

Tu déclares suite à cette requête une affectation de variable :idCli pour $login, or tu l'as définie directement dans ta requête : ce n'est pas très sécurisé. Utilise plutôt :

Code PHP :
<?php 
$loginbdd
= $connexion->prepare( "SELECT COUNT(*) as nombre FROM client WHERE login = :idCli");
$loginbdd->execute(array(":idCli"=> $login));

et

Code PHP :
<?php 
if ($loginIns['nombre'] == 0 )

En effet, tu vérifies si l'identifiant est déjà utilisé, mais ici tu fais l'insertion même si l'identifiant existe déjà, c'est contradictoire !

En espérant avoir répondu à tes attentes,
Cordialement,
Poubi ! Smile


RE: Espace membre - relax76011 - 16-11-2013

Merci a toi c'est bien ce qu'il fallait.
et excusez moi de ce poste :/ mais je n'arrive pas a avoir de reponse sur openclassrooms
Cordialement