[英]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版本中將不再受支持,並且它是不安全的。 對於所有數據庫操作,請使用mysqli
或PDO
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.