Erreur d'inscription/connexion Trinity Cataweb
Ton site est très bien, hormis ce soucis. :')
Et hélas, ceci ne règle pas la connexion, hélas.

Mais je te +1 juste pour avoir pris la peine de m'aider, et bien sur d'avoir codé le site.
(02-09-2011 13:28)deathart a écrit :  
Code PHP :
<?php
//////////////////////////////////////////////////
//               *MaNGOS-Cata-Web*                //
//                                                //
//    Site développé par Allan pour Easy-MaNGOS    //
//////////////////////////////////////////////////
require_once('includes/classes/class.mcw.php');
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-fr">
<head>
<title><?php echo $array_site['nom']; ?> > Connexion</title>
<?php include_once('includes/html/head.html'); ?>
</head>
<body class="fr-fr homepage">
    <div id="wrapper">
        <?php include_once('includes/html/header/accueil.html'); ?>
        <div id="content">
            <div class="content-top">
                <div class="content-bot">    
                    <div id="homepage">
                        <div id="left">
                            <?php include_once('includes/html/slideshow.html'); ?>
                                <?php include_once('includes/html/featured-news.html'); ?>
                                    <div id="news-updates">
                                        <div class="news-article first-child">
                                            <h3>
                                                <a>Connexion</a>
                                            </h3>
                                        </div>
                                        <?php
                                        
