0

データベースに接続してからテーブルを更新する必要がある php スクリプトにフォームからデータを送信しています。これは基本的に、すべての登録ユーザーのデータベースです。何らかの理由で、データベース テーブルが値で更新されていません。

フォーム コードは次のとおりです。

<body>
          <div class="header">
          Registration
          </div>

          <div class="content" style="text-align:center";>

               <form name="input" action="success.php" method="post"><br>
                  First name: <input type="text" name="firstname"><br/>
                  Last name: <input type="text" name="lastname"><br/>
                  Age: <input type="text" name="age"><br/>
                  Date of Birth: <input type="text" name="dateofbirth"><br/>
                  Email: <input type="text" name="email"><br/>
                  <input type="submit" value="Submit"><br/><br>
               </form>

          </div>

        <br><br><a href="index.html" style="font-size: 22px";>Back</a>
    </body>

そして、私が持っているphpコードは次のとおりです。

<?php
    $con=mysqli_connect("example.com","myname","123","database1");
    $sql="INSERT INTO user (fname, lname, age, dob, email) VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[age]','$_POST[dateofbirth]','$_POST[email]')";
    mysqli_query($sql);
    mysqli_close($con);

?> 

誰かが私が間違っているところを教えてもらえますか?? データベースが更新されていません。テーブルに値が入力されていません。

4

6 に答える 6

0

テスト済み

あなたが投稿したのと同じエントリで表を作成し、この結論に達しました。

でもまず; 他の人が指摘し、何度も言われているように、 の使用はMySQL_推奨されておらず、近い将来に削除される予定です。したがって、MySQLi_PDOを使用することを強くお勧めします。

問題をすばやく解決するために、クエリを渡すときに DB に接続するように指示していません。

変化する:

mysqli_query($sql);

に:

mysqli_query($con, $sql);

そしてそれはうまくいくでしょう。それは私にとってはうまくいったので、理論的にはあなたにもうまくいくでしょう。

于 2013-10-19T01:13:13.140 に答える
0

SQL ステートメントを実行するときは、常にエラーをチェックしてください。クエリが成功したかどうかを確認してから、エラーを出力しない限り、何が問題なのかわかりません。

また、他の人がコメントしているように、$_GET または $_POST 変数を SQL に直接含めないでください。これにより、ハッキングの危険にさらされます。

これをコーディングする適切な方法の例を次に示します。

<?php
    $con=mysqli_connect("example.com","myname","123","database1");
    if ($con->connect_error) {
        trigger_error($con->connect_error, E_USER_ERROR);
    }

    $sql="INSERT INTO user (fname, lname, age, dob, email) VALUES (?, ?, ?, ?, ?)";
    if (($stmt = $con->prepare($sql)) === false) {
        trigger_error($con->error, E_USER_ERROR);
    }

    $stmt->bind_param("sssss", $_POST["firstname"], $_POST["lastname"], 
        $_POST["age"], $_POST["dateofbirth"], $_POST["email"]);
    if ($stmt->execute() === false) {
        trigger_error($stmt->error, E_USER_ERROR);
    }

    $con->close();

?> 

クエリの準備または実行で問題が発生した場合は、それが報告されます。

于 2013-10-18T23:15:22.027 に答える
0

準備済みステートメントを作成することはそれほど難しくありません。コピペするだけでOKです。準備されたステートメントは常に 100% 安全であるとは限らないため、これはより多く使用する必要があります。

<?php
$firstname = escapeshellarg($_POST["firstname"]);
$lastname = escapeshellarg($_POST["lastname"]);
$age = escapeshellarg($_POST["age"]);
$dateofbirth = escapeshellarg($_POST["dateofbirth"]);
$email = escapeshellarg($_POST["email"]);

$con=mysqli_connect("example.com","myname","123","database1");
if (mysqli_connect_errno($con))
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}


$stmt = mysqli_stmt_init($con);
$query =  "INSERT INTO user (fname, lname, age, dob, email) VALUES (?, ?, ?, ?, ?)";
mysqli_stmt_prepare($stmt, $query);
mysqli_stmt_bind_param($stmt, "sssss", $firstname, $lastname, $age, $dateofbirth, $email);
if(mysqli_stmt_execute($stmt))
{
    mysqli_close($con);
}

?>

「sssss」は文字列を表すことに注意してください。age が int 変数の場合は、代わりに「ssiss」を使用してください。

PS。私がかつて WAMP (Apache) で犯した単純な間違いは、ユーザーが適切な権限を持っていなかったことです。それを見つけるのに何時間もかかりました、同じ間違いをしないでください;)

于 2013-10-18T23:27:47.433 に答える