0

次のコードに問題があります:

<?php
$con = mysql_connect("localhost","","");
if (!$con){
die('Could not connect: ' . mysql_error());
}
mysql_select_db("abc", $con);

$ids = intval($_GET['id']);
if ($ids==0){
    $id = rand (0,50);
    header("Location: http://index.php?id=$id");
}
?>

<html>
<body>

<?php
$result = mysql_query("SELECT * FROM abcdatabase WHERE id = '$id'");

if (!$result) {
echo 'Could not run query: ' . mysql_error();
exit;
}

$row = mysql_fetch_array($result);

echo "{$row['username']}<br>";

?>

</body>
</html>

などの新しいページにリダイレクトした後http://index.php/?id=38、MySQL データベースが読み込まれていないと思います。行にecho "{$row['username']}<br>";は何も表示されず、エラーメッセージも表示されないためです。実際、私は何が間違っているのか理解していません。私は初心者のプログラマーです。誰でも私が問題を思いつくのを手伝ってください。

4

2 に答える 2

1

まず第一に、mysql ライブラリは廃止されたため、使用しないでください。代わりに mysqli ライブラリを使用してください: http://php.net/manual/en/book.mysqli.php

第二に、小さなバグがあります。8 行目では $ids 変数を設定していますが、19 行目では使用していません。そこで $id を使用しますが、これは空になります。したがって、 id = empty を検索すると、クエリが成功し (結果: レコードが見つかりません)、エラー メッセージは表示されませんが、名前も取得されません (レコードが見つからないため)。だから交換

$result = mysql_query("SELECT * FROM abcdatabase WHERE id = '$id'");

$result = mysql_query("SELECT * FROM abcdatabase WHERE id = '$ids'");

一般に、コードが 1 つの結果を見つけることを期待している場合は、本当に 1 つの結果を見つけたかどうかのチェックも追加し、そうでない場合はエラー メッセージを追加します。交換

if (!$result) {
  echo 'Could not run query: ' . mysql_error();
  exit;
}

if (!$result) {
  echo 'Could not run query: ' . mysql_error();
  exit;
}
elseif (mysql_num_rows($result) <> 1) {
  echo 'No records found';
  exit;
}

第三に、Joachim が説明したようなヘッダーのバグがあります。

于 2013-07-19T06:32:49.043 に答える
0

あなたはこのようなことを試すことができます

$id = rand(0, 50);
if (isset($_GET['id'])){
    $id = intval($_GET['id']);
}

また、SQL クエリに挿入する前に、少なくとも id 変数をエスケープする必要があります。

$escapedId = mysql_real_escape_string($id);
于 2013-07-19T06:29:58.703 に答える