0

我正在使用 MySQL 数据库。我完全确定该 ID 确实存在于数据库中。为什么它会到最后一个 else (在哪里说 //incorrect id)?

<?php
            //Localise user id.
            $userid = $_SESSION['userid'];

            //Get content of the article.
            $sql = "SELECT * FROM articles WHERE creatorid = '$userid'";
            $result = mysql_query($sql) or die(mysql_error()); //Execute. If fails, show error.
            $array = mysql_fetch_array($result);

            if(in_array($articleid, $array)) //If the URL id exists in the database (array)
            {
                //The article does actually exist for that user. They requested it.
                $sql = "SELECT * FROM articles WHERE id = '$articleid'";                
                $result = mysql_query($sql) or die(mysql_error()); //Execute. If fails, show error. 
                $array = mysql_fetch_array($result);

                        $content = $array['content'];

                        if($content != '') //If the article has actually been written.
                        {
                            include($_SERVER['DOCUMENT_ROOT'] . '/includes/renderimage.php');
                        }   else
                            {
                                //Article actually hasn't been written.
                            }
            }   else
                {
                    //Incorrect ID.
                }
                ?>
4

2 回答 2

1

您只查看返回的第一行。您需要mysql_fetch_array循环调用以获取每一行。此外,您不应该使用in_array(),因为文章 ID 可能出现在其他列中(如果您正在检查文章 #3 和用户 #3 怎么办?)。

但是,如果您只想查看文章是否由该用户创建,则可以使用不同的查询:

SELECT * FROM articles WHERE creatorid = '$userid' AND articleid = '$articleid';

这应该返回 0 或 1 行,具体取决于用户是否创建了文章。然后,您可以使用mysql_num_rows()来测试这一点。

于 2012-10-13T06:42:51.563 回答
0

看来您访问阵列不正确。最重要的是,如果创建者发布了多篇文章,那么您将返回多篇文章,因此您的 in_array() 完全无效。将查询的限制更改为一条记录 (LIMIT 0,1) 并通过调用访问创建者 ID:

$result[0]->creatorid or $result['creatorid']

取决于您的资源是如何被查询的

于 2012-10-13T06:36:44.620 回答