在我的表单中,有一些字段,我想在提交表单之前检查。如果有错误,则不会提交表单,并且会向用户发出错误警告。
为此目的,我试图在php中捕获表单提交的事件。我应该收到带有文字的警报"已提交"。但是,我不知道。我在做什么错误?
<?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>
答案 0 :(得分:3)
alert()
不是PHP提供的功能,因此会出错。
您似乎对JavaScript感到困惑。
要从PHP输出文本,您需要echo
或将其放在<?php ... >?
块之外。要运行JavaScript,您需要<script>
元素。
<?php
if(isset($_POST['submit'])) {
?>
<script> alert("Submitted!"); </script>
<?php
}
?>
<form action="next_page.php" method=post>
<!-- You also need to have a form control that matches the test you are doing -->
<button name="submit" value="X">Submit</button>
</form>
答案 1 :(得分:1)
您的表单缺少submit
类型。
此外,您需要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>
答案 2 :(得分:0)
有很多方法可以实现您想要完成的任务。你在使用任何类型的框架吗?它可能已经内置了。通常,依靠标准函数或库来进行验证并不是一个坏主意。
如果不是,您将不得不自己做,并决定何时您希望它是服务器端(php)或用户端(javascript)。无论你是否应该在服务器端进行验证以捕获任何恶意提交。
如果我们使用您的示例,它可能看起来像服务器端的PHP验证,它将结果回复给用户。请注意,这确实非常不安全,因为它使用的是可能被修改的$ _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>
此代码段会在出现任何错误时保留输入,并且只有在数据有效时才会重定向到下一页。使用jQuery的示例可能如下所示:
<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>
答案 3 :(得分:0)
据我了解,您在提交表单后尝试在同一页面上输出消息,而不是警报。 HTML表单标记上的action属性会将您重定向到next_page.php。因此,将action属性留空,在验证完所有字段后,使用php header()函数重定向到next_page.php。请注意不要在header()函数之前输出任何消息,在这种情况下它将失败。 做这样的事情:
<?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>
答案 4 :(得分:0)
有很多方法可以做到。
如果你想在回声下保持它,那么这又是另一种选择:
<?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>
编辑:通常我会尝试将PHP放在同一页面的顶部,而不是将其指向其他位置,因为不需要这样做。
答案 5 :(得分:0)
我解决它的方法是使用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;
});