1

さて、register.phpスクリプトを記述しましたが、コマンドを実行しようとすると、予期しないT変数が表示されます。エラーは15行目にあります。

('$_Post[username]','$_Post[sha_pass_hash]','$_Post[email]','2')";

また、Dreamweaverの20行目によると、構文に2番目のエラーがあります。

    die('Error: ' . mysql_error());

誰かが助けることができればそれは大いにありがたいです。前もって感謝します。

4

5 に答える 5

3

止まる

投稿から直接データベースに挿入することは、常に悪い考えです。これが、PHP が現在非常に非直感的なマジック クォートに固執している理由です。

少なくとも mysql_real_escape_string() を使用してデータをエスケープする必要があります。例えば:

$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());

$query = "INSERT INTO users VALUES (
    '" . mysql_real_escape_string($_POST["username"]) . "',
    '" . mysql_real_escape_string($_POST["sha_pass_hash"]) . "',
    '" . mysql_real_escape_string($_POST["email"]) . "',
    '2'
)";

mysql_query($query);

これを行う必要がある理由は、セキュリティに基づいています。たとえば、悪意のある人が'); DROP TABLE users;最初にデータをエスケープせずにユーザー名フィールドをに設定した場合。次のクエリをやみくもに実行することになります。

INSERT INTO users VALUES (''); DROP TABLE users;

もちろん、これはあなたのアプリケーションにとってうまくいくとは限りません。

これはあなたがしなければならない最低限のことです。

実際には、より最新の MySQL インターフェイスであるMySQLiに移行する必要があります。ここに例があります

$mysqli = new mysqli('mysql_host', 'mysql_user', 'mysql_password', 'mysql_database');

$query = "INSERT INTO users VALUES (
    '" . $mysqli->real_escape_string($_POST["username"]) . "',
    '" . $mysqli->real_escape_string($_POST["sha_pass_hash"]) . "',
    '" . $mysqli->real_escape_string($_POST["email"]) . "',
    '2'
)";

$mysqli->query($query);

手続き型のスタイルで MySQL を使用することもできます。したがって、オブジェクト指向プログラミングがまだ手の届かないところにある場合でも、MySQLi に問題はありません。

それが役立つことを願っています。

于 2012-07-10T10:22:44.240 に答える
2
($_Post["username"],$_Post["sha_pass_hash"],$_Post["email"],'2')";

引用符を削除します。

于 2012-07-10T06:35:00.003 に答える
1
($_Post["username"],$_Post["sha_pass_hash"],$_Post["email"],'2')";
于 2012-07-10T06:30:24.940 に答える
1
($_POST["username"],$_POST["sha_pass_hash"],$_POST["email"],'2')";

変数を一重引用符で囲みます:)

于 2012-07-10T06:30:52.177 に答える
1

これを使って:

('".$_Post[username]."','".$_Post[sha_pass_hash]."','".$_Post[email]."','2')
于 2012-07-10T06:35:39.563 に答える