06-01-2008, 04:31 PM
(Modification du message : 06-01-2008, 04:50 PM par Sephi-Chan.)
Non, ils n'ont pas la même utilité (bien que très proche). Ce que je veux dire, c'est que tu en mets partout alors que ça ne sert à rien. J'éditerai ce post au fur et à mesure en reprenant point par point ton script.
Déjà, dès le début, une ligne de trop. Ensuite, voici un moyen simple d'écourter énormément ton script. Quand ton joueur se connecte, tu vérifies s'il existe bien une entre dans la base de donnée ayant le nom et le mot de passe qu'il a donné dans le formulaire. Si oui, tu lui attribue une variable de session contenant son identifiant et une pour son pseudo.Code PHP :
<?php
$_SESSION['pseudo'] = htmlentities($_SESSION['pseudo']);
if (isset($_SESSION['connect']))//On vérifie que le variable existe
{
$connect=$_SESSION['connect'];//On récupère la valeur de la variable de session
}
else
{
$connect=0;//Si $_SESSION['connect'] n'existe pas, on donne la valeur "0"
}
if ($connect == "1") // Si le visiteur s'est identifié
{ ?><div id="corps"><?php
echo 'Vous êtes déjà inscris '.$_SESSION['pseudo'].''; exit;
}
?>
Voici un exemple de fonction de connexion :
Code PHP :
<?php
function connect($name, $password){
// On vérifie qu'il existe une entrée qui a le nom et le mot de passe indiqué.
$query = sprintf("SELECT id, name FROM player WHERE `name` = '%s' AND `password` = '%s';",
mysql_real_escape_string($name), // On sécurise la chaîne de caractère avec la fonction faîte pour ça.
sha1($password) // Comme le mot de passe est crypté en SHA1 dans la base, on compare le SHA1 du mot de passe donné, pas le mot de passe directement.
);
if($sql = mysql_query($query)){ // On effectue la requête dans un if, pour pouvoir effectuer des actions dans le else en cas d'échec.
if(mysql_num_rows($sql) > 0){ // On demande le nombre de résultats pour la requête.
$result = mysql_fetch_assoc($sql); // Puisqu'on a un seul résultat, on ne l'extrait directement, sans utiliser de boucle while.
$_SESSION['playerId'] = $result['id']; // On crée une variable de session contenant l'identifiant du joueur (c'est plus performant que d'utiliser son nom).
$_SESSION['playerName'] = $result['name']; // On crée une autre variable de session pour son nom, pour l'afficher à l'écran.
return true;
}
else { // Si la requête n'a rien retourné.
echo "<p>Aucun compte ne correspond à ces identifiants.</p>";
return false;
}
}
else { // Si la requête a généré une erreur.
echo "<p>La connexion a échouée.</p>";
return false;
}
}