为什么我的表单在页面加载时自动提交
Why is my form auto submitting on page load?
我有一个html表单,可以自动按Tab键浏览表单中的所有元素。提交后,它调用第一个元素 (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!";
}
}
你对这段代码还有一些问题...
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(...) 这样的对象;但是你应该考虑以这种方式使用它:)
你的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>
标签之后,尽管这不是大问题
相关文章:
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 每次提交表单时都会重新加载网页
- 加载后的页面与ajax表单提交不起作用
- 如何在不重新加载的情况下提交表单,并使用Node+Express将数据传递回同一页面
- 为什么我的ajax在提交用@HtmlRenderPartial加载的表单时只调用fire一次
- Netsuite Suitelet:在不达到治理限制的情况下,遍历事务行项目的列表加载和提交记录
- Ruby/JS如何在提交按钮后重新加载页面
- 防止形成“;提交时”;正在加载空白页
- 我如何重新加载URL链接,在我点击提交按钮后它保持不变
- 单击提交按钮后加载图像将冻结
- 由于正在加载modernizr,表单在单击时未提交
- Don't提交jquery后重新加载
- 如何在用户提交后退按钮时重新加载同一页面
- 使用 jQuery 提交通过 Ajax 加载的表单
- 为什么我在使用 javascript 提交表单时没有通过不加载页面获取帖子数据
- 下拉表单,提交时加载网址
- 从数据库加载记录,不带提交按钮的下拉选择
- 使用 AJAX 在页面加载时自动提交表单并获得 html 类型结果
- Symfony表单提交而不重新加载页面
- 提交youtube播放列表id并从id加载播放列表