дублирующаяся строка, сформированная в таблице при использовании PHP для хранения формы - PullRequest
0 голосов
/ 13 октября 2019

Я делаю сайт для отображения семейных отношений человека ... Я использовал PHP для хранения данных из формы. Я использую код доступа, чтобы классифицировать различные отношения, если человек. т.е. 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-х входов

Ответы [ 2 ]

0 голосов
/ 13 октября 2019
<?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

0 голосов
/ 13 октября 2019

вы можете изменить код этого

$result = mysqli_query($conn,$sql);
if ($conn->query($sql) === TRUE) {
    echo "<p>New record created successfully</p>.";
    }
    else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

на этот

$result = mysqli_query($conn,$sql);
if ($result === TRUE) {
    echo "<p>New record created successfully</p>.";
    }
    else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

, а также вы должны быть осторожны с SQL инъекцией, поэтому я думаю, что вы должны использовать это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...