参数应该是资源的布尔值

时间:2013-07-15 02:13:57

标签: php mysql email

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

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_codeusernameemail的链接。当他点击时,他会转到 changepassword 页面,在此页面中,我将使用函数is_valid检查这些信息是否有效,所以如果is_valid我必须返回user_id开始会话user_id

我该怎么做?

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

3 个答案:

答案 0 :(得分:2)

sql语句中有错误。您必须引用$username$email_code& $email中的''

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

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

答案 1 :(得分:0)

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

第二, 这个过程应该是,

  1. 我们选择user_id

  2. 如果提取的行数为0,则没有其他用户我们会获得唯一的user_id

  3. 所以让我们写一下sql,考虑到你的user_id的列名是user_id,而user_id总是> 0:

    $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;
    }
    

答案 2 :(得分: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);

}