如何在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捕捉表单提交的事件。我应该会收到一个带有文本“已提交”的警报。然而,我没有。我犯了什么错误

<?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;
});

HTML5
pattern
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;
    });