php表单自动提交


php form submitted automatically

你好,我有一个页面index.php,里面有一个联系人表单,问题是当我加载页面时,就像我按下了提交按钮,我不知道为什么。。我希望成功或错误的警报只在按下提交按钮后出现,而不是在页面加载时出现。。这是代码:

<?php
if($_POST["submit"]){//form was submitted
    if($_POST['email'] != "" AND !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
        $error .= '<br /><strong>Incorrect Email Address</strong>';
    }
}else{
    $result = '<div class="alert alert-danger"><strong>Form Not Submitted</strong></div>';
}
if($error)
    $result .= '<div class="alert alert-danger"><strong>There was some error(s) in the form: </strong>'.$error.'</div>';
else {
    if(mail("carlosd.dev@gmail.com",$_POST['subject'],"
         Name: ".$_POST['name']."
         Email: ".$_POST['email']."
         Message: ".$_POST['message'])){
        $result = '<div class="alert alert-success">Form Submitted We Will Be In Touch Soon!</div>';
    }else{
        $result = '<div class="alert alert-danger">Sorry the form was not submitted, please try again</div>';
    }
}?>

就在这个上面,我有我的HTML代码:

    <!DOCTYPE html>
<html>
<head>
    <title>PHP | Practicas</title>
    <meta charset="utf-8" />
    <meta http-http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link rel="stylesheet" type="text/css" href="styles.css">
    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
    <!-- Optional theme -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap-theme.min.css">
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-md-6 col-md-offset-3" id="emailForm">
                <h2>Contact Form<br /></h2>
                <form action="index.php" method="post">
                    <div class="form-group">
                        <label for="name">Your name: </label>
                        <div class="input-group">
                            <input type="text" name="name" class="form-control" placeholder="Your Name" required="true" value="<?php echo $_POST['name']; ?>"/>
                            <span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="email">Your email: </label>
                        <div class="input-group">
                            <input type="email" name="email" class="form-control" placeholder="Your Email" required="true"/>
                            <span class="input-group-addon"><span class="glyphicon glyphicon-envelope"></span></span>
                        </div>
                    </div>
                    <div class="form-group">
                        <label for="subject">Subject: </label>
                        <div class="input-group">
                            <input type="text" name="subject" class="form-control" placeholder="Subject of message" required="true" value="<?php echo $_POST['subject']; ?>"/>
                            <span class="input-group-addon"><span class="glyphicon glyphicon-tag"></span></span>
                        </div>
                    </div>
                    <div class="form-group">
                        <textarea name="message" class="form-control" placeholder="Enter the message" required="true"><?php echo $_POST['message']; ?></textarea>
                    </div>
                    <input type="submit" name="submit" class="btn btn-success btn-lg" value="Send!" />
                </form>
            </div>
        </div>
    </div>
    <!-- Latest compiled and minified JavaScript -->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
 </body>
 </html>
 </head>

我该怎么办才能解决这个问题??

同时检查此

添加到HTML表单

<input type="hidden" name="submit" value="true">

PHP检查表单是否提交

<?php
if($_POST['submit']=='true') {
//true
} esle {
//false
}
?>

这将适用于

您的页面是一个自调用元素。发生的情况是,在第一次加载时,它试图在$_POST数组中找到email和其他输入。这自然不存在,因此发出警报
使用<form action='<?php echo $_SERVER['PHP_SELF']?>'' method="post">而不是
<form action="index.php" method="post">。这很可能会解决问题

离题建议:使用filter_input(INPUT_POST,'submit')而不是$_POST['index']。它更安全,建议使用。


您的代码在我的机器(WAMP服务器)中运行时似乎有很多错误。初始化$error$result变量。这似乎有帮助

PHP代码放在顶部,将HTML表单放在底部更改此

if($_POST["submit"]){//form was submitted

用这个

if(isset($_POST["submit"])){//form was submitted

也更改此

if($_POST['email'] != "" AND !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){

使用此

if(!empty($_POST['email']) AND !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){

还更改"错误"检查

if($error)

带有

if(strlen($error)>0) {

你的其他应该是

{ else

所有代码

 <?php
    if(isset($_POST["submit"])){//form was submitted
        if(!empty($_POST['email']) AND !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
            $error .= '<br /><strong>Incorrect Email Address</strong>';
        }
    } else {
        $result = '<div class="alert alert-danger"><strong>Form Not Submitted</strong></div>';
    }
    if(strlen($error)>0) {
        $result .= '<div class="alert alert-danger"><strong>There was some error(s) in the form: </strong>'.$error.'</div>';
    } else {
        if(mail("carlosd.dev@gmail.com",$_POST['subject'],"
             Name: ".$_POST['name']."
             Email: ".$_POST['email']."
             Message: ".$_POST['message'])){
            $result = '<div class="alert alert-success">Form Submitted We Will Be In Touch Soon!</div>';
        } else {
            $result = '<div class="alert alert-danger">Sorry the form was not submitted, please try again</div>';
        }
    }
    ?>

使用此isset()

if(isset($_POST['submit'])){
//here your code
}