簡體   English   中英

PHP-Mysql查詢不必要地兩次插入數據

[英]PHP-Mysql query unnecessarily inserting data twice

我面臨的這個問題對我來說是很不尋常的。 我實際上想做的是通過HTML表單將數據插入mysql數據庫表。 這是表格的樣子。

我有一個數據庫,我正在嘗試向其中插入數據,但是它始終顯示“重復輸入錯誤”。

這是錯誤的樣子

問題是盡管檢查了我輸入的信息是唯一的,但顯示了錯誤。當我檢查數據庫表時,我可以看到每次條目將id遞增2。我不知道為什么查詢插入數據兩次,使主鍵增加2,請幫助我希望一切正常。

這是數據庫表的屏幕截圖

我無法解決它,請幫助我。

這是我的形式的HTML代碼

<form class="form-horizontal" name="RegisterCandidate" action="../processors/process_register_candidate.php" method="post" enctype="application/x-www-form-urlencoded">
        <div class="form-group">
            <label for="Fname" class="control-label col-sm-4">
                First Name
            </label>
            <div class="col-sm-8">
                <input type="text" class="form-control" name="Fname" tabindex="1" autofocus required placeholder="First Name" />
            </div>
        </div>

        <div class="form-group">
            <label for="Lname" class="control-label col-sm-4">
                Last Name
            </label>
            <div class="col-sm-8">
                <input type="text" class="form-control" name="Lname" tabindex="2"  required placeholder="Last Name" />
            </div>
        </div>

        <div class="form-group">
            <label for="Photo" class="control-label col-sm-4">
                Photograph
            </label>
            <div class="col-sm-8">
                <input type="file" class="form-control" name="Photo" tabindex="3" placeholder="Select Photo" />
            </div>
        </div>
        <div class="form-group">
            <label for="DOB" class="control-label col-sm-4">
                Date of Birth (DD-MM-YYYY)
            </label>
            <div class="col-sm-8">
                <input type="date" class="form-control" name="dob" tabindex="4"  required />
            </div>
        </div>

        <div class="form-group">
            <label for="password" class="control-label col-sm-4">
                Password
            </label>
            <div class="col-sm-8">
                <input type="password" class="form-control" name="password" tabindex="5"  required placeholder="Password" />
            </div>
        </div>

        <div class="form-group">
            <label for="contact" class="control-label col-sm-4">
                Contact No.
            </label>
            <div class="col-sm-8">
                <input type="tel" class="form-control" name="contact" tabindex="6"  required placeholder="Contact Number" />
            </div>
        </div>
        <button type="submit" name="register" class="btn btn-success" style="float:right; margin-right:30%;">
            Register
        </button>
    </form>

這是我的php-mysql代碼的副本

<?php
require_once "../web_config/web.config.php";

$conn = connect();

$fname = $_POST["Fname"];
$lname = $_POST["Lname"];
$dob = $_POST["dob"];
$password = $_POST["password"];
$contact = $_POST["contact"];

$insert = " INSERT INTO `candidates`
(
`Fname`,
`Lname`,
`dob`,
`password`,
`contact`
) VALUES (
'$fname',
'$lname',
'$dob',
'$password',
'$contact'
)
";
try{
    $st = $conn->query($insert);
    $st->execute();
} catch(PDOException $e) {
    echo "//Failed to insert data due to ".$e->getMessage();
}
echo $fname." ".$lname;
#header("Location:../src/student_login.php");

?>

這個你能幫我嗎。 謝謝。

因此,這里存在一些問題。

前面提到的$conn->query將直接運行代碼,因此execute是多余的,但是,您對SQL注入持開放態度,因此應進行綁定,例如下面的示例:

$stmt = $this->conn->prepare("INSERT INTO `candidates`(`Fname`,`Lname`,`dob`,`password`,`contact`) VALUES (?,?,?,?,?)");
$stmt->execute([$fname,$lname,$dob,$password,$contact]);

另外,您不應該在諸如此類的通用查詢上運行try { } catch {} (尤其是如果您處於實時環境中,因為每個人都可以看到您自己的此類問題)。

附帶說明一下,以未加密方式添加密碼也會給您帶來安全問題。 您應該看看使用password_hash文檔的情況: http : //php.net/manual/en/function.password-hash.php

try{
    $st = $conn->query($insert);
    $st->execute();
} catch(PDOException $e) {
    echo "//Failed to insert data due to ".$e->getMessage();
}

在這段代碼中,您正在執行$ conn-> query($ insert); 足以插入$ st僅保留插入查詢的結果,不是准備好的語句刪除

$st->execute();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM