【问题标题】:Why do I get a blank white screen when my form is submitted?为什么我在提交表单时会出现空白屏幕?
【发布时间】:2022-06-26 03:52:47
【问题描述】:

我正在创建一个使用引导 HTML 框架和 PHP 来验证表单字段并将数据发送到电子邮件的联系表单。我刚刚问了一个问题,为什么当我点击提交按钮时会出现 404 错误,通过更改我的操作和方法元素周围的一些错误引号来解决这个问题。在更改了这些并修复了几个 PHP 代码错误之后,我的表单现在将我带到按钮提交时的空白屏幕(地址栏显示为 myexamplewebsite.com/php/contact-form.php),我已经尝试找到解决这个问题的方法,因为它看起来很常见但未能成功解决我自己的问题。有关更多信息,我通过 NameCheap 托管我的网站,并一直在使用 cPanel 上传所有网络资产。我目前将我的索引文件保存为 HTML,但在观看了许多 youtube 视频后,我想知道是否需要将其更改为 .php 扩展名才能使表单正常工作。最后,在我发布我的代码之前,我还没有尝试将 invalid_class_name 添加到我的代码中。

我的 HTML:

    <form name="contact_form" action="php/contact-form.php" method="POST" class="row g-4">
            <div class="col-md-6">
              <label for="first-name" class="form-label">First Name</label>
              <input type="text" name="first-name" class="form-control" id="first-name" placeholder="John" required>
            </div>
            <div class="col-md-6">
              <label for="last-name" class="form-label">Last Name</label>
              <input type="text" name="last-name" class="form-control" id="last-name" placeholder="Smith" required>
            </div>
            <div class="col-md-6">
              <label for="email" class="form-label">Email</label>
              <input type="email" name="email" class="form-control" id="email-address" required>
            </div>
            <div class="col-md-12">
              <label for="notes" class="form-label">Notes</label>
              <textarea class="form-control" name="notes" id="notes" rows="4" placeholder="Include any additional information"></textarea>
            </div>
            <div class="col-12">
              <button id="btnsubmit" type="submit" name="btnsubmit" class="pcs-cta-button form-submit-button">Submit</button>
            </div>
          </form>

我的 PHP:

    <?php
    $message_sent = false;
    if (isset($_POST['email']) && $_POST['email'] != '') {

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

            //submit the form
            $userFirstName = $_POST['first-name'];
            $userLastName = $_POST['last-name'];
            $userEmail = $_POST['email'];
            $message = $_POST['notes'];
            $messageSubject = "New Concrete Job";

            $to = "myemail@gmail.com";
            $body = "";

            $body .= "From: ".$userFirstName." ".$userLastName. "\r\n";
            $body .= "Email: ".$userEmail. "\r\n";
            $body .= "Notes: ".$message. "\r\n";

            mail($to,$messageSubject, $body);

            $message_sent = true;
        }
        else {
            $invalid_class_name = "form-invalid";
        }
    }
?>

如果有人对让表单与 NameCheap/cPanel 一起使用有任何提示,我将不胜感激!

【问题讨论】:

  • 如果文件中有 PHP 代码,那么是的,扩展名应该是 .php。是否所有验证都在同一页面上,并且表单是否应该发布给自己?我的猜测是您的action 中的路径不正确,请尝试完全删除该操作 if 表单应该发布给自己。或者你的 PHP 中有语法错误,你应该检查 php 错误日志。
  • 你好 Andrew,基本上我的表单包含在我的 index.html 文件中。在该表单的操作中,我有我的 /php/contact-form.php,这是存储上述 PHP 代码的位置。在我从中获取的示例中,他们将带有表单的文件保存为 PHP 扩展文件,并且有额外的 PHP 代码在消息发送时发送确认消息。我可以将我的索引文件保留为 HTML 扩展名吗?或者我应该使用 PHP 扩展名重命名它并告诉我的网站托管寻找 .PHP 版本?
  • 我不确定你的整个 index.html 文件是什么样的,但如果里面有 PHP,你会想要将扩展名更改为 .php 并告诉网站寻找.php 版本(您可以在 .htaccess 文件中执行此操作)。请添加更多信息和上下文。你得到php错误吗?电子邮件是否发送?发送电子邮件后,您是否尝试重定向回 index.html
  • 问题:现在您提交数据时出现了一个空白页 --- 但是您收到邮件了吗?
  • 如你所愿,只需将if ($message_sent) { echo "Thank you for your information"; }这一行添加到你的php文件末尾

标签: php html css forms


【解决方案1】:

如果您的索引页面包含一些 php 代码,那么您必须将扩展名更改为“.php”。

无论哪种方式,您都可能需要添加

//previous codes

mail($to,$messageSubject, $body);

$message_sent = true;

header('Location: index.php');

(或.html)重定向回索引页

【讨论】: