[英]Why is my form auto submitting on page load?
我有一個HTML表單,可以自動在表單中的所有元素之間進行制表。 提交后,它將調用第一個元素(order_number),而光標停留在第二個字段中,這樣人們就可以使用相同的order_number掃描多個(Chip_numbers)。
要重置整個表單,我想刷新頁面,但是隨后會彈出錯誤消息,並且光標自動置於第二個元素中。
這是我的腳本:
<?php
$servername = "host";
$username = "username";
$password = "password";
$dbname = "JVSIntranet";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "INSERT INTO MICROCHIP_TBL (chip_number,order_number)
VALUES
('$_POST[chip_number]','$_POST[order_number]')";
IF (mysqli_query($conn, $sql)) {
echo "Great Job! You've entered it correctly!";
} else {
echo "Error: TRY AGAIN HUMAN!";
}
$value = "";
if( isset( $_POST ["order_number"] )) $value = $_POST ["order_number"];
mysqli_close($conn);
?>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script type="text/javascript">
function getNextElement(field) {
var form = field.form;
for ( var e = 0; e < form.elements.length; e++) {
if (field == form.elements[e]) {
break;
}
}
return form.elements[++e % form.elements.length];
}
function tabOnEnter(field, evt) {
if (evt.keyCode === 13) {
if (evt.preventDefault) {
evt.preventDefault();
} else if (evt.stopPropagation) {
evt.stopPropagation();
} else {
evt.returnValue = false;
}
getNextElement(field).focus();
return false;
} else {
return true;
}
}
</script>
</head>
<body onLoad="document.chip_insert.chip_number.focus();">
<center>
<h1>Jeffers HomeAgain Microchip Entry</h1>
<form name="chip_insert" id="chip_insert" action="<?php echo $PHP_SELF;?>" method="post" >
Order Number: <input tabindex="1" maxlength="12" type="text" name="order_number" id="order_number" value="<?php echo $value; ?>" required="required"onkeydown="return tabOnEnter(this,event)" /><br /><br />
Tag Number: <input tabindex="2" maxlength="15" type="text" name="chip_number" id="chip_number" required="required" /><br /><br />
<input tabindex="7" type="submit" />
</center>
</form>
</body>
</html>
無論何時打開此頁面,無論是否有帖子都將插入數據庫。 由於沒有發布控制(發布或未發布控制),因此以下代碼塊:
IF (mysqli_query($conn, $sql)) {
echo "Great Job! You've entered it correctly!";
} else {
echo "Error: TRY AGAIN HUMAN!";
}
這部分應該是這樣的:
if(isset($_POST)){
IF (mysqli_query($conn, $sql)) {
echo "Great Job! You've entered it correctly!";
} else {
echo "Error: TRY AGAIN HUMAN!";
}
}
您的php部分應如下所示
<?php
$servername = "host";
$username = "username";
$password = "password";
$dbname = "JVSIntranet";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$value = "";
if (isset($_POST ["order_number"])) {
$value = $_POST ["order_number"];
$sql = "INSERT INTO MICROCHIP_TBL (chip_number,order_number)
VALUES
('$_POST[chip_number]','$_POST[order_number]')";
if (mysqli_query($conn, $sql)) {
echo "Great Job! You've entered it correctly!";
} else {
echo "Error: TRY AGAIN HUMAN!";
}
}
mysqli_close($conn);
?>
而且在html中</center>
應該在</form>
標記之后,盡管這不是大問題
您在此代碼上還有其他問題...
IF (mysqli_query($conn, $sql)) {
echo "Great Job! You've entered it correctly!";
} else {
echo "Error: TRY AGAIN HUMAN!";
}
應該像
if(isset($_POST['chip_number'] && $_POST['chip_number'] != '')
{
IF (mysqli_query($conn, $sql)) {
echo "Great Job! You've entered it correctly!";
} else {
echo "Error: TRY AGAIN HUMAN!";
}
}
和
$sql = "INSERT INTO MICROCHIP_TBL (chip_number,order_number)
VALUES
('$_POST[chip_number]','$_POST[order_number]')";
應該像
$sql = "INSERT INTO MICROCHIP_TBL (chip_number,order_number)
VALUES
('{$_POST['chip_number']}','{$_POST['order_number']}')";
甚至最后一件事都不是正確的類型來稱呼它...也許您可以看看http://php.net/manual/en/mysqli-stmt.bind-param.php
實際會是什么樣子
$stmt = mysqli_prepare($link, "INSERT INTO MICROCHIP_TBL VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, 'dd', $_POST['chip_number'], $_POST['order_number']);
//....
mysqli_execute();
要么
$stmt = mysqli_prepare($link, "INSERT INTO MICROCHIP_TBL SET chip_number=?,order_number=?");
mysqli_stmt_bind_param($stmt, 'dd', $_POST['chip_number'], $_POST['order_number']);
//....
mysqli_execute();
這些示例不是建立在$ db = new mysqli(...)之類的對象上的; 但是您應該考慮使用這種方式:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.