06-01-2008, 05:41 PM
Code PHP :
<?php session_start();
include 'includes/mysql_connect.php'; // On se connecte à MySQL, ça évite de le faire après.
// On génère un mot de passe.
$chaine = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$password = substr(str_shuffle($chaine), 0, mt_rand(10, 15));
// On vérifie si la faction est bien autorisée.
if($faction != 'Robots' && $faction != 'Humains'){
// Quand on affiche ce que l'utilisateur a rentré, on utilise htmlentities, pour empêcher qu'il execute du code Javascript, par exemple.
echo '<p>Erreur : '.htmlentities($faction)." n'est pas une faction valide.</p>";
exit(); // On termine le script si l'utilisateur à tenté de tricher.
}
// On vérifie si le nom ou l'email n'est pas pris.
$query = sprintf(
"SELECT id FROM users WHERE name = '%s' OR email = '%s'",
mysql_real_escape_string($_POST['name']),
mysql_real_escape_string($_POST['email'])
); // On fait une requête qui cherche les gens qui ont le nom ou l'email indiqué.
if($sql = mysql_query($query)){ // On execute la requête.
if(mysql_num_rows($sql) > 0){ // S'il y a un résultat, c'est que le nom est déjà pris.
echo '<p>Erreur : Un compte portant ce nom ou cette adresse email existe déjà.</p>';
exit();
}
}
else {
echo '<p>Erreur : La requête SQL a échouée.</p>';
exit();
}
// On envoie l'email.
$objet = 'Inscription réussie';
/* On écrit le message. En utilisant les guillemets doubles,
on assure que les sauts de lignes apparaîtront dans l'email */
$message = "Rappel de vos identifiants :
Pseudo : ".$_POST['nom']."
Mot de passe : ".$password;
$from = 'From: admin@zxi.fr';
// Si l'envoi de l'email échoue, on envoie une erreur.
if(!mail($_POST['email'], $objet, $message, $from)){
echo "<p>Erreur : L'envoi de l'email a échoué.</p>";
exit();
}
// On procède à l'insertion dans la base de donnée.
$query = sprintf(
"INSERT INTO users (faction, pseudo, password,email)
VALUES('%s', '%s', '%s', '%s');",
$faction,
mysql_real_escape_string($_POST['nom']),
sha1($_POST['nom']), // Mieux vaut utiliser sha1 que md5 pour hasher, c'est ce que la documentation recommande.
mysql_real_escape_string($_POST['email'])
);
if(mysql_query($query)){ // Si la création de l'entrée dans la table users a fonctionné, on continue.
$query = sprinf(
"INSERT INTO ressources (id, ressources) VALUES(%d, %d);"
mysql_insert_id(), // On renseigne un identifiant du joueur, et pas son nom. Dans notre cas on utilise l'id qu'a généré l'auto_increment de l'insertion qu'on vient de faire.
500
);
if(!mysql_query($query)){
echo "<p>Erreur : L'attribution des ressources de départ a échoué.</p>";
exit();
}
}
else {
echo "<p>Erreur : La création du compte a échoué.</p>";
exit();
}
mysql_close();
include 'template/haut.php';
// On écrit le bilan de l'opération.
echo "<p>La création du compte <q>".htmlentities($_POST['nom'])."</q> et l'attribution des ressources de départ a réussi.
<br />Un email a été envoyé à l'adresse indiquée.
<br /><a href=\"index.html\" title=\"Retourner sur la page d'accueil\">Retourner sur la page d'accueil</a></p>";
?>