我对编码和编写脚本非常陌生,可以从表单中插入数据。我想检查验证,如果这些是真的,那么数据应该提交到数据库。 问题是,当加载页面时,数据已经提交到数据库而没有单击提交按钮。
这是我的代码:
<?php
include 'config.php';
?>
<html>
<head> <h1 align="center">Credit form </h1>
<script>
function GoToValidation() {
var x = document.forms["insert_form"]["name"].value;
var y = document.forms["insert_form"]["amount"].value;
if (x == null || x == "") {
alert("Name field must be filled out");
return false;
}
if (y == null || y == "") {
alert("Amount field must be filled out");
return false;
}
}
</script>
</head>
<body bgcolor="#D3D3D3">
<table>
<form name="insert_form" action="insert.php" method="post" onsubmit="GoToValidation() ">
<br>
<br>
<br>
<br>
<table align="center" width="30%" border="1" cellpadding="4" cellspacing="0" bordercolor="#ffffff">
<tr>
<td>Name</td>
<td>
<input type="text" name="name">
</td>
</tr>
<tr>
<td>Date</td>
<td>
<input type="text" name="TodayDate">
</td>
</tr>
<tr>
<td>Amount</td>
<td>
<input type="text" name="amount">
</td>
</tr>
<tr>
<td></td>
<td align="right">
<input type="submit" value="submit">
</td>
</tr>
</form>
<?php
$qinsert = "INSERT INTO finance (name,date,amt,status)
VALUES('$_POST[name]','$_POST[TodayDate]','$_POST[amount]','P')";
if (!mysqli_query($con, $qinsert)) {
die('Error: ' . mysqli_error($con));
}
?>
<script>alert ("1 record added") </script>
<?php
mysqli_close($con);
?>
</body>
</html>
答案 0 :(得分:1)
问题在于,当您加载页面时,正在执行执行INSERT
查询的PHP脚本,因为没有什么能阻止它。
我认为最简单的解决方案,也是为了帮助您了解客户端和服务器端之间的区别,就是为PHP创建一个单独的页面。然后在<form action="PHP_PAGE"
属性上调用此页面。然后,您会看到INSERT
仅在表单提交时执行。
答案 1 :(得分:1)
你混淆了一些东西。请记住,您正在使用JavaScript代码进行客户端(浏览器)验证,并使用PHP代码进行服务器端处理。
最佳做法是将处理器部分分类为执行数据库内容的“控制器文件”,然后重定向到或包含结果呈现文件。更好的是:尝试熟悉一些MVC模式基础知识,以便更好地理解这对于最小化关注点的分离至关重要。
无论如何,要使用单一文件方法解决此问题,您至少需要检查您的HTML表单是否已成功验证并提交。这可以通过检查通过成功的POST请求传输的提交按钮值来实现:
if ($_POST[ "submit" ]) {
// Your database insert statement
}
请再次注意,每次调用该页面时,都会处理行<script>alert ("1 record added") </script>
。您可以在服务器站点上生成状态消息并将其包含在HTML呈现中,或者将JavaScript语句放在PHP if语句中以有条件地生成JavaScript代码(这根本不是好习惯!):
if (mysqli_query($con, $qinsert)) {
echo '<script>alert ("1 record added")</script'; // Better don't do that!
}
虽然这可能会奏效,但从长远来看,你可能不会对此感到满意。请再次尝试熟悉一些常见的设计模式。了解PHP的MVC模式和框架,以及最近JavaScript的转换角色以及如何最好地在客户端使用它。像你发布的那样的东西非常“九十年代”。
答案 2 :(得分:0)
在插入查询之前检查一个条件,如果$ _post('submit'){your insert code ..}
警报(“添加1条记录”)答案 3 :(得分:0)
将<form onsubmit="return GoToValidation();">
放入您的表单标记...
答案 4 :(得分:0)
您还可以在输入中使用HTML5 Required function。您将不再需要验证脚本,因为您将收到所需函数的通知。
<tr><td>Name</td> <td><input type="text" name="name" required="required"></td></tr>
<tr><td>Date </td> <td><input type="text" name="TodayDate"></td></tr>
<tr><td>Amount</td> <td> <input type="text" name="amount" required="required"></td></tr>