看看变量是否在数组中

时间:2012-10-13 06:26:48

标签: php mysql

我正在使用MySQL数据库。我完全确定该ID确实存在于数据库中。为什么它会转到最后一个(在哪里说//错误的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.
                }
                ?>

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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

访问创建者ID
$result[0]->creatorid or $result['creatorid']

取决于查询资源的方式