1

クラスファイルのメソッドに問題があります:

    public static function getPageLeft($pid)
{
    self::_dbConnect();
    echo "now " .$pid;
    $pid--;
    echo " after ". $pid;
    $data = mysql_query("SELECT id FROM evening_pages WHERE id='".$pid."'") or die(mysql_error());
    $rows = mysql_num_rows($data);
    if($rows == 1){
        echo "  in  ";
        return $data;

    }elseif($pid != self::getMinPage()){
        self::getPageLeft($pid);
        echo " Current: " . $pid . " min: " .self::getMinPage();
    }
}

デバッグ専用のエコーがあり、次のようになります。

今22後21今21後20現在:21分:1

このコードは、クライアントがデータベースから行を削除した場合にデータベース駆動型CMSに残っている次のページを検索し、次に低い値を検索します。

したがって、ページIDは22であり、データベースでID 21を検索します。存在しない場合は、行に0を返し、次に進んで再試行しますが、ID 20になりますが、id=20のエントリがあります。

誰かがコードの問題を見つけましたか?

また、現在のページの前に存在しないページを検索しようとすると、このエラーが発生します。たとえば、22ページに21のIDがありません。

警告:mysql_fetch_array()は、パラメーター1がリソースであり、37行目の/home/prelas/public_html/index.phpでnullが指定されていることを想定しています。

そこにあるコード(37行目はwhile):

    $getPageLeft = sql::getPageLeft($pid);
while($row = mysql_fetch_array($getPageLeft)){
        $pageleft = $row['id'];
    }

どうもありがとう。

簡単な編集:「in」はエコーされませんが、削除されたページがない場合、ナビゲーションは正常に機能します。

さらに編集:コードを利用するコード(37のように):

    $navigation = '<div id="direction">
      <span class="inNav"> <a href="index.php?pid='. $min .'">&lt;&lt;</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="index.php?pid='. $pageleft .'">&lt;</a>&nbsp;&nbsp; </span><span class="black">&bull;</span><span class="inNav">&nbsp;&nbsp;&nbsp;<a href="index.php?pid='. $pageright .'">&gt;</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="index.php">&gt;&gt;</a></span>
  </div>'

したがって、そこで$ pageleftを使用していることがわかりますが、空白のページを処理する場合、値は何もありません(空です)。

4

1 に答える 1

2

次に低いIDを取得するSQLステートメントを作成してみませんか?例えば:

 SELECT `id`
   FROM `evening_pages`
   WHERE `id` < ?
   ORDER BY `id` DESC
   LIMIT 1

または:

 SELECT MAX(`id`)
   FROM `evening_pages`
   WHERE `id` < ?

そうすれば、クエリによって何かが返されたかどうかを確認するだけで済みます。コードが少なくなり、データベース要求のオーバーヘッドが少なくなります。

mysql拡張機能は段階的に廃止されています。mysqliまたはPDOの使用について学び、SQLインジェクションの危険性について読んでください。

于 2012-06-23T22:29:07.767 に答える