首页 文章

PHP联系表单没有正确回复

提问于
浏览
0

我是PHP新手,我的联系表格中有问题 . 当我在我的表单中按“提交”时,它跳过(某处,我不知道它发生在何处以及为什么会发生)到其他站点,并且php代码不会检查条件 . 更重要的是,你可以在“人类识别器”中键入错误的答案,它仍然会发送和发送电子邮件 . 我一直在寻找糟糕的声明或错误的语法,但似乎都很好 . 我假设我的contact.php如果发送电子邮件(但没有检查条件)也会正确响应 . 我不知道它是否已连接但我的模态窗口也不想关闭(但在其他网站上相同的代码工作正常,当有其他形式withoud“action = contact.php”字段) .

我的主要head.php:

<!--HEAD-->
<head>
    <title>X</title>

<!--META-->
    <meta http-equiv="Content-Type" content="text/html"; charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="author" content="SitePoint">

<!--CSS-->
    <link id="theme" rel="stylesheet" href="css/light.css">
    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">


<!-- Font Awesome -->
    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">

</head>
<!--END OF HEAD-->
    <body>
        <script src="https://code.jquery.com/jquery-3.2.1.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.min.js"></script>
        <script src="js/dropdown.js"></script>
        <script src="js/scrolling-nav.js"></script>
        <script src="js/theme-switch.js"></script>
        <script src="js/nav-position.js"></script>

            <nav id="mainNav">
                <bar>
                    <i id="hamburger" class="fa fa-bars" aria-hidden="true"></i>
                </bar>
                <ul id="menu">
                    <li><a href="#main">Main</a></li>
                    <li><a href="#generator">Generator</a></li>
                    <li><a href="#about">About</a></li>
                    <li><a href="#contact">Contact</a></li>
                </ul>
            </nav>

        <section id = "main" >
        <div class = "content">
        <h1>Hello!</h1>
        <p>:)</p>
        </div></section>

        <section id = "generator">
        <div class = "content">
        <h1>Generator</h1>
          <form id="generator-form" ="form-horizontal" role="form" method="post" action="generator.php">
                <div class="form-group">
                    <label for="name" class="col-sm-2 control-label">Name</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="name" name="name" placeholder="First & Last Name" value="<?php echo htmlspecialchars($_POST['name']); ?>">
                        <?php echo "<p class='text-danger'>$errName</p>";?>
                    </div>
                </div>
        <div class="form-group">
                    <label for="idCardNumber" class="col-sm-2 control-label">Name</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="idCardNumber" name="idCardNumber" placeholder="Student ID Card Number" value="<?php echo htmlspecialchars($_POST['name']); ?>">
                        <?php echo "<p class='text-danger'>$errName</p>";?>
                    </div>
                </div>
                <div class="form-group">
                    <div class="col-sm-10 col-sm-offset-2">
                        <input id="submit" name="submit" type="submit" value="Send" class="btn btn-primary">
                    </div>
                </div>
                <div class="form-group">
                    <div class="col-sm-10 col-sm-offset-2">
                        <?php echo $result; ?>
                    </div>
                </div>
            </form> 
        </div></section>

        <section id = "about">
        <div class = "content">
        <h1>About</h1>
        <p></p>
        </div></section>

        <section id="contact">
            <div class="content">
                <h1>Contact</h1>
                <p><a class="btn btn-default btn-lg" href="#contact-form">Contact Us</a></p>
                <p><iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d5122.204450340393!2d19.91387757798398!3d50.065647167696376!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x47165ba756b59b21%3A0xb20c8dba21b317d1!2sAkademia+G%C3%B3rniczo-Hutnicza+im.+Stanis%C5%82awa+Staszica+w+Krakowie!5e0!3m2!1spl!2spl!4v1511628584066" width="500rem" height="500rem" frameborder="0" style="border:0" allowfullscreen></iframe></p>
            </div>
        </section>

        <footer>
           <label class="switch">
       <input type="checkbox"  onchange=" switchTheme(this)">
       <span class="slider"></span>
    </label>
            <p>Copyright©2017 <a href=""></a> for <a href=""> </a></p>
        </footer>

    <!--SIGN UP-->
        <div id="contact-form" class="modal-window">
            <div>
                <a href="#modal-close" title="Close" class="modal-close">Close</a>
                <form action="contact.php">
                    <div class="form-group">
                        <label for="name">Name</label>
                        <input type="text" class="form-control" id="name" name="name" placeholder="First & Last Name" value="<?php echo htmlspecialchars($_POST['name']); ?>">
                        <p class="text-danger"><?php echo $errName; ?></p>
                    </div>
                    <div class="form-group">
                        <label for="email">Email address</label>
                        <input type="email" class="form-control" id="email" name="email" placeholder="example@domain.com" value="<?php echo htmlspecialchars($_POST['email']); ?>">
                        <p class="text-danger"><?php echo $errEmail; ?></p>
                    </div>
                    <div class="form-group">
                         <label for="message">Message</label>
                         <textarea class="form-control" rows="4" name="message" value="<?php echo htmlspecialchars($_POST['message']);?>"></textarea>
                         <p class="text-danger"><?php echo $errMessage; ?></p>
                    </div>
                   <div class="form-group">
                         <label for="human">1 + 1 = ?</label>
                         <input type="text" class="form-control" id="human" name="human" pattern=".{1,}" required title="At least 1 character required" placeholder="Your Answer">
                         <p class="text-danger"><?php echo $errHuman; ?></p>
                   </div>
                     <input id="submit" name="submit" type="submit" value="Send" class="btn btn-primary btn-lg"></input>
                     <div class="form-group">
                            <?php echo $result; ?>
                     </div>
                </form>
            </div>
        </div>
        <!--END SIGN UP-->

        <!--CONTACT FORM-->
        <div id="contact-form" class="modal-window">
                <a title="Close" class="modal-close">Close</a>
                <form id="contactForm" role="form" method="post" action="contact.php">
                    <div class="form-group">
                        <label for="name">Name</label>
                        <input type="text" class="form-control" id="name" name="name" pattern=".{3,}"   required title="At least 3 characters required" placeholder="First & Last Name" value="<?php echo htmlspecialchars($_POST['name']); ?>">

                    </div>
                    <div class="form-group">
                        <label for="email">Email address</label>
                        <input type="email" class="form-control" id="email" name="email" placeholder="example@domain.com" pattern=".{3,}"   required title="At least 3 characters required"  value="<?php echo htmlspecialchars($_POST['email']); ?>">
                       <?php echo "<p class='text-danger'>$errEmail</p>";?>
                    </div>
                    <div class="form-group">
                        <label for="message">Message</label>
                        <textarea class="form-control" rows="4" pattern=".{3,}"   required title="At least 3 characters required" name="message">
                            <?php echo htmlspecialchars($_POST['message']);?>
                        </textarea>
                            <?php echo "<p class='text-danger'>$errMessage</p>";?>
                    </div>
                    <div class="form-group">
                        <label for="human">1 + 1 = ?</label>
                        <input type="text" class="form-control" id="human" name="human" pattern=".{1,}"   required title="At least 1 character required" placeholder="Your Answer">
                        <p class='text-danger'>$errHuman</p>
                    </div>
                    <input name="submit" type="submit" value="Send" class="btn btn-primary btn-lg">
                    <div class="form-group">
                        <?php echo $result; ?>
                    </div>
                </form>
        </div>
        <!--CONTACT FORM-->

    </body>
</html>

我的contact.php代码:

<?php
    if (isset($_POST["submit"])) {
        $name = $_POST['name'];
        $email = $_POST['email'];
        $message = $_POST['message'];
        $human = intval($_POST['human']);
        $from = 'Generator Contact'; 
        $to = 'kamykx@gmail.com'; 
        $subject = 'Message from AGH Generator Form';

        $body ="From: $name\n E-Mail: $email\n Message:\n $message";

        //CHECK NAME
        if (!$name || empty($name)) {
            $errName = 'Please enter your name';
        }

        //CHECK EMAIL
        if (!$email || !filter_var($email, FILTER_VALIDATE_EMAIL) || empty($email)) {
            $errEmail = 'Please enter a valid email address';
        }

        //CHECK MESSAGE
        if (!$message || empty($message)) {
            $errMessage = 'Please enter your message';
        }

        //CHECK IF USER IS NOT A BOT
        if ($human !== 2 || $human !=2) {
            $errHuman = 'Please... proof that you are not a bot :>';
        }

        //SEND THE EMAIL IF THERE ARE NO EXISTING ERRORS
        if (!empty($errName) && !empty($errEmail) && !empty($errMessage) && !empty($errHuman)) {
            if (mail ($to, $subject, $body, $from)) {
                $result='<div class="alert alert-success">Thank You! We will be in touch</div>';
            } else {
                $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later</div>';
            }
            header("Location: home.php");
        }
    }
