0

我有一个profile.php页面,当有人查看他们自己的个人资料时,它会获取他们用户的 id 并添加profile.php?UserID=*(* 是用户的 id 号)。目前,没有合法的方式查看其他个人资料,但您可以更改 url 中的 id。问题是,您可以转到不存在的用户的个人资料,并将其设置为默认个人资料页面,上面没有任何内容。有没有办法从页面/url获取id并查看它是否存在,如果不存在,则重定向到某个页面?

<?php
    include('./dbnotseen/global.php');
    $profile = mysql_query("SELECT * FROM admin WHERE username='$username'");
    $row = mysql_fetch_array($profile);
    $username = $row['username'];

    if (($session_username)) {

    }else {
        ("location: index.php");
    }

    //max per page
    $per_page = 1;

    //get start variable
    $start = $_GET['UserID'];

    //count records
    $record_count = mysql_num_rows(mysql_query("SELECT * FROM admin"));

    //count max pages
    $mac_pages = $record_count / $per_page;

    if (!$start)
        $start = 0;

    //display data
    $get = mysql_query("SELECT * FROM admin WHERE id='$start'");
    while ($row = mysql_fetch_array($get)) {
        $id = $row['username']; 
        $picture = $row['picture'];
        $admin = $row['admin'];
        $status = $row['status'];
        $desc = $row['description'];
        $twitter = $row['twitter'];
    }
?>

这是profile.php 中PHP 的主要部分。剩下的只是获得状态、描述等。

4

3 回答 3

1

您可以检查您的 mysql 查询的结果集是否不为空。用函数做它mysql_看起来像这样:

$get = mysql_query("SELECT * FROM admin WHERE id='$start'");
if (mysql_num_rows($get) > 0) {
    while ($row = mysql_fetch_array($get)) {
        // rest of your code
    }
}
else {
    // redirect to another page
    header("Location: otherpage.php");
}

这会给你一个关于如何处理它的想法,但正如@Madara Uchiha你对问题的评论中所建议的,你应该停止使用mysql_函数。

于 2012-10-06T16:36:02.780 回答
0

在解决您的问题之前,有几件重要的事情:

  • MySQL_* 系列函数已被弃用,不应再使用。
  • 您的代码容易受到一个巨大的安全漏洞——SQL 注入的影响。请确保您正在清理您的数据库查询 - 如果没有别的,只需$start = mysql_real_escape_string($_GET['UserID']);在您当前的代码中。

现在,您似乎想要检查并查看您的$get查询返回了多少结果。您可以只使用以下mysql_num_rows功能:

if (!mysql_num_rows($get)) {
    //no user exists! do something different here
} else {
    while ($row = mysql_fetch_array($get)) {
        $id = $row['username']; 
        $picture = $row['picture'];
        $admin = $row['admin'];
        $status = $row['status'];
        $desc = $row['description'];
        $twitter = $row['twitter'];
    }
}
于 2012-10-06T16:36:06.983 回答
0

您还可以使用以下 SQL 语句admin统计表中匹配条件的记录:id = $start

"SELECT COUNT(*) FROM admin WHERE id='$start'"

如果没有匹配的记录,那么提供的 UserID 不属于任何用户,您可能应该将用户重定向到某个页面来解释问题所在。

于 2012-10-06T16:39:09.900 回答