1
<?php
$conn= new mysqli("localhost", "my_user", "my_password", "world"); //changed for the sake of this question

$username = $_POST['Username'];
$password = sha1($_POST['Password']);
$email = $_POST['Email'];
$firstname = $_POST['FirstName'];
$lastname = $_POST['LastName'];

$insert = 'INSERT INTO User(FirstName, LastName, Email, Username, Password, Type) VALUES ("'.$firstname.'", "'.$lastname.'", "'.$email.'", "'.$username.'", "'.$password.'", 'User');';

$result = $conn->query($insert);

?>
<form method='post' action='regprocess.php'>
<fieldset class="register">
<h2>Register</h2>
<ul>
    <li><label for="FirstName">First Name: </label> <input type="text" name="FirstName" id="FirstName"></li>
    <li><label for="LastName">Last Name: </label> <input type="text" name="LastName" id="LastName"></li>
    <li><label for="Email">Email: </label><input type="email" name="Email" id="Email"></li>
    <li><label for="Username">Username: </label><input type="text" name="Username" id="Username"></li>
    <li><label for="Password">Password: </label><input type="password" name="Password" id="Password"></li>
    <li><input type="submit" value="Register"></li>
</ul>
</fieldset></form>

フォームとトップの SQL コードは別のファイルにあります。

皆さん、こんにちは。mysql テーブルに挿入しようとしていますが、テーブルに挿入できません。登録テーブルに挿入しようとしています。そして、なぜそれが機能しないのかよくわかりません。いくつかの洞察は素晴らしいでしょう。テーブルを提供する必要がある場合は提供しますが、それが機能しない理由の一部ではないと思います。

4

4 に答える 4

1

を使用しているのは良いことですがmysqli、間違った使い方をしていると、多くの非常に深刻な SQL インジェクション バグにさらされ、深刻な結果になる可能性があります。

これは、例に存在する多数の問題を実際に修正するために行うべきことです。

$stmt = $conn->prepare('INSERT INTO User(FirstName, LastName, Email, Username, Password, Type) VALUES (?,?,?,?,?,?)');

$stmt->bind_param($firstname, $lastname, $email, $username, $password, 'User');
$stmt->execute();

$result = $stmt->get_result();

プレースホルダーの主な利点は、データを適切に引用する方法について心配する必要がないことです。それは自動的に行われます。また、ステートメント内で 2 つの異なる種類の引用符を使用する必要が大幅に回避されます。

SQL に入れられるANYおよびALLデータにプレースホルダーを使用しないと、深刻な問題が発生する可能性があります。あなたはこれについて警戒しなければなりません。

于 2012-08-21T06:17:12.910 に答える
0

アドバイスとして、常に SQL クエリ テキストの最初から最後まで " を使用してください。

$insert = 'INSERT INTO User(FirstName, LastName, Email, Username, Password, Type) VALUES ("'.$firstname.'", "'.$lastname.'", "'.$email.'", "'.$username.'", "'.$password.'", 'User');';

次のように置きます:

$insert = "INSERT INTO User(`FirstName`, `LastName`, `Email`, `Username`, `Password`, `Type`) VALUES ('$firstname', '$lastname', '$email', '$username', '$password', 'User');";

クエリには「ユーザー」があり、「を\」としてエスケープする必要があります

また、コンテンツをデータベースに追加する前に、コンテンツを常にサニタイズすることを忘れないでください

于 2012-08-21T06:24:20.560 に答える
0

最後のパラメーター値は一重引用符で囲みます。..."'.$password.'", "User");'; となるように二重引用符に置き換えます。

于 2012-08-21T02:29:08.443 に答える
0

私はPHPを知りません。私はMySQLであなたを助けようとします。

挿入クエリの引用符に問題があると思います。

値句から一重引用符を削除してみてください。

于 2012-08-21T02:30:39.583 に答える