За последние 24 часа нас посетили 34372 программиста и 1709 роботов. Сейчас ищут 803 программиста ...

Не получается сравнить пароли

Тема в разделе "PHP для новичков", создана пользователем LeXXXX35, 30 сен 2010.

  1. LeXXXX35

    LeXXXX35 Активный пользователь

    С нами с:
    30 сен 2010
    Сообщения:
    41
    Симпатии:
    0
    Здравствуйте! Вот столкнулся с такой проблемой. На сайте есть страница, ну типа мой профиль, где зарегестрированный пользователь может изменить свои данные. Так вот при смене пароля, сравнение введенного нового пароля и подтверждения пароля работает, а внизу формы строка, т.е. для сохранения данных нужно ввести текущий пароль, никак не получается. Выходит что действие if неверно и все. И еще вопрос, если закомментировать эту строку, то обновление данных юзера в базе не производится. Помогите пожалуйста. Я еще новичок, строго не судите, вот код скрипта profile.php
    PHP:
    1.  
    2. <?php
    3. if ($_SESSION['autorizied']==true)
    4. {
    5.     if (!isset($_POST['change'])) //если не нажата кнопка то выводим форму
    6.     {
    7.     $user_login=$_SESSION['login'];
    8.     $zap_userdata=mysql_query("SELECT * FROM users WHERE login='".$user_login."'");
    9.     $user_dannye=mysql_fetch_array($zap_userdata);
    10.     $user_email=$user_dannye['email'];
    11.     $user_status=$user_dannye['status'];
    12.     $user_password=$user_dannye['password'];//текущий пароль
    13.     $user_name=$_SESSION['name'];
    14.     $user_gruppa=$_SESSION['gruppa'];
    15.     ?>
    16.     <title>Профиль пользователя</title>
    17.     <center><h2>Редактирование профиля</h2></center><br>
    18.     <form method='post' action=''>
    19.     Логин:<input type='text' name='newlogin' value='<?php echo $user_login; ?>'><br>
    20.     Пароль:<input type='password' name='newpass' value= ''><br>
    21.     Повтор пароля:<input type='password' name='renewpass' value= ''><br>
    22.     E-mail:<input type='text' name='newemail' value='<?php echo $user_email; ?>'><br>
    23.     Имя:<input type='text' name= 'newname' value='<?php echo $user_name; ?>'><br><br>
    24.     Введите текущий пароль:<input type='password' name='pass' value=''><br>
    25.     <input name='change' type='submit' value='Сохранить изменения'><br>
    26.     </form>
    27.     <?php
    28.     }
    29.     else
    30.     {
    31.     $new_login=mysql_escape_string($_POST['newlogin']);
    32.     $new_mail_pass=mysql_escape_string($_POST['newpass']);
    33.     $new_pass=md5($new_mail_pass);
    34.     $new_repass=md5(mysql_escape_string($_POST['renewpass']));
    35.     $new_email=mysql_escape_string($_POST['newemail']);
    36.     $new_name=mysql_escape_string($_POST['newname']);
    37.     $old_password=md5(mysql_escape_string($_POST['pass']));
    38.     if ($new_login==''){unset($new_login);}
    39.     if ($new_email==''){unset($new_email);}
    40.     if ($new_name=='') {unset($new_name);}
    41.     if ($new_pass=='') {unset($new_pass);}
    42.     if ($new_repass=='') {unset($new_repass);}
    43.         if ($new_pass == $new_repass)
    44.         {
    45.         if ($old_password !== $user_password)
    46.             {
    47.             //если все правильно, то обновляем данные юзера
    48.             include_once ("conf/connect.php");
    49.             $upd_data_login=mysql_query("UPDATE users SET login = '".$new_login."' WHERE login ='".$user_login."'");
    50.             $upd_data_email=mysql_query("UPDATE users SET email = '".$new_email."' WHERE login ='".$user_login."'");
    51.             $upd_data_name=mysql_query("UPDATE users SET name = '".$new_name."' WHERE login ='".$user_login."'");
    52.             $upd_data_pass=mysql_query("UPDATE users SET password = '".$new_pass."' WHERE login ='".$user_login."'");
    53.             //формируем письмо
    54.             include_once ("includes/functions.inc.php");
    55.             $headers  = 'MIME-Version: 1.0' . "\r\n";
    56.                             $headers .= 'Content-type: text/html; charset=windows-1251' . "\r\n";
    57.                             // Откуда пришло
    58.                             $headers .= 'From:Сайт %sitename%' . "\r\n";
    59.                             //Здесь укажите электронный адрес, куда будут уходить сообщения
    60.                             $mailto = $new_email OR $user_email;
    61.                             $subject = "Изменение ваших данных";
    62.                             $message = 'Здравствуйте  '.$new_name OR $user_name."<br>";
    63.                             $message .= 'Ваши данные были успешно изменены на новые:br>';
    64.                             $message .= 'Ваш логин: '.$new_login OR $user_login."<br>";
    65.                             $message .= 'Ваш пароль: '.$new_mail_pass OR $user_password."<br>";
    66.             sendmail($mailto,$subject,$message,$headers);              
    67.             echo '<center><h3>Ваши данные успешно изменены. На указанный Вами e-mail была отправлена информация о новых данных.</h3><br>
    68.             <a href=/index.php>На главную!</a></center>';
    69.                
    70.             }
    71.             else
    72.             {
    73.             echo 'Вы не ввели текущий пароль, либо ввели его неправильно!<br>Попробуйте <a href=/index.php?page=profile>заново</a><br>';
    74.             }
    75.         }
    76.         else
    77.         {
    78.         echo 'Введенные пароли не совпадают!<br>Попробуйте <a href=/index.php?page=profile>заново</a>';
    79.         }
    80.  
    81.     }
    82. }
    83. else
    84. {
    85. echo '<title>Ошибка!</title>';
    86. echo '<center><h3>Вы не авторизованы! Пожалуйста войдите в систему под своим логином и паролем, или <a href=/index.php?page=register>зарегистрируйтесь!</h3></center></a>';
    87. }
    88.  
    89. ?>
    90.  
     
  2. LeXXXX35

    LeXXXX35 Активный пользователь

    С нами с:
    30 сен 2010
    Сообщения:
    41
    Симпатии:
    0
    И еще добавлю, в строке 44 не должно быть знака ! это я тестировал на предмет обновления данных в базе.
    Строка 42 отрабатывает нормально, но что не так в 44? Пароль текущий ввожу правильный, но условие не отрабатывает, выкидывает на ELSE. В чем ошибка?
     
  3. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    $upd_data_login=mysql_query("UPDATE users SET login = '".$new_login."' WHERE login ='".$user_login."'");
    $upd_data_email=mysql_query("UPDATE users SET email = '".$new_email."' WHERE login ='".$user_login."'");
    $upd_data_name=mysql_query("UPDATE users SET name = '".$new_name."' WHERE login ='".$user_login."'");
    $upd_data_pass=mysql_query("UPDATE users SET password = '".$new_pass."' WHERE login ='".$user_login."'");

    это все в один запрос пиши, через запятую UPDATE users SET login = '".$new_login."', name = '".$new_name."' WHERE login ='".$user_login."'



    if ($old_password == $user_password)
    {
    }
    else
    {
    ...
    }
     
  4. LeXXXX35

    LeXXXX35 Активный пользователь

    С нами с:
    30 сен 2010
    Сообщения:
    41
    Симпатии:
    0
    Апельсин
    Ну на счет этого я понял, перепишу.
    Код (Text):
    1.  
    2. $upd_data_login=mysql_query("UPDATE users SET login = '".$new_login."' WHERE login ='".$user_login."'");
    3. $upd_data_email=mysql_query("UPDATE users SET email = '".$new_email."' WHERE login ='".$user_login."'");
    4. $upd_data_name=mysql_query("UPDATE users SET name = '".$new_name."' WHERE login ='".$user_login."'");
    5. $upd_data_pass=mysql_query("UPDATE users SET password = '".$new_pass."' WHERE login ='".$user_login."'");
    А разве у меня не так идет код как ты написал?
     
  5. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    разницы нет?
     
  6. LeXXXX35

    LeXXXX35 Активный пользователь

    С нами с:
    30 сен 2010
    Сообщения:
    41
    Симпатии:
    0
    В упор не могу различить, вроде и есть все так:

    PHP:
    1.  
    2. if ($old_password == $user_password)
    3. {
    4. }
    5. else
    6. {
    7. ...
    8. }
    9.  
     
  7. LeXXXX35

    LeXXXX35 Активный пользователь

    С нами с:
    30 сен 2010
    Сообщения:
    41
    Симпатии:
    0
    Я же дописал там, знака ! не должно быть, все равно условие не выполняется, хотя должно.
     
  8. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    и учись вручную следить, до куда доходит выполнение кода. Ставь echo 222 кудато, чтоб определить, отрабатывается тот участок или нет. Если вывело 222, ставь ниже echo 222 и так пока не найдешь проблемный участок. Если не срабатывает какоето условие if|else - смотри что в него приходит, выводи на экран содержимое переменных. А то так долго гадать можно.
     
  9. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    if ($new_pass == $new_repass)
    {
    echo 111;
    if ($old_password !== $user_password)
    {

    echo 222;
    }
    else
    {
    echo 333;
    }
    }
    else
    {
    echo 444;
    }

    вот так и смотри что не работает
     
  10. LeXXXX35

    LeXXXX35 Активный пользователь

    С нами с:
    30 сен 2010
    Сообщения:
    41
    Симпатии:
    0
    Спасибо за совет. Ща попробую заново все разложить код на куски. Есть подозрение что может быть изначально при извлечении пароля из базы в строке 11 чего не так?
     
  11. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    сначала замени вот на этот код. если в участке 111 ничего нет - значит проблема в условии if ($new_pass == $new_repass). Тогда нужно смотреть что в этих двух переменных
     
  12. LeXXXX35

    LeXXXX35 Активный пользователь

    С нами с:
    30 сен 2010
    Сообщения:
    41
    Симпатии:
    0
    Вот такой есть код в изначальном виде.
    PHP:
    1.  
    2. if ($_SESSION['autorizied']==true)
    3. {
    4.     if (!isset($_POST['change'])) //если не нажата кнопка то выводим форму
    5.     {
    6.     $user_login=$_SESSION['login'];
    7.     $zap_userdata=mysql_query("SELECT * FROM users WHERE login='".$user_login."'");
    8.     $user_dannye=mysql_fetch_array($zap_userdata);
    9.     $user_email=$user_dannye['email'];
    10.     $user_status=$user_dannye['status'];
    11.     $user_password=$user_dannye['password'];//текущий пароль
    12.     $user_name=$_SESSION['name'];
    13.     $user_gruppa=$_SESSION['gruppa'];
    14.     ?>
    15.     <title>Профиль пользователя</title>
    16.     <center><h2>Редактирование профиля</h2></center><br>
    17.     <form method='post' action=''>
    18.     Логин:<input type='text' name='newlogin' value='<?php echo $user_login; ?>'><br>
    19.     Пароль:<input type='password' name='newpass' value= ''><br>
    20.     Повтор пароля:<input type='password' name='renewpass' value= ''><br>
    21.     E-mail:<input type='text' name='newemail' value='<?php echo $user_email; ?>'><br>
    22.     Имя:<input type='text' name= 'newname' value='<?php echo $user_name; ?>'><br><br>
    23.     Введите текущий пароль:<input type='password' name='pass' value=''><br>
    24.     <input name='change' type='submit' value='Сохранить изменения'><br>
    25.     </form>
    26.     <?php
    27.     }
    28.     else
    29.     {
    30.     $new_login=mysql_escape_string($_POST['newlogin']);
    31.     $new_mail_pass=mysql_escape_string($_POST['newpass']);
    32.     $new_pass=md5($new_mail_pass);
    33.     $new_repass=md5(mysql_escape_string($_POST['renewpass']));
    34.     $new_email=mysql_escape_string($_POST['newemail']);
    35.     $new_name=mysql_escape_string($_POST['newname']);
    36.     $old_password=md5(mysql_escape_string($_POST['pass']));
    37.     if ($new_login==''){unset($new_login);}
    38.     if ($new_email==''){unset($new_email);}
    39.     if ($new_name=='') {unset($new_name);}
    40.     if ($new_pass=='') {unset($new_pass);}
    41.     if ($new_repass=='') {unset($new_repass);}
    42.         if ($new_pass == $new_repass)
    43.         {
    44.         if ($old_password == $user_password)
    45.             {
    46.             //если все правильно, то обновляем данные юзера
    47.             include_once ("conf/connect.php");
    48.             $upd_data_login=mysql_query("UPDATE users SET login = '".$new_login."' WHERE login ='".$user_login."'");
    49.             $upd_data_email=mysql_query("UPDATE users SET email = '".$new_email."' WHERE login ='".$user_login."'");
    50.             $upd_data_name=mysql_query("UPDATE users SET name = '".$new_name."' WHERE login ='".$user_login."'");
    51.             $upd_data_pass=mysql_query("UPDATE users SET password = '".$new_pass."' WHERE login ='".$user_login."'");
    52.             //формируем письмо
    53.             include_once ("includes/functions.inc.php");
    54.             $headers  = 'MIME-Version: 1.0' . "\r\n";
    55.                             $headers .= 'Content-type: text/html; charset=windows-1251' . "\r\n";
    56.                             // Откуда пришло
    57.                             $headers .= 'From:Сайт %sitename%' . "\r\n";
    58.                             //Здесь укажите электронный адрес, куда будут уходить сообщения
    59.                             $mailto = $new_email OR $user_email;
    60.                             $subject = "Изменение ваших данных";
    61.                             $message = 'Здравствуйте  '.$new_name OR $user_name."<br>";
    62.                             $message .= 'Ваши данные были успешно изменены на новые:br>';
    63.                             $message .= 'Ваш логин: '.$new_login OR $user_login."<br>";
    64.                             $message .= 'Ваш пароль: '.$new_mail_pass OR $user_password."<br>";
    65.             sendmail($mailto,$subject,$message,$headers);              
    66.             echo '<center><h3>Ваши данные успешно изменены. На указанный Вами e-mail была отправлена информация о новых данных.</h3><br>
    67.             <a href=/index.php>На главную!</a></center>';
    68.        
    69.                
    70.             }
    71.             else
    72.             {
    73.             echo 'Вы не ввели текущий пароль, либо ввели его неправильно!<br>Попробуйте <a href=/index.php?page=profile>заново</a><br>';
    74.             }
    75.         }
    76.         else
    77.         {
    78.         echo 'Введенные пароли не совпадают!<br>Попробуйте <a href=/index.php?page=profile>заново</a>';
    79.         }
    80.  
    81.     }
    82. }
    83. else
    84. {
    85. echo '<title>Ошибка!</title>';
    86. echo '<center><h3>Вы не авторизованы! Пожалуйста войдите в систему под своим логином и паролем, или <a href=/index.php?page=register>зарегистрируйтесь!</h3></center></a>';
    87. }
    88.  
     
  13. LeXXXX35

    LeXXXX35 Активный пользователь

    С нами с:
    30 сен 2010
    Сообщения:
    41
    Симпатии:
    0
    Спасибо Апельсин, пойду дальше разбираться. Я как то об этом методе проверки не подумал. Хотя Условие if ($new_pass == $new_repass). работает, т.к. когда вводишь заведомо разные новые пароли, выкидывает на строку 77 как и должно быть.
     
  14. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Я обычно
    Код (Text):
    1.  die('here');
    пишу))

    LeXXXX35
    Осмелюсь посоветовать дебаггерскую функцию

    Код (Text):
    1. function dg($var = null)
    2. {
    3.     if(!isset($var)) die('$var not isset');
    4.     echo "<pre>";
    5.     print_r($var);
    6.     die();
    7. }
    Очень удобно отслеживать значение переменных. У меня размещена так, чтобы в любом месте приложения была доступна. Еще можно print_r на var_dump заменить, но обычно print_r достаточно.
     
  15. LeXXXX35

    LeXXXX35 Активный пользователь

    С нами с:
    30 сен 2010
    Сообщения:
    41
    Симпатии:
    0
    Всем спасибо, разобрался, на самом деле переменная $user_password была пуста, т.к. ее значение было до условия IF|ELSE. Пришлось вынести кусок кода в отдельный файл и инклудить в нужном месте. Теперь все работает.
     
  16. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    tommyangelo
    А ещё можно нормальную IDE поставить с дебагом, профилером и уотчами.
     
  17. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Apple

    Мы не ищем легких путей)
     
  18. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Всё это хорошо, конечно, но всё хорошее когда-нибудь заканчивается.
    Обычно в тот момент, когда количество классов, интерфейсов и пересечение имен локальных и глобальных переменных настолько значительны в объеме, что держать это в голове просто становится невозможным. Да и бессмысленным.
    И тогда приходится отлавливать значение переменной в определенный момент, следить за её динамикой по step-by-step.
     
  19. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Apple
    Какой IDE пользуешься?
    Мне пока Эклипса хватает)