0

MySQL データベースを使用しています。ID が実際にデータベースに存在することを完全に確信しています。なぜ最後のelseに行くのですか(//間違った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()は完全に無効になります。クエリの制限を1つのレコード(LIMIT 0,1)に変更し、次を呼び出して作成者IDにアクセスします。

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

リソースのクエリ方法によって異なります

于 2012-10-13T06:36:44.620 に答える