首页 > 解决方案 > 使用PHP存储表单时在表中形成重复行

问题描述

我正在制作一个网站来显示个人的家庭关系...我使用 PHP 来存储表单中的数据。如果是个人,我使用访问代码对不同的关系进行分类。ie.101-人 X 的关系。我需要一些帮助来解释为什么一个条目被两次输入到数据库中。(PHP 新手,第一次在这里寻求帮助)提前谢谢你!表格代码(IN ct.php):

    <form id="frm1" action="ap.php" method="POST">
    access code: <input type="text" name="code_entered" value=""><br><br>
    position in family: <select name="fpos_entered">
        <option>Grandfather</option>
        <option>Grandmother</option>
        <option>Father</option>
        <option>Mother</option>
        <option>Brother</option>
        <option>Sister</option>
        <option>Uncle</option>
        <option>Aunt</option>
        <option>Nephew</option>
        <option>Niece</option>
        <option selected>Yourself</option>
    </select><br><br>
    name: <input type="text" name="name_entered" value=""><br><br>
    DOB:<input type="date" name="dob_entered" value=""><br><br>
    <input type="submit" value="Submit">
</form>

我使用以下 PHP 代码来存储表单中的数据:

    <?php
include 'ct.php';
$temp="temp";
$conn= mysqli_connect ('localhost','root','','familytree');
if (!$conn)
{
die ('Could not connect:' . mysql_error());
}
if (isset($_POST['code_entered']))
{
    $acc= $_POST['code_entered'];
}if (isset($_POST['fpos_entered']))
{
    $fpos= $_POST['fpos_entered'];
}if (isset($_POST['name_entered']))
{
    $n= $_POST['name_entered'];
}if (isset($_POST['dob_entered']))
{
    $db= $_POST['dob_entered'];
}
$sql ="insert into temp values ('$acc', '$n','$fpos','$db')";
$result = mysqli_query($conn,$sql);
if ($conn->query($sql) === TRUE) {
    echo "<p>New record created successfully</p>.";
    }
    else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>

这导致我有: 2个输入后的数据库图片

标签: phpmysqlforms

解决方案


<?php
declare(strict_types=1);

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "familytree";

$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);

try {
    $stmt = $conn->prepare("
INSERT INTO `temp` (code, fpos, name, dob) 
VALUES (:code, :fpos, :name, :dob)");

    $stmt->bindParam(':code', $_POST['code_entered'] ?? null);
    $stmt->bindParam(':fpos', $_POST['fpos_entered'] ?? null);
    $stmt->bindParam(':name', $_POST['name_entered'] ?? null);
    $stmt->bindParam(':dob', $_POST['dob_entered'] ?? null);
    $stmt->execute();

    echo "<p>New record created successfully</p>.";
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

我建议您使用 PDO 而不是 mysqli。另外,绑定来自外部的属性:)

官方文档:https ://www.w3schools.com/php/php_mysql_prepared_statements.asp


推荐阅读