PHP Changement de mot de passe // MaNGOS
Ce script a été créer suite à ma demande d'aide sur zone emu.
Source : Quarante-deux
Code PHP :
<?php
if (isset($_GET['s']))
{
    
$s intval($_GET['s']);
}
else 
$s 0;
switch (
$s)
{
    case 
'1':
        
mysql_connect('localhost''user''mdp') or die(mysql_error());
        
$login mysql_real_escape_string($_POST['login']);
        
$account_password0 mysql_real_escape_string($_POST['password0']);
        
$account_password1 mysql_real_escape_string($_POST['password1']);
        
$account_password2 mysql_real_escape_string($_POST['password2']);
        
mysql_select_db('realmd');
        
$query mysql_query("SELECT * FROM account WHERE username='".$login."'") or die(mysql_error());
        
$donnees mysql_fetch_array($query);
        
$account_password $donnees['sha_pass_hash']; 
        if ((!empty(
$account_password1)) AND (!empty($account_password2)) AND (!empty($login)))
        {
            if (
$account_password1 == $account_password2)
            {
                
$sql "SELECT * FROM account WHERE username='$login' AND sha_pass_hash=SHA1(CONCAT(UPPER('$login'),':',UPPER('$account_password0')))";
                
$result2 mysql_query($sql);
                
$num2 mysql_num_rows($result2);
                if (
$num2 0//Mot de passe OK
                
{
                    
mysql_select_db('realmd');
                    
mysql_query("UPDATE account SET sha_pass_hash=SHA1(CONCAT(UPPER('$login'),':',UPPER('$account_password1'))),v=0,s=0 WHERE username='$login'") or die(mysql_error());
                    echo 
'Votre mot de passe a &eacute;t&eacute; chang&eacute;.<br/>';
                }
                else
                {
                    echo 
'L\'ancien mot de passe est incorrect.<br/>';
                }
            }
            else echo 
'Les deux nouveaux mot de passe ne correspondent pas.<br/>';
        }
        else echo 
'Un champ est rest&eacute; vide';
    break;
    default:
        
?>
        <form method="post" action="index_pwchange.php?s=1">
        <table>
        <tr><td>Nom de compte : </td><td><input type="text" name="login"/></td></tr>
        <tr><td>Mot de passe : </td><td><input type="password" name="password0"/></td></tr>
        <tr><td>Nouveau mot de passe : </td><td><input type="password" name="password1"/></td></tr>
        <tr><td>V&eacute;rification : </td><td><input type="password" name="password2"/></td></tr>
        </td></tr>
        <tr><td><input type="submit" value="Valider"/></td><td><a href="/">Retour</a></td></tr>
        </table>
        </form>
        <?php
    
break;
}
?>

Le code SQL à appliquer sur la base de donnée des comptes (par défault realmd)
Citation :SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `password_temp`
-- ----------------------------
DROP TABLE IF EXISTS `password_temp`;
CREATE TABLE `password_temp` (
`sha_pass_hash` text,
`login` text
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Cela peut toujours servirHihi

Il se présente sous la forme :
Nom de compte
mot de passe
nouveau mot de passe
vérification nouveau mot de passe
Bonjour,

Premièrement, merci pour le partage ! Smile

Mais, à quoi sert cette table "temporaire" : password_temp, car tu ne l'utilises pas dans ton script ?
Et il y aurait également pas mal de chose à revoir dans le script niveau optimisation mais c'est un bon début Clin :

- Commencer à utiliser directement la POO (PDO par exemple) au lieu des mysql_* qui sont obsolètes. Il faudrait faire la vérification des champs avant de faire des requêtes SQL, tu sélectionnes plusieurs fois la base de données "realmd", etc...

Cordialement,
Sgt Fatality
Ce n'es pas son script je crois Smile
Ce script souffre d'un gros problème d'optimisation et contient des lacunes !
  1. Il y a un mysql_connect mais pas de mysql_close, tu risques d'avoir une belle erreur te disant qu'il y a trop de connexions ouvertes. On ne garde jamais un socket ouvert !
  2. Le switch est useless, un simple if suffis.
  3. Tu effectues 3 requêtes SQL alors que tu pourrais en effectuer une seule
  4. Où contrôles-tu le fait que l'utilisateur soit connecté ou non ?

Bref, la forme est là, ça fonctionne, mais ce script n'est pas du tout prêt à être mis en production.

SgT-Fatality a écrit :[...](PDO par exemple) au lieu des mysql_* qui sont obsolètes[...]
PDO aussi est obsolète, utilise plutôt un ORM comme propel si tu souhaites vraiment faire de la POO et avoir une vue abstraite de ta base de données.

Cordialement,
Benjy
Ce n'est pas de lui Hihi

Retourner en haut Accueil