?>

编辑:我已经完成了我的PHP代码的改进(行错误字段中的逻辑问题是空的:是 - > if(!empty($ errName))但应该是 - > if(空($ errName)) . 但是我还有问题 . 我已经压缩了代码,以便在联系表单提交后保持在同一页面上,但是当我们点击“提交”按钮时没有出现任何内容(没有显示错误),页面只刷新并打开再来一次 . 现在怎么了?新代码:

<!DOCTYPE HTML>

<html lang="en">

<!--HEAD-->
<head>
    <title>AGH Application for entry with ECTS deficit generator</title>

<!--META-->
    <meta http-equiv="Content-Type" content="text/html"; charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="author" content="SitePoint">
    <meta name="Description" content="It is simple PDF generator for sing with lack of ECTS for another term" />
    <meta name="Keywords" content="ECTS, deficit, deficyt, Poland, Cracow, generator, application, form, pdf, AGH, UST, Akademia, Górniczko, Hutnicza, University, S    cience, Technology, Polska, Kraków, " />

<!--CSS-->
    <link id="theme" rel="stylesheet" href="css/dark.css">
    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">


<!-- Font Awesome -->
    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">

</head>
<!--END OF HEAD-->
    <body>
        <script src="https://code.jquery.com/jquery-3.2.1.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.min.js"></script>
        <script src="js/dropdown.js"></script>
        <script src="js/scrolling-nav.js"></script>
        <script src="js/theme-switch.js"></script>
        <script src="js/nav-position.js"></script>

            <nav id="mainNav">
                <bar>
                    <i id="hamburger" class="fa fa-bars" aria-hidden="true"></i>
                </bar>
                <ul id="menu">
                    <li><a href="#main" class="nav">Main</a></li>
                    <li><a href="#generator" class="nav">Generator</a></li>
                    <li><a href="#about" class="nav">About</a></li>
                    <li><a href="#contact" class="nav">Contact</a></li>
                </ul>
            </nav>

        <section id = "main" >
        <div class = "content">
        <h1>Hello!</h1>
        <p>Welocome to The AGH Application for entry with ECTS deficit generator website. We hope that you use it just for fun :)</p>
        </div></section>

        <section id = "generator">
        <div class = "content">
        <h1>Generator</h1>

        </div></section>

        <section id = "about">
        <div class = "content">
        <h1>About</h1>
        <p>This webapge was created as a project for the Web Technologies. The main reason why it exists is that very common among Students is that they want to apply for entry on another term with ECTS deficit. This site will help students and AGH employees by generating PDF application. We hope that everything at AGH will be fast and growing in the future. We want to make our students life BETTER! </p>
        </div></section>

        <section id="contact">
            <div class="content">
                <h1>Contact</h1>
                <p><a class="btn btn-default btn-lg" href="#contact-form">Contact Us</a></p>
                <?php echo $result; ?>
                <p><iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d5122.204450340393!2d19.91387757798398!3d50.065647167696376!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x47165ba756b59b21%3A0xb20c8dba21b317d1!2sAkademia+G%C3%B3rniczo-Hutnicza+im.+Stanis%C5%82awa+Staszica+w+Krakowie!5e0!3m2!1spl!2spl!4v1511628584066" width="500rem" height="500rem" frameborder="0" style="border:0" allowfullscreen></iframe></p>
            </div>
        </section>


        <footer>
           <label class="switch">
       <input type="checkbox"  onchange=" switchTheme(this)">
       <span class="slider"></span>
    </label>
            <p>Copyright©2017 <a href="http://fb.com/marcinkaminskix">Marcin Kamiński</a> for <a href="agh.edu.pl">AGH </a></p>
        </footer>

    <!--SIGN UP-->
        <?php
        if (isset($_POST["send"])) {
            $name = $_POST['name']; //Getting variable from form
            $email = $_POST['email']; //Getting variable from form
            $message = $_POST['message']; //Getting variable from form
            $human = intval($_POST['human']); //Getting variable from form
            $from = 'Generator Contact'; //Set sender
            $to = 'kamykx@gmail.com'; //Where to send an email
            $subject = 'Message from AGH Generator Form'; //Set the subject of email
            $errName = $errEmail = $errMessage = $errHuman = ''; //Values of errors
            $body ="From: $name\n E-Mail: $email\n Message:\n $message"; //Body of email

            //CHECK NAME
            if (empty($name)) {
                $errName = 'Please enter your name';
            }

            //CHECK EMAIL
            if (!filter_var($email, FILTER_VALIDATE_EMAIL) || empty($email)) {
                $errEmail = 'Please enter a valid email address';
            }

            //CHECK MESSAGE
            if (empty($message)) {
                $errMessage = 'Please enter your message';
            }

            //CHECK IF USER IS NOT A BOT
            if ($human !== 2 || $human !=2) {
                $errHuman = 'Please... proof that you are not a bot :>';
            }

            //SEND THE EMAIL IF THERE ARE NO EXISTING ERRORS
            if (empty($errName) && empty($errEmail) && empty($errMessage) && empty($errHuman)) {
                if (mail($to, $subject, $body, $from)) {
                    $result = '<div class="alert alert-success">Thank You! We will be in touch</div>';
                }
                else {
                    $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later</div>';
                }
            }
        }
        ?>

        <div id="contact-form" class="modal-window">
            <div>
                <a href="#modal-close" title="Close" class="modal-close">Close</a>
                <form id="contactForm" role="form" method="post">
                    <div class="form-group">
                        <label for="name">Name</label>
                        <input type="text" class="form-control" id="name" name="name" placeholder="First & Last Name" value="<?php echo htmlspecialchars($_POST['name']); ?>">
                        <p class="text-danger"><?php echo $errName; ?></p>
                    </div>
                    <div class="form-group">
                        <label for="email">Email address</label>
                        <input type="email" class="form-control" id="email" name="email" placeholder="example@domain.com" value="<?php echo htmlspecialchars($_POST['email']); ?>">
                        <p class="text-danger"><?php echo $errEmail; ?></p>
                    </div>
                    <div class="form-group">
                         <label for="message">Message</label>
                         <textarea class="form-control" rows="4" name="message" value="<?php echo htmlspecialchars($_POST['message']);?>"></textarea>
                         <p class="text-danger"><?php echo $errMessage; ?></p>
                    </div>
                   <div class="form-group">
                         <label for="human">1 + 1 = ?</label>
                         <input type="text" class="form-control" id="human" name="human" placeholder="Your Answer">
                         <p class="text-danger"><?php echo $errHuman; ?></p>
                   </div>
                    <button id="send" name="send" type="submit" value="Send" class="btn btn-default btn-lg">Send</button>
                </form>
            </div>
        </div>
        <!--END SIGN UP-->

    </body>
