如何在PHP中检查表单提交?
在我的表单中,有一些字段,我想在提交表单之前检查这些字段。如果有错误,表单将不会提交,并且用户将收到错误警报 为此,我试图用php捕捉表单提交的事件。我应该会收到一个带有文本“已提交”的警报。然而,我没有。我犯了什么错误如何在PHP中检查表单提交?,php,html,forms,Php,Html,Forms,在我的表单中,有一些字段,我想在提交表单之前检查这些字段。如果有错误,表单将不会提交,并且用户将收到错误警报 为此,我试图用php捕捉表单提交的事件。我应该会收到一个带有文本“已提交”的警报。然而,我没有。我犯了什么错误 <?php if(isset($_POST['submit'])) echo "<span>Submitted!</span>"; sleep(2); ?> <form action="next_page.php" m
<?php
if(isset($_POST['submit']))
echo "<span>Submitted!</span>";
sleep(2);
?>
<form action="next_page.php" method=post>
*Other fields beside input*
<input type="submit" name="submit" value="Submit form"> <br>
</form>
*输入旁边的其他字段*
alert()
不是PHP提供的函数,因此它会出错
你似乎把它和JavaScript混淆了
要从PHP输出文本,您需要echo
it或将其置于
警报(“已提交!”);
提交
您的表单缺少提交
类型。
您还需要echo
警报框,因为alert()
不是PHP函数
<?php if(isset($_POST['submit']))
echo"<script>alert('Submitted!');</script>"; ?>
<form action="next_page.php" method=post>
<input type = "submit" name = "submit" value = "Sub"/>
</form>
有很多方法可以实现您想要实现的目标。您是否使用任何类型的框架?它可能是为此而内置的。一般来说,依靠标准函数或库进行验证不是一个坏主意
如果不是,您必须自己做,并决定何时使用服务器端(php)或用户端(javascript)。无论如何,您应该在服务器端验证它,以捕获任何恶意提交
如果我们使用您的示例,服务器端php验证的结果可能是这样的,它会将结果返回给用户。请注意,这是非常非常不安全的,因为它使用的$\u GET可能会被修改,等等
<?php
$username = '';
$warning = '';
if(isset($_POST['submit'])){
if(!empty($_POST['username']) && strlen(trim($_POST['username'])) != 0){
$username = $_POST['username'];
if(strlen($username) > 8){
$warning = 'Only 8 characters allowed!';
}else{
header("Location: next_page.php");
}
}
else
{
$warning = 'Username is empty, please provide a valid name.';
}
}
?>
<form action="form.php" method="post">
<input type="text" name="username" value="<?php echo($username); ?>" />
<?php echo($warning); ?>
<input type="submit" name="submit" />
</form>
据我所知,您试图在提交表单后在同一页面上输出消息,而不是警报。
HTML表单标记上的action属性将您重定向到下一个_page.php。因此,将action属性留空,在验证所有字段后,使用php header()函数重定向到next_page.php。注意不要在header()函数之前输出任何消息,在这种情况下它将失败。
这样做:
<html lang="en">
<head>
<meta charset="utf-8">
<title>event.preventDefault demo</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
<body>
<form action="form.php" method="post">
<input type="text" name="username" id="formUsername" />
<span id="warning"> </span>
<input type="submit" name="submit" />
</form>
<script>
$(document).ready(function() {
$("form").submit(function( event ) {
var username = $("#formUsername").val().trim();
if(username.length > 0 && username.length < 9){
$("form").submit();
}
else if(username.length > 8)
{
$("#warning").text("More than 8 characters.");
event.preventDefault();
}
else{
$("#warning").text("Empty username?");
event.preventDefault();
}
});
});
</script>
</body>
</html>
<?php
if( $_SERVER['REQUEST_METHOD'] == 'POST' ){
$err_message = '';
//validate your fields
if($_POST['yourfield'] == ''){
$err_message = 'Please check your fields';
}
//other validations
...
if($err_message == ''){
//redirect to your next page
header('Location:next_page.php');
//prevent further code execution
exit();
}
//output your message
echo $err_message;
}
?>
<form action="" method=post>
*Other fields beside input*
<input type="submit" name="submit" value="Submit form"> <br>
</form>
*输入旁边的其他字段*
有很多方法可以做到这一点
如果您希望将其保持在回音的基础上,这里还有一个备选方案:
<?php
if (isset($_POST['submit']))
{
echo '<script>alert("Submitted!");</script>';
}
?>
<form action="" method=post>
*Other fields beside input*
<input type="submit" name="submit" value="Submit form"> <br>
</form>
我解决这个问题的方法是使用Jquery,如下所示
$('#form1').submit(
function() {
//your validation rules here
var email = $('#YourEMail').val()
if(!validEmail(email))
{
$('#invalidAlert').html('<i>Invalid e-mail address!</i>')
return false;
}
else
return true;
});
$('form1')。提交(
函数(){
//这里是您的验证规则
var email=$('#YourEMail').val()
如果(!validEmail(电子邮件))
{
$('invalidAlert').html('无效电子邮件地址!')
返回false;
}
其他的
返回true;
});
HTML5pattern
attribute,或者您可以使用JS。哦,然后提交类型!您是否在表单中的任何位置看到名为“submit”的表单元素?不我也不知道。那么你怎么能期望在你的代码中看到它呢?它看起来也是javaScript和PHP的混合体(除非你编写了自己的alrt()函数,但基于这个问题的简单性,我非常怀疑)。警报?Javascript警报?从你的PHP脚本alert()
是一个JAVASCRIPT函数。因此,它在PHP中不起任何作用,只是应该生成编译错误。查看PHP错误日志,在第一个示例中,您混合了$\u GET
和$\u POST
,并且表单仍然通过POST提交,第二行将抛出一个未定义变量
,除非通过URL设置用户名。(仍仅在第一个示例中)谢谢,我确实改进了一点。起初我的想法不同,因此与$\u GET
混淆了。这只不过是给某人一个可以做什么的想法。它有很多缺点。
$('#form1').submit(
function() {
//your validation rules here
var email = $('#YourEMail').val()
if(!validEmail(email))
{
$('#invalidAlert').html('<i>Invalid e-mail address!</i>')
return false;
}
else
return true;
});