1

そのため、データをテーブルに入れるフォームを作成しようとしていますが、それを機能させましたが、テーブルに移動すると、空の行が作成されます。これが私のコードです。助けてください。

フォーム.php

<form action="tableinsert.php" method="post">
    First Name:<input type="text" name="fname"> <br/>
    Last Name:<input type="text" name="lname"><br/>
    Username:<input type="text" name="uname"><br/>
    Password:<input type="text" name="password"><br/>
    Email:<input type="text" name="email"><br/>
</form>

tableinsert.php

<?php
$sc = mysqli_connect ("localhost" , "dbname" , "password");

if (mysqli_errno($sc))
{
    echo "Sorry, I couldn't connect to the database. If you keep getting this error, please email the webmaster at natashaharrell@hotmail.com " . mysql_error;
}

$si = "INSERT INTO sdb_users (fname, lname, uname, password, email)
VALUES ('$_POST[fname]' , '$_POST[lname]' , '$_POST[uname]' , '$_POST[password]' , '$_POST[email]' )";

if (!mysqli_query($sc, $si))
{
    echo "Sorry there seems to be a problem: " . mysqli_errno($sc) ;
}

else
{
    echo "1 record added.";
}

    mysqli_close($sc);

?>
4

6 に答える 6

1

mysqli prepare() http://php.net/manual/en/mysqli.prepare.phpを使用して、SQL クエリにデータを挿入します。初心者が犯す可能性のある単純な間違いがたくさんあり、コードをセキュリティの問題に対して脆弱にするため、mysql_* は減価償却されています。

<?php

/* create a prepared statement */
if ($stmt = $mysqli->prepare("INSERT INTO sdb_users (fname, lname, uname, password, email) VALUES ( ?, ?, ?, ?, ? )")) {

/* bind parameters for markers */
$stmt->bind_param("s", $_POST["fname"]);
$stmt->bind_param("s", $_POST["lname"]);
$stmt->bind_param("s", $_POST["uname"]);
$stmt->bind_param("s", $_POST["password"]);
$stmt->bind_param("s", $_POST["email"];

/* execute query */
$stmt->execute();
?>
于 2013-05-13T10:04:05.573 に答える
1

これを交換

$si = "INSERT INTO sdb_users (fname, lname, uname, password, email)
VALUES ('$_POST[fname]' , '$_POST[lname]' , '$_POST[uname]' , '$_POST[password]' , '$_POST[email]')";

これとともに:

$si = 'INSERT INTO sdb_users (fname, lname, uname, password, email)
VALUES ("' . $_POST['fname'] . '", "' . $_POST['lname'] . '" , "' . $_POST['uname'] . '", "' . $_POST['password'] . '", "' . $_POST['email'] . '")';

これで実際の問題は解決しますが、余談ですが、これらの POST 値のそれぞれを MySQLi の文字列エスケープ関数でラップします (私は PDO ユーザーですが、MySQLi::real_escape_string だと思います)。これにより、SQL インジェクションから保護されます。

機能しなかった理由は、配列キーを引用符で囲んでいなかったためです。二重引用符から単一引用符に変更したのは、値をエスケープするのが簡単で、マジック クォートで囲まれた文字列を処理しなければならない PHP を節約できるためです。

于 2013-05-13T10:07:31.743 に答える
1

フォームに空の値が入力され、ページをロードするたびに自動的に送信されるため、空の行が表示される可能性があります。送信ボタンを使用する必要があります。

于 2013-05-13T09:54:50.037 に答える
1

まず、フォームフィールドから取得した値を変数に格納するのが慣習です。それを行う。その後、テキスト フィールドから取得した値をクリーンアップする必要があります。基本的に、SQL インジェクション (複雑なもの) などの予期しないものをすべてクリアする必要があります。これを行うには、 MySQL の実際のエスケープ文字列を使用する必要があります。それが完了したら、$_POST['fname'] や $_POST['lname'] などの以前の変数の代わりに変数を置き換えます。

この後、完全に機能するスクリプトが作成されることを願っています。

于 2013-05-13T10:13:25.920 に答える