-3

我有这个代码在标题中提到的这个错误:

    <?php  session_start(); 
       ob_start();

                include("connection.php");

                $username = $_POST['username'];
                $password = $_POST['password'];

                $query = mysql_query("SELECT * FROM users WHERE user_username = '$username' AND user_password = '$password'",$conn)
                or die($query. "<br/><br/>".mysql_error());

                if($query = mysql_affected_rows() > 0) {
                    $record = mysql_fetch_assoc($query);
                    $validuser = $row['username'];
                    $_SESSION['valid'] = $validuser;
                    if(isset($_SESSION['valid']))
                    {
                        header('Location:  index.php');         
                    }
                    } else { ?>
                        <script>alert('Username not registered.')
                        </script>
<?php
                   }
                    exit();

?>

这是我的网络作业,我是 php 的新手。请需要帮助。

4

3 回答 3

2

您的代码中有以下内容:

if($query = mysql_affected_rows() > 0) {

mysql_affected_rows()返回受影响的行数。如果大于 0,则为 ,否则$query为。的值将始终是一个布尔值。TRUEFALSE$query

mysql_fetch_assoc()需要一个 MySQL 资源作为它的参数,但您将传递一个布尔值。这就是错误的原因。

从文档中mysql_affected_rows()

通过与 link_identifier 关联的最后一个 INSERT、UPDATE、REPLACE 或 DELETE 查询获取受影响的行数。

另一件事是你正在运行一个SELECT语句,你可能想要mysql_num_rows()

通常,您的if声明应如下所示:

if(mysql_num_rows($query) > 0) {
    # code ...
}

您可以使用您的代码调整它,如下所示:

$num = mysql_num_rows($query);

if($num > 0) 
{
    while ($record = mysql_fetch_assoc($query)) 
    {
        $validuser = $row['username'];
        $_SESSION['valid'] = $validuser;
        if(isset($_SESSION['valid']))
        {
            header('Location:  index.php');         
        }
    }
}
else 
{
    # else block ...
}

另外,请注意,mysql_功能已被弃用,并且很快将被删除。您应该切换到 MySQLi 或 PDO 并开始使用参数化查询以确保安全。

于 2013-10-20T07:52:25.470 回答
0

更改此代码:

if($query = mysql_affected_rows() > 0) {
                    $record = mysql_fetch_assoc($query);
                    $validuser = $row['username'];

对此:

 if(mysql_num_rows($query) > 0) {
                $record = mysql_fetch_assoc($query);
                $validuser = $record['username'];
于 2013-10-20T08:23:51.097 回答
0

在这个循环中:

if($query = mysql_affected_rows() > 0)

您正在分配$query表达式的结果。所以$query要么是真,要么是假。

然后在循环中,您正在执行以下操作:

$record = mysql_fetch_assoc($query);

这是触发错误的地方,因为 now$query不再是该mysql_query方法的结果。

要解决此问题,请更改您的 if 条件:

if(mysql_affected_rows() > 0)

您还应该升级您的代码,因为旧mysql_*函数将从 PHP 中删除。

于 2013-10-20T07:54:16.710 回答