</html>

1 回答

  • 0

    您的问题在于此行的逻辑:

    if (!empty($errName) && !empty($errEmail) && !empty($errMessage) && !empty($errHuman)) {
    

    基本上这是说如果一切都错了,发送电子邮件 . 非空检查表示存在错误,变量现在保存错误字符串 .

    相反,您只需要将变量创建为空字符串并检查它们是否仍为空:

    $errName = $errEmail = $errMessage = $errHuman = '';
    
    // CHECK NAME... etc... all the checks
    
    if (empty($errName) && empty($errEmail) && empty($errMessage) && empty($errHuman)) {
    

    但是,您没有向用户显示错误,而您最终会得到一堆松散的变量 . 我推荐使用一系列错误的略有不同的方法......

    $body = "From: $name\n E-Mail: $email\n Message:\n $message";
    
        $errors = [];
    
        //CHECK NAME
        if (!$name || empty($name)) {
            $errors['name'] = 'Please enter your name';
        }
    
       //CHECK EMAIL
        if (!$email || !filter_var($email, FILTER_VALIDATE_EMAIL) || empty($email)) {
            $errors['email'] = 'Please enter a valid email address';
        }
    
        //etc...
    
        if (empty($errors)) {
            //send email
        } else {
            $result = '<div class="alert alert-danger">Sorry there was an error sending your message:<br>';
            foreach ($errors as $key => $error) {
                $result .= $error . '<br>';
            }
            $result .= '</div>';
        }
    

    但是,如果您在此之后立即调用标头函数,则用户将永远不会看到错误或有机会修复它 . 您可以使用查询字符串将错误发送回head.php并显示它们 .

    (仅供参考,表单的操作会将所有POST数据发送到该文件,如果没有指定操作,则表单会自行发布 . )

相关问题