簡體   English   中英

我的表單正在提交多個數據庫條目,但我不希望它提交

[英]My form is submitting multiple database entries and I don't want it to

我有一個簡單的html表單和一個php文件來執行數據庫插入。 我遇到的問題是,當我按下“提交”按鈕時,我的數據庫表會收到3個相同提交的副本,而我只需要一個副本。 下面是代碼。

的HTML:

<!DOCTYPE html>
<html>
    <form action="demo.php" method="post">
        <p>
            Input 1: <input type="text" name="input1" />
            <input type="submit" value="Submit" />
        </p>
    </form>
</html>

的PHP:

<?php
define('DB_NAME', 'phpmyadminName');
define('DB_USER', 'phpmyadminUser');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if (!$link){
    die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db(DB_NAME, $link);

if (!$db_selected){
    die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
}

$value = $_POST['input1'];

$sql = "INSERT INTO demo (input1) VALUES ('$values')";

if (!mysql_query($sql)){
    die('Error: ' . mysql_error());
}

mysql_close();
?>

出於明顯的原因,DB_NAME,DB_USER和DB_PASSWORD均已更改,但是代碼確實起作用。

它只是將過多的表單數據副本提交到數據庫表。 回到學校的時候,我遇到了這個問題,但是問題似乎出在服務器端,而不是我們的代碼。 這里使用的服務器是我的,我可以完全控制它。 如果服務器出問題了,我需要幫助糾正它(因為我這樣做是為了學習如何管理這些工具,所以我不僅僅了解基本級別的管理)。

肯尼斯(Kenneth),您在這里提供的代碼確實需要一些工作。 首先,請不要再使用mysql API。 它已被棄用,在將來的PHP版本中將不再受支持,並且它是不安全的。 對於所有數據庫操作,請使用mysqliPDO API,最好使用已准備好的語句。
其次,不要老是INSERT $_POST$_GET變量直接進入數據庫,而無需驗證/第一消毒他們有人能刪除你的數據,甚至更壞你的整個數據庫。 PHP具有許多使它非常容易實現的功能,例如ctype取決於數據類型。

也許在您的代碼中嘗試如下所示:

if (!empty($_POST['input1'])) { //checks if data was received//
    $value = $_POST['input1'];
    mysql_real_escape_string($value);
    $sql = "INSERT INTO demo (input1) VALUES ('$value')";
} else {
    echo "form was not received";
    exit;
}

我還注意到您的變量名不同,上面已更正。

編輯:
錯誤地為PHP ctype函數使用了錯誤的語法。

您將在名為$value的變量中獲取POST輸入值,並在查詢中發送$values

我已經更正了代碼。

你可以試試下面的代碼嗎

<?php
define('DB_NAME', 'phpmyadminName');
define('DB_USER', 'phpmyadminUser');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if (!$link){
    die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db(DB_NAME, $link);

if (!$db_selected){
    die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
}

$value = $_POST['input1'];
if($value!=''){
   $sql = "INSERT INTO demo (input1) VALUES ('".$value."')";
}

if (!mysql_query($sql)){
    die('Error: ' . mysql_error());
}

mysql_close();
?>

以下是該問題的正確代碼。 我檢查過,當您刷新頁面時,它將在數據庫中創建新的空白條目,並且變量名稱錯誤。

您必須檢查Request方法。 這個

$ _SERVER ['REQUEST_METHOD'] ==='POST'

將檢查表單方法,這將防止數據庫中出現空白條目。

 <?php
        define('DB_NAME', 'test');
        define('DB_USER', 'root');
        define('DB_PASSWORD', 'mysqldba');
        define('DB_HOST', 'localhost');

        $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

        if (!$link){
            die('Could not connect: ' . mysql_error());
        }

        $db_selected = mysql_select_db(DB_NAME, $link);

        if (!$db_selected){
            die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
        }
        //Test for request method
        if($_SERVER['REQUEST_METHOD'] === 'POST') {
            $value = $_POST['input1'];

            $sql = "INSERT INTO demo (input1) VALUES ('$value')";
            //echo $sql;die;
            if (!mysql_query($sql)){
                die('Error: ' . mysql_error());
            }
        }
        mysql_close();
        ?>

暫無
暫無

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

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