PHP错误未知

时间:2014-06-16 21:36:21

标签: php

所以我创建了一个函数:

function user_data($user_id) {
    $data = array();
    $user_id = (int)$unser_id;

    $func_num_args = func_num_args();
    $func_get_args = func_get_args();

    if ($func_num_args > 1){
        unset($func_get_args[0]);

        $fields = '`' . implode('`, `', $func_get_args) . '`';
        $data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE 'user_id' = $user_id"));


        return $data;
    }

}

我错误地创建了一个拼写错误的unser_id,但直到我不得不在我的代码中沿着这条线进一步排除故障时才放弃。

我正在创建一个登录脚本,但我需要排除故障的地方是显示其他用户的个人资料数据。

我指出错字部分的原因是因为它出于某种原因是一个奇怪的错误。如果我将其更改为user_id,则不允许我再登录。如果我将其保留为under_id则可行。

我不得不排除故障,因为我认为这是问题的原因我试图查看其他用户个人资料并显示他们的信息,而不是我现在正在发生的事情。

例如,在我的网址www.mywebsite.com/myprofile中显示我的用户名和我的电子邮件地址,如果我输入www.mywebsite.com/otherprofile,它仍会显示我的信息。但是如果我输入一个在我的数据库中不存在的用户,那么它确实会显示一个查询,以便该部分可以工作。

我认为这个问题都源于这个错字,但我真的不知道appraoch的决心吗?

所以这是其他代码:

个人资料页面:

if (isset($_GET['username']) === true && empty ($_GET['username']) === false) {
    $username = $_GET['username'];



    if (user_exists($username) === true) {
        $user_id  = user_id_from_username($username);   
        $profile_data = user_data($user_id, 'first_name', 'last_name', 'email');

    ?>


    <p><?php echo $profile_data['profile']; ?></p>

    <h1><?php echo $profile_data['first_name']; ?> profile</h1>
    <p><?php echo $profile_data['email'] ?></p>



    <?php

    } else {
        echo 'Sorry, that user does not exist';
    }
    } else {
        header('Location: index.php');
    exit();
}

这里所有相关功能:

function logged_in(){
    return (isset($_SESSION['user_id'])) ? true : false;    
}


function user_exists($username) {
    $username = sanitize($username);
    $query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'");
    return (mysql_result($query, 0) == 1) ? true : false;
}

function email_exists($email) {
    $email = sanitize($email);
    $query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `email` = '$email'");
    return (mysql_result($query, 0) == 1) ? true : false;
}




function user_active($username) {
    $username = sanitize($username);
    $query = mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `active` = 1");
    return (mysql_result($query, 0) == 1) ? true : false;
}




function user_id_from_username($username) {
    $username = sanitize($username);
    return mysql_result(mysql_query("SELECT `user_id` FROM `users` WHERE `username` = '$username'"), 0, 'user_id'); 
}




function login($username, $password) {
    $user_id = user_id_from_username($username);

    $username = sanitize($username);
    $password = md5($password);

    return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `password` = '$password' "), 0) == 1) ? $user_id : false;
}

2 个答案:

答案 0 :(得分:1)

您的第一个功能中的问题是您使用单引号引用列名称:

$data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE 'user_id' = $user_id"));
                                                                         ^       ^

这意味着您实际上并未使用列user_id,而是使用字符串。

您应该将其更改为:

$data = mysql_fetch_assoc(mysql_query("SELECT $fields FROM `users` WHERE `user_id` = $user_id"));

(或没有反叛......)。

除此之外,您使用的是已弃用的mysql_*函数,并且您没有任何错误处理。您应该使用预准备语句切换到PDO或mysqli,并确保它抛出异常(两者都可以),以便您确切地知道出了什么问题。

答案 1 :(得分:0)

您正在通过$user_id替换传递给user_data的参数$unser_id

    $user_id = (int)$unser_id;

这样,$user_id的值将始终是$unser_id中存储的值,而不是传递给函数的值。您应该尝试删除该行,因此代码实际上使用您传递的用户ID。

如果您没有任何名为$unser_id的变量,则应检查PHP错误日志。我怀疑会有类似Undefined variable: unser_id的内容。