промяна на парола в форума

systems

Registered
Добър ден опитвам да си направя система за промяна на парола за simple mashines forum(smf) зная че паролата мога да си я сменям и от профила ми, но идеята ми е да си направя отделен скрипт за тази цел направих един скрипт в доста стар вариянт но като опитам да променя паролата все ми казва грешна стара парола немога да разбера къде греша затова моля за помощ ето до къде съм стигнал:

PHP:
<?php
include("connection.php");
echo '<form name="changepassword" method="POST">
 <span>Потребителско име в форума:</span><br />
 <input type="text" class="txt" name="user" /><br />
 <span>Емайл:</span><br />
 <input type="text" class="txt" name="email" /><br />
 <span>Стара парола в форума:</span><br />
 <input type="password" class="txt" name="oldpass" /><br />
 <span>Нова парола в форума:</span><br />
 <input type="password" class="txt" name="password" /><br />
 <span>Повтори парола в форума:</span><br />
 <input type="password" class="txt" name="cpassword" /><br />
 <input type="submit" name="changepassword" value="Промени парола" />
 </form>';
 if($_POST['changepassword'])
 {
$oldpass = $_POST['oldpass'];
$oldpass=sha1(strtolower($user).$oldpass);
$password_salt=substr(md5(rand()), 0, 4);
$password = $_POST['password'];
$cpassword = $_POST['cpassword'];
if($password != $cpassword) {
echo "<div class='error'>Паролите не съвпадат</div>";
}else{
$password=sha1(strtolower($user).$password);
$password_salt=substr(md5(rand()), 0, 4);
$email = addslashes(htmlspecialchars($_POST['email']));
$user = addslashes(htmlspecialchars($_POST['user']));
if($user == NULL ||$oldpass == NULL ||$password == NULL ||$cpassword
== NULL || $email == NULL){
echo "<div class='error'>Съжалявам, но не сте попълнили всички полета</div>";
}else{
$res = mysql_query("SELECT * FROM `smf_members` WHERE member_name='$user'");
$row = mysql_fetch_assoc($res);
if($oldpass != $row['passwd']){
 echo "<div class='error'>Грешна сегашна парола</div>";
}else{
$nq = "UPDATE `smf_members` SET passwd='$password' WHERE
email_address='$email' AND passwd='$oldpass' AND password_salt='$oldpass'";
$nr = mysql_query($nq);
echo "<div class='success'>$_POST[user].Вие успешно си променихте вашата стара парола
от $_POST[oldpass]. на вашата нова парола е: $_POST[password].</div>";
}
}
}
}
?>

Ето по този начин криптира паролата в две отделни полета в базата с данни едното поле е: passwd а другото е password_salt

PHP:
$password=sha1(strtolower($user).$password);
$password_salt=substr(md5(rand()), 0, 4);

Направих си още една система за регистрация и тя работи идеално
но с тази за промяна на паролата се затрудянавам.
 
Нормално - всеки път прегенерираш "солт-а" - няма как да ти излязат сметките. А и не съм сигурен дали SMF използва този алгоритъм за криптиране...
 
Немога да разбера как така всеки път прегенериам салта немога да схвана в кода къде е проблема та всеки път ми казва че паролата е грешна.
и да в този формат криптира паролата форума аз съм с версия 2,09
и използвам следната система за регистрация след регистрация веднага влизам в форума без проблеми ето ако на някои му трябва регистер система за смф:

но лошото е че немога да направя системата за промяна на парола да тръгне ако някои има идея как да я оправя моля да пише.



системата за регистрация работи без грешка:
PHP:
<?php
mysql_connect ("localhost", "dbusername","dbpass") or die (mysql_error());
mysql_select_db ("db");
//Проверка за натиснат бутон сюбмит. 
if(isSet($_POST['submit']))
{ 
        $eror = 0;
        $str = addslashes(htmlspecialchars($_POST['regs']));
        $fpassword =$_POST['fpassword'];
        $cpassword =$_POST['cpassword'];
        $email = addslashes(htmlspecialchars($_POST['email']));
        $user = addslashes(htmlspecialchars($_POST['user']));
        function verifyUsername($user) 
                {        
                        $chek = mysql_query("SELECT * FROM `smf_members` WHERE `member_name` = '{$user}';")or die(mysql_error());        
                        return mysql_num_rows($chek)? 1 : 0; 
                }
        if(empty($str))
        {
                echo "<div class='error'>Съжалявам но не сте попълнили въпроса</div>";
                $eror++;
        }
        if(empty($fpassword))
        {
                echo "<div class='error'>Въведете парола</div>";
                $eror++;
        }
        if(empty($cpassword))
        {
                echo "<div class='error'>Въведете паролата повторно</div>";
                $eror++;
        }
        if(empty($email))
        {
                echo "<div class='error'>Въведете eмайл</div>";
                $eror++;
        }
        if(empty($user))
        {
                echo "<div class='error'>Въведете потребител</div>";
                $eror++;
        }
        if($fpassword != $cpassword) 
        {
                echo "<div class='error'>Паролите не съвпадат</div>";
                $eror++;
        }
        if($str != "София") 
        {
                        echo "<div class='error'>Това не е столицата на България</div>";
            $eror++;
                }
                //Викане на функцията за проверка на съществуващ потребител.
                if(VerifyUsername($user) == 1) 
                {
                        echo "<div class='error'>Вече има регистриран потребител с това име в нашата база с данни</div>!";
            $eror++;
                }
        if($eror == 0)
        {
$ip = $_SERVER['REMOTE_ADDR'];
$time = time();
$id_member = "SELECT id_member, MAX(id_member) FROM smf_members";
$id_member = mysql_query($id_member) or die(mysql_error());
while($row = mysql_fetch_array($id_member))
{ 
$id_member = "". $row['type']. "" .$row['MAX(id_member)'] +1;
$fpassword=sha1(strtolower($user).$fpassword);
$password_salt=substr(md5(rand()), 0, 4);
$q = mysql_query("INSERT INTO smf_members (id_member, member_name, date_registered, id_group, real_name, passwd, email_address, member_ip, password_salt) VALUES
('$id_member' ,'$user', '$time', '0', '$user', '$fpassword', '$email', '$ip', '$password_salt')") or die (mysql_error());
}
                echo "<div class='success'>$_POST[user]. .Вие успешно регистрирахте вашия акаунт в форума-паролата на вашия акаунт е: $_POST[fpassword].</div>";
                
        }
}
?>
 <form name="registerform" method="POST">
 <span>Потребителско име:</span><br />
 <input type="text" class="txt" name="user" /><br />
 <span>Парола:</span><br />
 <input type="password" class="txt" name="fpassword" /><br />
 <span>Повтори парола:</span><br />
 <input type="password" class="txt" name="cpassword" /><br />
 <span>E-Mail:</span><br />
 <input type="text" class="txt" name="email" /><br /> 
 <span>Коя  е столицата на българия:</span><br />
 <input type="text" name="regs"><br> 
 <input type="submit" name="submit" value="Регистрация в форума" />
 </form>
 

Back
Горе