0

いくつかのことの 1 つを実行する次のコードのチャンクがあります。最も重要なのは、(条件に応じて) データベースの内容を取得するメイン ループをセットアップすることです。

これらの条件は次のとおりです: カテゴリを見ているかどうか - ID を見ているかどうか - どちらも見ていないか (フロントページ) - 管理者パスワード/ユーザー名の組み合わせが使用されているかどうか (削除/編集目的で)。

$replies は、(ID を見ている場合) 呼び出される ID の PARENT を持つすべてのエントリを取得します。$quickinfo は、メタ タグ (タイトル、キーワードなど) などの設定に使用されます。

私の唯一の(現在の)質問は次のとおりです。これは効率的ですか?そうでない場合は、なぜですか。

$selection = "ID,CONTENT,IP,SUBJECT,CATEGORY,APPROVED,DATE,PARENT,
              PASSWORD,USERNAME,THANKS,DISAPPROVE,IPS,BUMPS";

$id = strip_tags($id);
$category = strip_tags($category);
$threads = mysql_query("SELECT COUNT(*) FROM $board") or die();
list($threadsTotal) = mysql_fetch_row($threads);
$threadsTotal_pages = ceil($threadsTotal / $POSTSPERPAGE);
$threadsPage = intval(@$_GET["page"]);

if (0 == $threadsPage)
{
    $threadsPage = 1;
}

$threadsStart = $POSTSPERPAGE * ($threadsPage - 1);
$threadsMax = $POSTSPERPAGE;

if ($category > "" && $id == ""
    && $passw != <ONE MISTAKE HERE> $adminPass 
    && $username != <ANOTHER MISTAKE HERE> $adminID)
{
    $threads = mysql_query("SELECT $selection FROM $board WHERE PARENT=0
                             AND CATEGORY='$category'
                             ORDER BY ID DESC LIMIT $threadsStart, $threadsMax");
}

if ($category == "" && $id == "" &&
    $passw !== <NOT EQAULS DOES NOT REQUIRE TWO EQUAL SIGNS AGAIN>
    $adminPass && $username != <AND AGAIN> $adminID)
 {
     $threads = mysql_query("SELECT $selection FROM $board WHERE PARENT=0
                              ORDER BY ID DESC LIMIT $threadsStart, $threadsMax");
 }

 // PLEASE CHECK THE NOT EQUALS FUTHER ON....

 if ($id > "" && $passw != $adminPass && $username != $adminID)
 {
     $threads = mysql_query("SELECT $selection FROM $board WHERE PARENT=0
                             AND ID=$id LIMIT 1");

     $quickinfo = mysql_query("SELECT COUNT(*) FROM $board") or die();
     $quickinfo = mysql_query("SELECT ID,CONTENT,SUBJECT,CATEGORY,USERNAME FROM
                               $board WHERE PARENT=0 AND ID=$id LIMIT 1");

     $replies = mysql_query("SELECT COUNT(*) FROM $board") or die();
     $replies = mysql_query("SELECT $selection FROM $board WHERE PARENT=$id
                             ORDER BY ID ASC");

     while (list( $ID, $CONTENT, $SUBJECT, $CATEGORY, $USERNAME) =
            mysql_fetch_row($quickinfo))
     {
         $threadID = $ID;
         $threadContent = $CONTENT;
         $threadSubject = $SUBJECT;
         $threadCategory = $CATEGORY;
         if ($USERNAME > "")
         {
             $threadAuthor = $USERNAME;
         }
         elseif ($USERNAME == "")
         {
             $threadAuthor = "Anonymous";
         }
     }

 } // That is the end of your if

 if ($passw == $adminPass && $username == $adminID)
 {
     $threads = mysql_query("SELECT $selection FROM $board ORDER 
                             BY APPROVED DESC LIMIT $threadsStart,
                                                    $threadsMax");
 }
4

2 に答える 2

1

Matt- コードを再フォーマットし、「!-」に「!==」を使用していることにも気づきました

また、mysqli または POD の使用を検討する必要があります。PHP の mysql ライブラリは非推奨です。

于 2012-10-12T23:11:22.267 に答える
0

1つの問題があると思います。私はあなたが本当にこれが欲しいと信じています

if ($category > "" && $id == ""
    && $passw != <ONE MISTAKE HERE> $adminPass 
    && $username != <ANOTHER MISTAKE HERE> $adminID)

{{

これになる

if ($category > "" && $id == ""
    && ($passw != <ONE MISTAKE HERE> $adminPass 
    || $username != <ANOTHER MISTAKE HERE> $adminID))

{{

または、別の||が必要になる場合があります 別の&&の代わりに、カテゴリとIDのロジックが完全にはわかりません。

それ以外の場合は、ページでDBを1回だけクエリします。これは、かなり効率的な設定のようです。

于 2012-10-13T01:02:13.850 に答える