0

以下のエコーステートメント、

$statement = "INSERT INTO $tbl_name VALUES(" . $_GET['username'] . "," . $_GET['password'] . "," . $_GET['PasswordHintQuestion'] . "," . $_GET['PasswordHintAnswer'] . "," . $_GET['firstname'] . "," . $_GET['lastname'] . "," . $_GET['genderSelect'] . "," . $_GET['date_in_format'] . "," . $_GET['nationality'] . "," . $_GET['refEmail'] . ")" ;   
echo $statement;

出力を次のように与えました。

INSERT INTO ge_user_table VALUES([object HTMLInputElement],[object HTMLInputElement],[object HTMLInputElement],[object HTMLInputElement],[object HTMLInputElement],[object HTMLInputElement],[object NodeList],[object HTMLSelectElement]/[object HTMLSelectElement]/[object HTMLSelectElement],[object HTMLInputElement],[object HTMLInputElement])Database Insertion fault on registration

しかし、データベースへの挿入中に、次のようなエラーが発生しました。

SQL 構文にエラーがあります。1 行目の '[object HTMLInputElement],[object HTMLInputElement],[object HTMLInputElement],[o' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

ただし、以下のクエリは正常に機能しています。

INSERT INTO ge_user_table VALUES('Muthu2','1234','Who are you?','Iam Indian','Muthu','Ganapathy','MALE','1991-12-21','Indian','abc@abc.com');

編集: コードを次のように変更しました。

  $username     = mysql_escape_string($_GET['username']);
  $password     = mysql_escape_string($_GET['password']);
  $hintQues     = mysql_escape_string($_GET['PasswordHintQuestion']);
  $hintAns      = mysql_escape_string($_GET['PasswordHintAnswer']);
  $firstname    = mysql_escape_string($_GET['firstname']);
  $hintQues     = mysql_escape_string($_GET['lastname']);
  $gender       = mysql_escape_string($_GET['genderSelect']);
  $date         = mysql_escape_string($_GET['date_in_format']) ;
  $nationality  = mysql_escape_string($_GET['nationality']) ;
  $email        = mysql_escape_string($_GET['refEmail']) ;



    $statement = "INSERT INTO $tbl_name VALUES('$username' ,'$password','$hintQues' ,'$hintAns','$firstname' ,'$lastname' ,".
               "'$gender' ,'$date','$nationality','$email')" ;   

しかし、データベースには次のようなエントリがあります。 ここに画像の説明を入力

最終的な解決策: form.username.value の代わりに、html で form.username を渡しました。これで正解です。

4

3 に答える 3

2

javascriptにエラーがあるようです。値の代わりに html DOM ノードを送信します。

また、 get 変数を次のようにエスケープする必要があります

mysql_real_escape_string($_GET['username']);
于 2013-03-13T09:16:40.590 に答える
0

SQL 構文が間違っています。mysql_real_escape_string を使用できますが、SQL に値を渡す方法にも注意する必要があります。

上記のクエリでは、引用符なしで単純にテキストを渡しました。

$statement = "INSERT INTO $tbl_name VALUES('".$_GET['username']."', '".$_GET['password']."', '".$_GET['PasswordHintQuestion']."', '".$_GET['PasswordHintAnswer']."', '".$_GET['firstname']."', '".$_GET['lastname']."', '".$_GET['genderSelect']."', '".$_GET['date_in_format']."', '".$_GET['nationality']."', '".$_GET['refEmail']."')" ;   
于 2013-03-13T09:26:59.737 に答える