1

次のコードを使用して、ユーザー入力をデータベースに挿入しようとしています。

mysql_query("INSERT INTO 'users' ('Email', 'Username', 'Password') VALUES ($email, $username, $password)");

エラーはありませんが、データベースにコードが挿入されていないようです。私は何か間違ったことをしていますか?

これが私のコード全体、HTML、そしてすべてです

<?php

    DEFINE ('SERVER', 'localhost');
    DEFINE ('PASSWORD', '');
    DEFINE ('USER', 'root');

    $email = $_POST['email'];
    $username = $_POST['username'];
    $password = SHA1($_POST['pass']);

    if(isset('submitted')
    {

    if($email && $username && $password)
    {
        $to = 'email@example.com'
        $subject = 'subject'
        $body = 'there was an error connecting to the db, please check it.'
        $dbconnect = @mysql_connect(SERVER, USER, PASSWORD) or die("NO WORK!");
        $query = "USE practice" 
        mysql_query($query);

        mysql_query("INSERT INTO users (Email, Username, Password)
             VALUES ('$email', '$username', '$password')") or die(mysql_erorr());
    }
    }

?>
<html>

<form action = "" method = "post">
<label>Email Address</label>
<input type="text" name="email" /> <br />
<label>Desired Username</label>
<input type="text" name="username" /> <br />
<label>Password</label>
<input type="password" name="pass" /> <br />
<input type="submit" value="Register"  />
<input type="hidden" name="submitted" value=1 />
</form>

</html>
4

3 に答える 3

2

おそらく、値をアポストロフィで囲む必要があります。また、テーブル名とフィールド名にアポストロフィを使用するのではなく、バッククォートを使用するか、何も使用しないでください。

mysql_query("INSERT INTO users (Email, Username, Password)
             VALUES ('$email', '$username', '$password')")

ただし、これらの変数の値を適切にエスケープすることも忘れないでください。SQLインジェクションのためだけでなく、ほとんどの場合、適切なSQL構文を保証するためだけです。O'Brianという名前のユーザーを想像してみてください-彼はSQLエラーを引き起こしたでしょう。

于 2012-04-17T00:32:26.893 に答える
0

いくつかのエラーが発生している可能性がありますが、おそらく次の行がmysql_errorasmysql_erorrのスペルエラーが原因で表示されません。

   mysql_query("INSERT INTO users (Email, Username, Password)
             VALUES ('$email', '$username', '$password')") or die(mysql_erorr());

それを修正して、データベースエラーが発生するかどうかを確認してください。そうすれば、簡単に追跡して修正できます。

于 2012-04-17T01:04:12.880 に答える
0

mySQLデータベースで名前空間を宣言する場合も同様です。このようにバッククォートを入れる必要があります。それで

   mysql_query("INSERT INTO users (`Email`, `Username`, `Password`)
         VALUES ('$email', '$username', '$password')") or die(mysql_erorr());

そうでなければ、あなたのコードはしっかりしているように見えます。

于 2012-04-17T01:08:53.490 に答える