if($_SESSION['login'] && $_SESSION['login'] == TRUE)
                                        {
                                            echo 
'
                                            <script language="javascript"> 
                                                alert("Erreur : Vous êtes déjà connecté !");
                                                document.location.href="index.php" 
                                            </script>'
;
                                        }else
                                        {
                                            if(isset(
$_POST['connexion']))
                                            {
                                                if(!empty(
$_POST['login']) AND !empty($_POST['password']))
                                                {
                                                    
$login mysql_real_escape_string(htmlentities($_POST['login']));
                                                    
$password mysql_real_escape_string(htmlentities($_POST['password']));
                                                            
                                                    
$account_username doquery("SELECT * FROM `account` WHERE `username` = '".$login."'"0"db_realmd"FALSE);
                                                    
$row_account_username mysql_fetch_array($account_username);
                                                    
                                                    
$account_banned_id doquery("SELECT * FROM `account_banned` WHERE `id` = '".$row_account_username['id']."' AND `active` = '1'"0"db_realmd"FALSE);
                                                    
$row_account_banned_id mysql_fetch_array($account_banned_id);
                                                    
                                                    
$ip_banned doquery("SELECT * FROM `ip_banned` WHERE `ip` = '".$ip."' LIMIT 1"0"db_realmd"FALSE);
                                                    
$row_ip_banned mysql_fetch_array($ip_banned);
                                                    
                                                    if(
mysql_num_rows($ip_banned) == 0)
                                                    {
                                                        if(
mysql_num_rows($account_banned_id) == 0)
                                                        {                                                    
                                                            if(
mysql_num_rows($account_username) > 0)
                                                            {
                                                                
$account_password doquery("SELECT * FROM `account` WHERE `sha_pass_hash` = SHA1(CONCAT(UPPER('".$login."'),':',UPPER('".$password."')))"0"db_realmd"FALSE);
                                                                                
                                                                if(
mysql_num_rows($account_password) > 0)
                                                                {
                                                                    
$_SESSION['login'] = TRUE;
                                                                    
$_SESSION['id'] = $row_account_username['id'];
                                                                    
$_SESSION['username'] = $login;
                                                                            
                                                                    echo 
'
                                                                    <script language="javascript"> 
                                                                        alert("Connexion réussie ... Bienvenue '
.$_SESSION['username'].' !");
                                                                        document.location.href="index.php" 
                                                                    </script>'
;
                                                                }else
                                                                {
                                                                    echo 
'
                                                                    <script language="javascript"> 
                                                                        alert("Erreur : Le pseudo ou le mot de passe choisis est invalide ...");
                                                                        document.location.href="connexion.php" 
                                                                    </script>'
;
                                                                }
                                                            }else
                                                            {
                                                                echo 
'
                                                                <script language="javascript"> 
                                                                    alert("Erreur : Le pseudo ou le mot de passe choisis est invalide ...");
                                                                    document.location.href="connexion.php" 
                                                                </script>'
;
                                                            }
                                                        }else
                                                        {
                                                            echo 
'
                                                            <script language="javascript"> 
                                                                alert("Ce compte a été BAN pour la raison suivante : '
.$row_account_banned_id['banreason'].'.\n\Dans ces conséquences il vous sera impossible de vous connectez avec ce compte !");
                                                                document.location.href="connexion.php" 
                                                            </script>'
;
                                                        }
                                                    }else
                                                    {
                                                        echo 
'
                                                        <script language="javascript"> 
                                                            alert("Cette adresse IP a été pour la raison suivante : '
.$row_ip_banned['banreason'].'.\n\Dans ces conséquences il vous sera impossible de vous connectez avec cette adresse IP !");
                                                            document.location.href="index.php" 
                                                        </script>'
;
                                                    }
                                                }else
                                                {
                                                    echo 
'
                                                    <script language="javascript"> 
                                                        alert("Erreur : Tous les champs ne sont pas remplis !");
                                                        document.location.href="connexion.php" 
                                                    </script>'
;
                                                }
                                            }else
                                            {
                                                echo 
'                                        
                                                <div class="news-article">
                                                    <form action="" method="post">
                                                        Nom de compte :<br /><input type="text" name="login" />
                                                        <br /><br />
                                                        Mot de passe :<br /><input type="password" name="password" />
                                                        <br /><br />
                                                        <input type="submit" value="Connexion" name="connexion" />
                                                    </form>
                                                </div>'
;
                                            }
                                        }
                                        
?>
                                    </div>
                        </div>
                        <?php include_once('includes/html/right.html'); ?>
                    </div>
                </div>
            </div>
        </div>
        <?php include_once('includes/html/footer.html'); ?>
        <?php include_once('includes/html/service.html'); ?>
    </div>
</body>
</html> 

Code PHP :
<?php
define
('USER_LENGHT'3);     // Taille minimum du nom de compte
define('PASSWORD_LENGHT'3); // Taille minimum du mot de passe

class Inscription
{
    private 
$inscriptionId;
    private 
$username;
    private 
$password;
    private 
$passwordRepeat;
    private 
$cryptedPassword;
    private 
$email;
    private 
$inscriptionDate;
    private 
$extension;
    private 
$errorMsg;
    private 
$error;
    private 
$injection;    
    
    private function 
construct()
    {
        
$this->inscriptionDate date('Y-m-d H:i:s');
        
$this->error false;
        
$this->errorMsg '';
        
$this->injection false;
        
$this->cryptedPassword '';
    }
    private function 
verifyUsername()
    {
        if(
strlen($this->username) <= USER_LENGHT)
        {
            
$this->error true;
            
$this->errorMsg .= '<script language="javascript"> 
                                    alert("Erreur : Le nom d\'utilisateur choisit est trop court !");
                                    document.location.href="inscription.php" 
                                </script>'
;
        }
        
$sqlUsername doquery('SELECT COUNT(*) AS nombre FROM `account` WHERE username=\'' $this->username.'\''0"db_realmd"FALSE) or die('Erreur : '.mysql_error());
        
$datasUsername mysql_fetch_assoc($sqlUsername);

        if(
$datasUsername['nombre'] == 1)
        {
            
$this->error true;
            
$this->errorMsg .= '<script language="javascript"> 
                                    alert("Erreur : Le nom d\'utilisateur choisit est déjà utilisé !");
                                    document.location.href="inscription.php" 
                                </script>'
;
        }
        
$this->sqlDetect($this->username);
    }
    private function 
verifyPassword()
    {
        if(
strlen($this->password) <= PASSWORD_LENGHT)
        {
            
$this->error true;
            
$this->errorMsg .= '<script language="javascript"> 
                                    alert("Erreur : Le mot de passe choisi est trop court !");
                                    document.location.href="inscription.php" 
                                </script>'
;
        }
        if(
$this->password !== $this->passwordRepeat)
        {
            
$this->error true;
            
$this->errorMsg .= '<script language="javascript"> 
                                    alert("Erreur : Les deux mots de passe ne sont pas identique !");
                                    document.location.href="inscription.php" 
                                </script>'
;            
        }
        
$this->sqlDetect($this->password);
    }
    private function 
verifyEmail()
    {
        if(!
preg_match('#^[a-z0-9.-_]+@[a-z0-9.-_]{2,}\.[a-z]{2,4}$#'$this->email))
        {
            
$this->error true;
            
$this->errorMsg .= '<script language="javascript"> 
                                    alert("Erreur : L\'adresse email n\'est pas correcte !");
                                    document.location.href="inscription.php" 
                                </script>'
;
        }
        
$sqlEmail doquery('SELECT COUNT(*) AS nombre FROM `account` WHERE email=\''.$this->email.'\''0"db_realmd"FALSE) or die('Comparaison des emails : '.mysql_error());;
        
$datasEmail mysql_fetch_assoc($sqlEmail);

        if(
$datasEmail['nombre'] != 0)
        {
            
$this->error true;
            
$this->errorMsg .= '<script language="javascript"> 
                                    alert("Erreur : Cette adresse email est déjà utilisé !");
                                    document.location.href="inscription.php" 
                                </script>'
;
        }
        
$this->sqlDetect($this->email);
    }

    public function 
verifyAll()
    {
        
$this->verifyUsername();
        
$this->verifyEmail();
        
$this->verifyPassword();
        
        if(!
$this->error)
        {
            
$this->cryptedPassword sha1(strtoupper($this->username).':'.strtoupper($this->password));
            
doquery('INSERT INTO account(username,
                                            sha_pass_hash,
                                            gmlevel,
                                            email,
                                            joindate,
                                            last_ip,
                                            expansion)
                                    VALUES(\''
.$this->username.'\',
                                            \''
.$this->cryptedPassword.'\',
                                            0,
                                            \''
.$this->email.'\',
                                            \''
.$this->inscriptionDate.'\',
                                            \''
.$_SERVER['REMOTE_ADDR'].'\',
                                            \''
.$this->extension.'\')'0"db_realmd"FALSE) or die('Erreur : '.mysql_error());
            echo 
'
            <script language="javascript"> 
                alert("Inscription terminée avec succès !");
                document.location.href="index.php" 
            </script>'
;
        }else
        {
            if(
$this->injection)
            {
                echo 
'
                <script language="javascript"> 
                    alert("C\'est pas bien ça !");
                    document.location.href="index.php" 
                </script>'
;
            }
            else
            {
                echo 
'
                <script language="javascript"> 
                    alert("Plusieurs erreurs ont été trouvée durant l\'inscription : '
.$this->errorMsg.'");
                    document.location.href="inscription.php" 
                </script>'
;
            }
        }
    }
    private function 
sqlDetect($string)
    {
        if (
preg_match('#INSERT|SELECT|UNION|FROM|WHERE|DELETE#'$string))
        {
            
$this->error true;
            
$this->errorMsg .= '<script language="javascript"> 
                                    alert("Injection sql détectée !");
                                    document.location.href="inscription.php" 
                                </script>'
;
            
$this->injection true;
        }
    }
    public function 
setUsername($username)
    {
        
$this->username mysql_real_escape_string($username);
    }
    
    public function 
setPassword($password)
    {
        
$this->password mysql_real_escape_string($password);
    }
    
    public function 
setPasswordRepeat($password)
    {
        
$this->passwordRepeat mysql_real_escape_string($password);
    }
    
    public function 
setEmail($email)
    {
        
$this->email mysql_real_escape_string($email);
    }
    
    public function 
setExtension($extension)
    {
        
$this->extension $extension;
    }
}
?>
Quand je vois ça, je comprend pourquoi ça fonctionne pas très bien.
Quelqu'un se rend compte qu'on vérifie séparément chaque champ pour un total de 4 requêtes longue et méchantes pour MySQL/PostgreSQL alors qu'on peut en faire une simple qui fonctionne tout aussi bien et qui doit prendre 100x moins de temps?

Sérieusement: réécrivez tout. Le code est illisible, vous ne trouverez pas l'erreur là dedans.
(10-09-2011 10:01)Arktus a écrit :  Sérieusement: réécrivez tout.

Plus facile à dire qu'à faire. Smile
Je viens de tester et cela fonctionne parfaitement bien, si vous savez pas configurer un site les gars ...
l'erreur est du au changement de la fonction du gmlevel pour les fonctions manquante , une erreur dans le changement de votre code.

c'est juste que vous ne savez pas changer le code mangos en trinity Daelian.
Perso j'ai testé avec les tables mangos est la connections est ok, maintenant s'il veut le faire fonctionner sous trinity il y a des modifications à faire c'est sur (au moins au minimum le nom des champs qui changent de nom) ...
Techniquement, y'a juste à rajouter une colone 'gmlevel' dans la table account, et appliqué le patch 'realmd' pour changer de MaNGOS à Trinity, je n'ai pas vu d'autres modifications, y'en a t-ils ?
(10-09-2011 15:09)Daelian a écrit :  Techniquement, y'a juste à rajouter une colone 'gmlevel' dans la table account, et appliqué le patch 'realmd' pour changer de MaNGOS à Trinity, je n'ai pas vu d'autres modifications, y'en a t-ils ?

Le nom des tables change obligatoirement en passant sous trinity
Pas celles utilisées par le site. Smile
Sauf erreur de ma part, il n'utilise que les tables de votes à appliquée sur le realmd (il faut juste adapter un truc ou deux sur le code SQL) ainsi que la table d'account, et gmlevel (pour l'administration du site, et encore il suffit d'ajouter une colonne gmlevel dans la table account).
OMG, faut pas modifier ta db, mais les requêtes sql du site !!!
...

Retourner en haut Accueil