1

登録ページにこの行があります。

if (device_id_exists($_POST['device_id']) == true) {
           $errors[] = 'Sorry the Serial Number \'' . htmlentities($_POST['device_id']) . '\' does not exist.';
    }

これは関数ページにあります。

function device_id_exists($device_id) {
   $device_id = sanitize($device_id);
   $query = mysql_query("SELECT COUNT(`numbers`) FROM `devicenumbers` WHERE `numbers` = '$numbers'");
   return (mysql_result($query, 0) == 0) ? true : false;

このクエリnumbersdevicenumbersnumbers (有効なSELECT COUNT(番号)を実行 すると、1 =一致が見つかりましたか?偽の番号を入力すると、「0」が返されます。何が起こっているのかというと、有効な番号がある場合でも、その番号が存在しないというエラーが返されます。結果を==1に変更すると、任意の数が送信されますか?DBの初心者のImは、どんな助けでもありがたいと言っています。十分な情報を提供できれば幸いです。) FROMWHERE= '1234567890'

4

2 に答える 2

2

間違った変数を呼び出しているようです。device_id_exists()関数内で、という名前の変数を受け入れています$device_id。ただし、クエリを実行しているときは、未定義の変数のように見えるものを呼び出しています$numbers$numbers名前をに変更する必要があると思い$device_idます。

あなた$device_idはフォームの投稿から来ているようです。mysql_real_escape_string()SQLインジェクションから確実に保護するために、変数をエスケープすることを強くお勧めします。sanitize()SQLインジェクションから保護しないことに注意してください!

さらに、エントリが存在するかどうかだけが実際の値ではなく、実際にデータベースサーバーに実際の結果を返すように要求するのでmysql_num_rows()はなく、utilizngをお勧めします。mysql_result()mysql_result()

function device_id_exists($device_id) {
  $device_id = sanitize($device_id);
  $device_id = mysql_real_escape_string($device_id);
  $query = mysql_query("SELECT COUNT(`numbers`) FROM `devicenumbers` WHERE `numbers` = '$device_id'");
  return mysql_num_rows($query) ? True : False;
}
于 2013-03-25T17:35:54.737 に答える
0

mysqlの結果セットで同様の問題が発生しました。レコードがない場合でもnums_rows==1を返します(selectクエリ内でmax()を使用している場合-あなたの場合はcount()を使用しています)...mysqlqueryをチェックする代わりに0、結果セットが空かどうかを確認します(これが私の問題を解決した方法です)。if(!empty(mysql_result($ query)))?真/偽;

于 2013-03-25T17:39:33.750 に答える