为什么我的联系表 PHP 脚本不起作用?没有错误日志

Why is my contact form PHP script not working? No error log

我没有收到任何错误。我以前经常遇到 Undefined index/variable 错误,但我用 isset() 修复了它。我填写表格并点击提交,但除了空白屏幕外什么也没有显示。

这是我的 PHP 代码:

    <?php 


    $name = isset($_POST['name']) ? $_POST['name'] : '';
    $email = isset($_POST['email']) ? $_POST['email'] : '';
    $message = isset($_POST['message']) ? $_POST['message'] : '';   
    $from = 'From: ContactForm'; 
    $to = 'email@email.com'; 
    $subject = 'Hello';
    $verify = $_POST['verify'];

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

    if (isset($_POST["submit"]) && $verify == '4') {
        if (mail ($name, $email, $message)) { 
            echo '<p>Your message has been sent!</p>';
         } 

        else { 
            echo '<p>Something went wrong, go back and try again!</p>'; 
         }
      }    
        else if (isset($_POST["submit"]) && verify != '4') {
            echo '<p>You answered the anti-spam question incorrectly!</p>';
         }

?>

这是我的 HTML 代码:

          <form action="pages/mail.php" method="post">

                        <div class="col-md-12">
                            <div class="form-group">
                                <label for="name" class="sr-only">Name</label>
                                <input placeholder="Name" id="name" type="text" class="form-control input-lg">
                            </div>  
                        </div>

                        <div class="col-md-12">
                            <div class="form-group">
                                <label for="email" class="sr-only">Email</label>
                                <input placeholder="Email" id="email" type="text" class="form-control input-lg">
                            </div>  
                        </div>

                        <div class="col-md-12">
                            <div class="form-group">
                                <label for="message" class="sr-only">Message</label>
                                <textarea placeholder="Message" id="message" class="form-control input-lg" rows="3"></textarea>
                            </div>  
                        </div>

                        <div class="col-md-12">
                            <div class="form-group">
                                <input id="submit" type="submit" class="btn btn-primary btn-lg " value="Send">
                            </div>  
                        </div>

                        <div class="col-md-12">
                            <div class="form-group">
                            <label for="verify" class="sr-only">Verify</label>
                            <input name="verify" placeholder="What is 2+2" class="form-control input-lg">
                            </div>
                        </div>
                    </form> 

打开在开发过程中显示 PHP 错误和警告,这样您就可以准确地看到哪里出了问题。

邮件函数调用缺少收件人地址($to),因此无论如何都无法发送电子邮件。

但是脚本执行中断,因为您在 else if 之前有一个额外的 }。如果您启用了所有错误消息,您将得到类似 Fatal error: syntax error: Unexpected T_ELSE at line xy.

的内容

白屏通常表示内部或语法错误

PHP,与 JavaScript 不同,它不会让您错过分号或大括号。首先,在继续修复逻辑之前,请确保您的代码在语法上是有效的并且没有拼写错误。在大多数情况下,可以通过在 PHP 文件的顶部包含以下行来显示错误:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

找到并修复这些错误后,表单本身不起作用的原因如下:

输入需要由其 name 属性引用

虽然设置输入元素的 ID 是一种很好的做法,但您的 PHP 脚本并不知道它们。您需要为您的输入字段提供一个 name 属性,其值与您在服务器端期望的值相同。

这意味着如果您有以下 HTML 表格并输入

<form action="whatever.php" method="POST">
  <input type="text" name="my_text_input">
</form>

您可以像这样在whatever.php的服务器端访问它

<?php

$myTextBoxValue = $_POST['my_text_input'];

?>

希望对您有所帮助!

您的 input 没有 name 属性,因此那里没有 "submit" 键,您的 none 具有 echo 的条件被调用(没有错误的白页)。