Tout d'abord je pense que tu devrais, en premier lieu, vérifier si le formulaire n'est pas soumis vide, cela évitera des requêtes "vide" et de se protéger de ce que l'on nomme le SQL injection.
Petite parenthèse : Le SQL injection permet si tu ne protèges pas tes chaines, de pouvoir faire ressortir des informations importante et mettre à mal la sécurité de ton site.
Commençons donc par le début :
Petite parenthèse : Le SQL injection permet si tu ne protèges pas tes chaines, de pouvoir faire ressortir des informations importante et mettre à mal la sécurité de ton site.
Commençons donc par le début :
Code PHP :
<?php
$bError = false;
/**
* récupération des variables $_POST
*
* Utilisation de la fonction trim() pour supprimer les espaces avant et après la chaîne,
* si jamais le visiteur ne rentre que des espaces,
* la chaîne retourné sera donc vide.
*/
$username = trim($_POST["username"]);
$password = trim($_POST["password"]);
$email = trim($_POST["email"]);
// Vérification du username
if(empty($username)) {
$bError = true;
}
// Vérification du password
if(empty($password)) {
$bError = true;
}
// Vérification du courriel
if(empty($email)) {
$bError = true;
}
// [...]
/**
* Si aucun champs n'est vide on continue l'enregistrement
* A partir d'ici on sait, que les variables ont une valeur
*/
if($bError === false) {
/**
* Connexion à la base de données
*/
// ...
/**
* Ici on va tester l'éxistence du pseudo
* et on n'oublie pas de protéger notre valeur contre le SQL injection
*/
$sSQL = "SELECT COUNT(*) FROM members WHERE username = '".mysql_real_escape_string($username)."'";
$rQuery = mysql_query($sSQL);
$aResult = mysql_fetch_row($rQuery);
// Cette requête renvoie le nombre de ligne trouvé avec le même username
if(0 !== (int) $aResult[0]) {
$bError = true;
}
// Tu répétes la même portion de script pour l'email
// [...]
/**
* Si aucune erreur n'a été détecté on continue le déroulement
* du script et nous allons donc enregistrer le nouvel utilisateur
*/
if($bError === false) {
/**
* L'identifiant (id) étant généré automatiquement celui-ci
* n'a pas lieu d'être dans la requête suivante
*
* 0 étant un entier le protéger par des simples quote est inutile
* sauf si tu as spécifier ce champ en tant que texte dans ce
* cas les simples quote sont obligatoires
*/
$sSQL = "INSERT INTO members(id, username, password, authlevel, email) VALUES(".
"'".mysql_real_escape_string($username)."', ".
"'".mysql_real_escape_string($password)."', ".
"0, ".
"'".mysql_real_escape_string($email)."')";
mysql_query($sSQL);
/**
* Maintenant on vérifie si l'insertion s'est bien déroulé
* en demandant à MySQL de nous retourner l'identifiant généré
*/
$iMemberID = mysql_insert_id();
if(0 < (int) $iMemberID) {
print ("Votre inscription a réussie.<br/>");
} else {
print ("Un problème est survenu lors de votre inscription, essayez plus tard.<br />");
}
}
}
// Fermeture de la connexion au serveur
mysql_close($link);
Et voilà je pense t'avoir donné toutes les étapes essentiel au bon déroulement de ton script si quelque chose te tracasse n'hésite pas à poser des questions.
Par conter pour le mot de passe, pour des raisons de sécurité je te conseil vivement de crypter celui-ci en utilisant la fonction sha1().