Code : Tout sélectionner
- Concernant ton problème de vérif, c'est encore une erreur d'innatention (donne tes doigts ! ) : tu fais un count(*) pour savoir si l'enregistrement existe en base, tu récupères le résultat dans une variable "$tab" et tu testes un hypothétique résultat contenu dans une variable "$resultat" sortie d'on ne sait où Donc je supprime la ligne d'accord ?- il ne sert à rien de protéger tes variables ($Pseudo = mysql_real_escape_string($Pseudonyme)) si au moment de les utiliser dans ta requête tu fais appel à la variable non protégée ($Pseudonyme)
J'englobe le test ici alors ? :- la fonction empty() teste non seulement si la variable est "vide" (0, false, "", ...) mais également l'existance de la variable. Faire un isSet() supplémentaire est donc redondant Et c'est d'ailleurs pas le switch qu'il faut englober avec ce test, mais la partie où tu récupères les données transmises en $_POST
$Pseudo = $_POST['pseudo'];
$mdp = $_POST['mdp'];
$confirmation_mdp = $_POST['confirmation_mdp'];
$email = $_POST['email'];
$confirmation_Email = $_POST['confirmation_email'];
$erreur = null;
C'est chose faite.- A moins de savoir très précisément quelle est la différence entre l'opérateur "&&" et l'opérateur "AND" en php et les impacts que peut avoir le second sur ton code, je te recommande de toujours utiliser le premier (&&) (cf. le code proposé par thehawk, et c'est vallable pour lui aussi ).
- Tu n'as pas besoin de passer ta variable $erreur en paramètre de ta fonction verif() si tu ne l'utilises pas
function verif($pseudo,$mdp,$confirmation_mdp,$email,$confirmation_email,$erreur){
if(!empty($pseudo) && !empty($mdp) && !empty($confirmation_mdp) && !empty($email) && !empty($confirmation_email)){
if(($mdp == $confirmation_mdp) && ($email == $confirmation_email)){
if(preg_match("#[a-z0-9]{2,30}@[a-z0-9]{2,30}.[a-z]{0,10}#",$email)){
$erreur = 0;
return $erreur;
}
$erreur = 1;
return $erreur;
}
$erreur = 2;
return $erreur;
}
$erreur = 3;
return $erreur;
}
Donc je supprime cette ligne ?- la fonction mysql_fetch_assoc() retourne un tableau, pas un booléen. Le test ($tab === true) ne pourra donc jamais être vrai, puisque $tab contiendra soit un array soit FALSE en cas d'erreur
$tab = mysql_fetch_assoc($exe);
______
Bah tu utilises la variable dans laquelle tu as stocké ton résultatD'accord, mais je fais quoi alors ?Code : Tout sélectionner
- Concernant ton problème de vérif, c'est encore une erreur d'innatention (donne tes doigts ! ) : tu fais un count(*) pour savoir si l'enregistrement existe en base, tu récupères le résultat dans une variable "$tab" et tu testes un hypothétique résultat contenu dans une variable "$resultat" sortie d'on ne sait où![]()
$exe = mysql_query($requete);
$tab = mysql_fetch_assoc($exe);
^__
v
if ($tab['nb'] == 0) // et pas ($resultat['nb'] == 0)
Aaah bah non... c'est une bonne chose de protéger ses variables pour l'insertion SQL! Faut juste qu'ensuite, dans ta requête SQL tu te serves de la variable $Pseudo qui est protégée et pas de $Pseudonyme qui ne l'est pasDonc je supprime la ligne d'accord ?- il ne sert à rien de protéger tes variables ($Pseudo = mysql_real_escape_string($Pseudonyme)) si au moment de les utiliser dans ta requête tu fais appel à la variable non protégée ($Pseudonyme)
$Pseudo = mysql_real_escape_string($Pseudonyme);
$Pass = mysql_real_escape_string($Mdp);
....
$insertion = "INSERT INTO Membres(Pseudonyme,Mdp,Date) VALUES('".$Pseudo."', '".$Pass."', NOW())";
// au lieu de : ('".$Pseudonyme."', '".$Mdp."', NOW())";
Et tu peux effectivement utiliser les fonctions sha ou md5 pour crypter le mot de passe au moment où tu l'insères Ouaip !J'englobe le test ici alors ? :- la fonction empty() teste non seulement si la variable est "vide" (0, false, "", ...) mais également l'existance de la variable. Faire un isSet() supplémentaire est donc redondant Et c'est d'ailleurs pas le switch qu'il faut englober avec ce test, mais la partie où tu récupères les données transmises en $_POST
$Pseudo = $_POST['pseudo']; $mdp = $_POST['mdp']; $confirmation_mdp = $_POST['confirmation_mdp']; $email = $_POST['email']; $confirmation_Email = $_POST['confirmation_email']; $erreur = null;
Pas forcément toutes, mais tu peux virer celle en argument de la fonction (dans la déclaration et dans l'appel). Et tu peux aussi retourner une valeur sans la stocker dans une variable :- Tu n'as pas besoin de passer ta variable $erreur en paramètre de ta fonction verif() si tu ne l'utilises pas
Alors je supprime toutes les $erreur, n'est ce pas ?![]()
function verif($pseudo,$mdp,$confirmation_mdp,$email,$confirmation_email){
if(!empty($pseudo) && !empty($mdp) && !empty($confirmation_mdp) && !empty($email) && !empty($confirmation_email)){
if(($mdp == $confirmation_mdp) && ($email == $confirmation_email)){
if(preg_match("#[a-z0-9]{2,30}@[a-z0-9]{2,30}.[a-z]{0,10}#",$email)){
return 0;
}
return 1;
}
return 2;
}
return 3;
}Par contre, je te recommande de commenter ton code ou d'utiliser des constantes pour ne pas avoir à chercher à quoi correspondent les 0, 1, 2 ou 3 Raah mais c'est fini de vouloir tout supprimer ??Donc je supprime cette ligne ?- la fonction mysql_fetch_assoc() retourne un tableau, pas un booléen. Le test ($tab === true) ne pourra donc jamais être vrai, puisque $tab contiendra soit un array soit FALSE en cas d'erreur![]()
$tab = mysql_fetch_assoc($exe);
<?php
if (isset($_POST) && !empty($_POST)) {
$Pseudo = $_POST['pseudo'];
$mdp = $_POST['mdp'];
$confirmation_mdp = $_POST['confirmation_mdp'];
$email = $_POST['email'];
$confirmation_Email = $_POST['confirmation_email'];
$erreur = null;
}
function erreur($erreur){
echo("Erreur : ".$erreur."");
}
function verif($pseudo,$mdp,$confirmation_mdp,$email,$confirmation_email){
if(!empty($pseudo) && !empty($mdp) && !empty($confirmation_mdp) && !empty($email) && !empty($confirmation_email)){
if(($mdp == $confirmation_mdp) && ($email == $confirmation_email)){
if(preg_match("#[a-z0-9]{2,30}@[a-z0-9]{2,30}.[a-z]{0,10}#",$email)){
return 0;
}
return 1;
}
return 2;
}
return 3;
}
switch ($erreur = verif($pseudo,$mdp,$confirmation_mdp,$email,$confirmation_email,$erreur)){
case 1:
erreur("Mail");
break;
case 2:
erreur("Vous n'avez pas entrer deux mot de passe identique, ou, deux adresses emails identiques.");
break;
case 3:
erreur("Champs vides.");
break;
default:
echo "Erreur General";
}
$mysql_connexion = mysql_connect("", "", "");
mysql_select_db ('Membres', $Membres);
$Pass = mysql_real_escape_string($mdp);
$Pseudo = mysql_real_escape_string($Pseudo);
$requete = "SELECT count(*) as nb FROM Membres Where Pseudonyme = '".$nom."'";
$exe = mysql_query($requete);
$tab = mysql_fetch_assoc($exe);
if ($tab['nb'] == 0) // et pas ($resultat['nb'] == 0)
{
$insertion = "INSERT INTO Membres(Pseudonyme,Mdp,Date) VALUES('".$Pseudo."', '".$Pass."', NOW())";
$inser_exec = mysql_query($insertion);
if ($$Pseudonyme === true)
{
session_start();
$_SESSION['pseudo'] = $pseudo;
}
}
else
{
$message = 'Ce pseudonyme est déjà utilisé. Merci de le modifier.';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
<title>J.Newb - </title>
</head>
<body>
<div id="baniere">
</div>
<div id="contenu">
<form method="POST">
<p class="petitvertgras">L'inscription sur J.Newb est gratuite et ne prend que très peu de temps. Une fois le formulaire rempli, vous recevrez un e-mail contenant vos identifiants et un lien afin d'activer votre compte. </p><br />
<p class="normalgris"><strong>Formulaire d'inscription : </strong>
</p><br/>
<span class="petitvert">Pseudonyme : </span>
<div id="champs"><input name="Pseudonyme" type="text"/></div><br />
<span class="petitvert">Mot de Passe : </span>
<div id="champs"><input type="password" name="Mdp" /></div><br />
<span class="petitvert">Confirmation du mot de passe :</span><br />
<div id="champs"><input type="password" name="Confirmation_mdp" /></div><br />
<span class="petitvert">Adresse e-mail : </span>
<div id="champs"><input type="text" name="Email" /></div><br />
<span class="petitvert">Confirmtion de l'adresse e-mail : </span>
<div id="champs"><input type="text" name="Confirmation_Email" /></div><br /><br/>
<span class="petitvert">Recopiez s'il vous plait ce le contenu de l'image ci-dessous : (Système anti-robot) </span><br /><br /><br />
<p><div id="reglement">
<p class="normalgris">Bonjour et bienvenue sur J.Newb. Nous sommes heureux de vous avoir parmi nous. <br />
Cependant pour être membre de notre site, vous devez accepter notre règlement. :) </p>
<p class="normalgris"><strong>Règlement du site :</strong></p>
<p class="normalvert">- Ne pas écrire en langage SMS, ou encore en majuscule.<br />
- Ne pas manquer de respect aux membres du site. <br />
- Ne pas poster de message à caractère injurieux, raciste, xénophobe, sexuel, illégal, ou incitant à la haine.<br />
- Les message publicitaire ne sont pas autorisés.</p>
<p class="normalgris">En cas de litige ou de non respect du règlement, l'équipe de J.Newb pourrait prendre des sanctions envers le ou les fauteurs de troubles. <br />
En cas de litige grave, votre adresse IP est conservé dans notre base de donnée et permettra de retrouver le fautif afin d'engager des poursuites.</p>
<p class="normalgris">J.Newb stock vos informations dans une base de donnée, mais ils ne sont dans aucun cas redistribué à tierce personne. Vos informations personnels sont entre de bonne main. :) </p>
<p class="normalgris">Les conseils de J.Newb pour que tout ce passe dans le meilleur des mondes : :) </p>
<p class="normalgris">Toujours rester polis mais aussi avoir un minimum de courtoisie. <br />
Si vous posez une question essayez d'être le plus précis possible afin les internautes puivent vous répondre de manière juste. </p>
<p class="normalgris">Nous espérons que votre venue sur J.Newb vous sera agréable. ;) </p>
</div>
</p><br/><br/><br/>
<input name="validation" type="submit" value="S'enregistrer" />
</form>
<div id="copyright">
<p class="petitnoire"> J.Newb © 2009 </p>
</div>
</div>
<div id="foot">
<span class="petitnoire">Nous contacter : <a href="[email protected]" class="petitnoire">[email protected]</a></span></div>
</body>
</html>
Et ma Table. 
$insertion = "INSERT INTO Membres(Pseudonyme,Mdp,Date) VALUES('".$Pseudo."', '".$pass."', NOW())";
dans l'onglet SQL de My Admin ? $pass = mysql_real_escape_string($Mdp);
$Pseudo = mysql_real_escape_string($pseudo);
$requete = "SELECT count(*) as nb FROM Membres Where Pseudonyme = '".$nom."'"; sauf qu'à aucun moment dans ton code, on ne voit apparaitre la variable $nom