0

メインページでは、次のリンクで詳細ページを開く必要があります。

<td><a href=details.php?c_id=<?php echo $c_id ?> ><img src="./images/<?php echo $row['cfilename']; ?>" width="90" height="120" alt="" /></a></td>

そして details.php コード:

<?php
$mysqli = new mysqli("localhost", "joseph", " ", "collectionsdb");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

// get value of object id that was sent from address bar
//$c_id = mysql_real_escape_string(c_id);

    /* Create the prepared statement */
    if ($stmt = $mysqli->prepare("SELECT c_id,ctitle,csubject,creference,cyear,cobjecttype,cmaterial,ctechnic,cwidth,cheight,cperiod,cmarkings,cdescription,csource,cartist,cfilename FROM collections WHERE c_id=$c_id")) {    
    /* Execute the prepared Statement */
    $stmt->execute();

    /* Bind results to variables */
    $stmt->bind_result($c_id,$ctitle,$csubject,$creference,$cyear,$cobjecttype,$cmaterial,$ctechnic,$cwidth,$cheight,$cperiod,$cmarkings,$cdescription,$csource,$cartist,$cfilename);

    /* fetch values */
    while ($rows = $stmt->fetch()) {
     // display records in a table

    // and the table of results  
?>  

ただし、リンクを押すと、すべてのデータで details.php が開きます。特定の $c_id 変数のデータのみを開くことを期待しています。詳細ページに渡されない理由がわかりません。WHERE 条件を設定した方法で、c_id の未定義変数エラーが発生します。

何を見逃したのですか?

ジョセフ

4

1 に答える 1

1

初め

$mysqli = new mysqli("localhost", "joseph", " ", "collectionsdb");

スペースを db パスワードに渡しています。する必要があります

$mysqli = new mysqli("localhost", "joseph", "", "collectionsdb");

2番

php.ini の global_register ディレクティブは有効になっていますか?

有効にすると、クエリ文字列として割り当てた変数が $c_id として渡されます。このページに php_info() を書き込むことで、register_globals が有効になっているかどうかを確認できます。こちらをご覧ください

有効になっていない場合は、クエリ文字列変数の値を変数に割り当てるか、変数をデータベースに直接渡す必要があります。

スタイル 1:

$c_id = $_GET['c_id'];
$stmt = $mysqli->prepare("SELECT c_id,ctitle,csubject,creference,cyear,cobjecttype,cmaterial,ctechnic,cwidth,cheight,cperiod,cmarkings,cdescription,csource,cartist,cfilename FROM collections WHERE c_id=$c_id"

スタイル 2:

$stmt = $mysqli->prepare("SELECT c_id,ctitle,csubject,creference,cyear,cobjecttype,cmaterial,ctechnic,cwidth,cheight,cperiod,cmarkings,cdescription,csource,cartist,cfilename FROM collections WHERE c_id=$_GET['c_id']"

スタイル 1 と 2 のクエリ文字列から値をサニタイズします。:)

register_global ディレクティブを有効にするのは良くありません。アドバイス、クエリ文字列から値を取得し、サニタイズしてクエリに渡します。

于 2013-02-13T22:03:31.557 に答える