2014-11-25 4 views
0

Не знаете, что произошло, но его внезапно перестали работать ... Я могу ввести адрес электронной почты и имя пользователя (я знаю, что учетные данные верны) и получить сообщение о том, что он не найдет каких-либо деталей ...Функция забытого пароля не работает, sql, php

содержание forgotpassword.php:

<?php 
require_once("users.inc"); 

$PAGE_TITLE = "Forgotten Password"; 

include $PHP_USERS_HEADER_FILE; 

?> 

<h3>Forgot Your Password?</h3> 

<p>If you've forgotten your password, just enter the username and email address that you registered with, and your password will be emailed to you immediately.</p> 



<form method="post" action="emailpassword.php"> 
    <p><b>Your Username: </b> 
    <input type="text" name="username" size="35" /> 
    </p><p> 
    <b>Your Email Address: </b> 
    <input type="text" name="email" size="35" /> 
    </p> 
    <input type=submit value="Submit" /> 
</form> 

содержание emailpassword.php:

<?php 
require_once("users.inc"); 

$PAGE_TITLE = "Forgotten Password"; 

connect_to_users_db(); 

$password = fnRandomPassword(8); 
$encrypt_pwd = md5($password); 

$sql = "UPDATE users SET password='$encrypt_pwd' WHERE email='".$_REQUEST['email']."' AND username='".$_REQUEST['username']."'"; 
$query = mysql_query($sql); 

$sql1 = "SELECT email, username, password FROM users WHERE email='".$_REQUEST['email']."' AND username='".$_REQUEST['username']."'"; 
$query1 = mysql_query($sql1); 
if ($query1 && (mysql_num_rows($query1) > 0)) { 

    while (list($email,$username) = mysql_fetch_row($query1)) { 
    mail($email, "Your Password", "Below is the username and password information you requested.\n\nUsername: '$username'\nPassword: '$password'.\n\n","From: $WEB_MASTER <$WEB_MASTER_EMAIL>\n"); 

} 
} 


include $PHP_USERS_HEADER_FILE; 

?> 

<h3>Forgot Your Password?</h3> 

<? 

echo "<p>"; 

//if ($query && mysql_num_rows($query) > 0) { 
if (mysql_affected_rows() > 0) { 

?> 

<p>We've emailed your password. You should receive it within a minute. If you don't, please send mail to the <a href="mailto:<?=$WEB_MASTER_EMAIL?>"><?=$WEB_MASTER?></a>.</p> 

<?php 

} else { 

?> 

<p>We could not find an email and username corresponding with the email address and username you entered. Perhaps you registered with a different email address/username. Use the form below to try again.</p> 



<form method="post" action="emailpassword.php"> 
    <p><b>Your Username: </b> 
    <input type="text" name="username" size="35" /> 
    </p><p> 
    <b>Your Email Address:</b> 
    <input type="text" name="email" size="35" /> 
    </p> 
    <input type="submit" value="Submit" /> 
</form> 


<p>If you believe you have not registered before, you are welcome to sign up now with the following form:</br> 
     <?php include 'fragments/requestaccont.htm';?> 

<?php 

} 

?> 

есть некоторые устаревшие трески здесь или что-то еще?

+1

уязвим для SQL-инъекций, использует старый mysql_. Так что да устаревший и опасный. должен быть обновлен до нового материала pdo и т. д. Но для отладки непосредственной проблемы. распечатайте сгенерированный sql и запустите его вручную, чтобы сравнить с БД. Возможно, некоторые дополнительные символы/пробелы попадают туда. – Doon

+0

Функции 'mysql_ *' устарели от PHP 5.5. Возможно, вы захотите использовать 'mysqli' или' PDO'. Что касается ваших вопросов; делает ли ваш код какие-либо исключения или показывает какие-либо ошибки? –

+0

Вам, ребята, нужно говорить на языке noob, поэтому я понимаю: P У меня нет ошибок, кроме той части, что она не работает, и просто дает пользователям «Мы не смогли найти электронное письмо и имя пользователя, соответствующее адресу электронной почты ...» Поэтому, если есть решение просто заставить его работать, это поможет мне до тех пор, пока Ive не выяснит, как его изменить: P – Milla

ответ

0

Он останавливается, потому что вы изменили строку, которая проверяет запрос. Теперь он отправит по электронной почте новый пароль и отобразит сообщение «не найден».

Вы используете mysql_affected_rows(), но последний запрос был запросом SELECT, который не влияет на строки. Изменить строку:

if (mysql_affected_rows() > 0) { 

В этой строке:

if ($query1 && (mysql_num_rows($query1) > 0)) { 

Также слушать Дун, mysql_* осуждается.

Смежные вопросы