如何在PHP中检查表单提交?

时间:2016-07-27 12:26:57

标签: php html forms

在我的表单中,有一些字段,我想在提交表单之前检查。如果有错误,则不会提交表单,并且会向用户发出错误警告。

为此目的,我试图在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>

6 个答案:

答案 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;
    });