0

当我尝试使用我的功能时遇到一个错误,我不知道如何修复它。

function is_valid($email_e, $email_code_e, $username_e) {
    $email = mysql_real_escape_string($email_e);
    $email_code = mysql_real_escape_string($email_code_e);
    $username = sanitize($username_e);
    return (mysql_result
               (mysql_query
                   ("SELECT COUNT(*) FROM `users`
                     WHERE `username` = $username
                     AND `email_code` = $email_code
                     AND `email` = $email"), 0) == 1) ? true : false;
 }

警告:mysql_result() 期望参数 1 是资源,布尔值在第 34 行的 /home/meuts3/public_html/core/functions/users.php 中给出

我正在尝试制作一个忘记密码系统,当有人尝试获取新密码时,他会收到一个带有email_codeusername的链接email。当他点击时,他进入了一个更改密码页面,在这个页面中,我将使用该功能检查这些信息是否有效is_valid,所以如果is_valid我必须返回user_id以启动会话user_id

我怎样才能做到这一点?

谢谢,我真的很感谢你们。

4

3 回答 3

2

您在 sql 语句中有错误。您必须引用$username, $email_code& $emailin ''

SELECT COUNT(*) FROM `users` WHERE `username` = '$username'  AND `email_code` = '$email_code' AND `email` = '$email'

所以mysql_query返回 false,而不是资源对象。

于 2013-07-15T02:18:42.093 回答
0

首先,避免使用 mysql_* 函数,因为它们已被弃用。

第二,过程应该是这样的,

  1. 我们选择 user_id

  2. 如果获取的行数为 0,则没有这样的用户,否则我们将获得唯一的 user_id

因此,让我们考虑您的列名 user_id 是user_id并且 user_id 始终>0 来编写 sql:

$q = "SELECT user_id FROM `users` WHERE `username` = '$username'  AND `email_code` = '$email_code' AND `email` = '$email'";
$r = mysql_query($q);            //warning I don't like mysql_* functions

if(mysql_num_rows($r)>0){           //we have got more than 0 rows

    $d = mysql_fetch_assoc($r);
    return $d['user_id'];

} else {                            // No such username, email, email_code combination found in database
    return 0;
}
于 2013-07-15T02:20:59.157 回答
0

尝试这个:

function is_valid($email_e,$email_code_e,$username_e) {

    $email = mysql_real_escape_string($email_e);
    $email_code = mysql_real_escape_string($email_code_e);
    $username = sanitize($username_e);

    $sql = "SELECT user_id FROM `users`
            WHERE `username` = $username  
              AND `email_code` = $email_code 
              AND `email` = $email";

    $result = mysql_query($sql) or die(mysql_error());

    if(mysql_num_rows($result) <= 0)
     return -1;

    return  mysql_result($result,1);

}
于 2013-07-15T02:23:42.377 回答