0

新しい mysql データベースで犬のレスキューを行いました。現在、ID が 1 ~ 9 の 9 件のレコード (または 9 匹の犬) があります。[次へ] または [前へ] ボタンを使用してクリックできます。id が 1 ~ 9 の範囲外の場合 (「何もない」または「0」のように)、レコード 1 で [前へ] をクリックしても何かが見つからない (何もないため)、またはレコード (または犬) 9 にある場合これ以上レコードがないため、次の別の (または同じエラー) をクリックします。

台本:(一部)

$dog_id = $_GET['id'];
include("conn.inc.php");
// GET THE DOGGY
$result = mysql_query("SELECT * FROM pp_dogs WHERE id='$dog_id';");
$dog = mysql_fetch_assoc($result);
extract($dog);

// GET NEXT DOGGY
$next_result = mysql_query("SELECT * FROM pp_dogs WHERE id > $dog_id ORDER BY id LIMIT     1;");
$next_dog = mysql_fetch_assoc($next_result);

// GET PREV DOGGY
$prev_result = mysql_query("SELECT * FROM pp_dogs WHERE id < $dog_id ORDER BY id LIMIT 1;");
$prev_dog = mysql_fetch_assoc($prev_result);

mysql_close();

エラーメッセージ:

警告: extract() は、パラメーター 1 が配列であることを想定しており、13 行目の /home/content/15/9729315/html/dog_detail.php で指定されたブール値です。

警告: mysql_fetch_assoc() は、パラメーター 1 がリソースであると想定します。これは、18 行目の /home/content/15/9729315/html/dog_detail.php で指定されたブール値です。

警告: mysql_fetch_assoc() は、パラメーター 1 がリソースであると想定しており、22 行目の /home/content/15/9729315/html/dog_detail.php で指定されたブール値です。

13、18、および 22 行目は、上記のスクリプトにあります。

データベースに犬がもういないときに次の前のボタンを無効にするか、1から(前をクリックして)9に行く - 最後のレコード?

4

1 に答える 1

0

最初と最後のレコードを取得することから始めて、スクリプトでそれらを使用して、アクティブまたは無効なボタンを設定します。

include("conn.inc.php");

// Get first and last records
$first_record = mysql_query("SELECT id FROM pp_dogs ORDER BY id ASC LIMIT 1");
$last_record =  mysql_query("SELECT id FROM pp_dogs ORDER BY id DESC LIMIT 1");
   //Note, mysql_ functions are depreciated. You can use these to test, but you should change to mysqli or PDO

// Get current Dog ID
if ($_GET['id'] < $first_record || $_GET['id'] > $last_record){
   // Either set $dog_id = $first_record OR give message that $dog_id does not exist
}
else {
     $dog_id = $_GET['id'];} //Still need to escape to prevent injection

// GET THE DOGGY
$result = mysql_query("SELECT * FROM pp_dogs WHERE id='$dog_id';");
$dog = mysql_fetch_assoc($result);
extract($dog);

// GET NEXT DOGGY
if ($dog_id < $last_record){
    $next_result = mysql_query("SELECT * FROM pp_dogs WHERE id > $dog_id ORDER BY id LIMIT     1;");
    $next_dog = mysql_fetch_assoc($next_result);
}
else {
     // Disabled Next Button  ie. <input type="button" value="Next" DISABLED />
     }

// GET PREV DOGGY
if ($dog_id > $first_record){
    $prev_result = mysql_query("SELECT * FROM pp_dogs WHERE id < $dog_id ORDER BY id LIMIT 1;");
     $prev_dog = mysql_fetch_assoc($prev_result);
}
else {
     // Disabled Previous Button  ie. <input type="button" value="Previous" DISABLED />
     }
mysql_close();

また、現在のクエリは SQL インジェクションの機が熟しているため、myslq_関数を新しい開発に使用するべきではありません。mysqli または PDOに変更して、安全に脱出できることを確認してください!

于 2012-08-24T03:37:37.140 に答える