表单提交返回空白页

Form submission returns blank page

提问人:High T 提问时间:10/16/2023 更新时间:10/16/2023 访问量:36

问:

到目前为止,我有一个联系表格,效果很好。但是,由于我在网站上创建了一个php路由器,在提交表单后,虽然它重定向到操作站点(thank-you.php),但站点的内容只是一个空白页面(正文中没有HTML内容,我用开发工具检查了),并且消息没有到达相应的电子邮件地址。如果我在表单提交页面上var_dump $_POST 变量,则不会显示任何值。

我怀疑问题与路由器有关。作为测试,我在每个路由之前放置了一个“打印”PHP命令,其中包含一个按升序排列的数字。我将感谢页面(表单提交页面)直接放在索引页面之后,以排除代码是否卡在其他路由上。奇怪的是,虽然每个子页面只打印出给定页面在路由器中的位置的数字,但感谢页面打印出所有数字,即那些只会在队列中紧随其后的号码......如果能在这个问题上得到一些帮助,我将不胜感激。先谢谢你。

HTML(表单):

                <form class="contact-form" method="POST" action="/thank-you">

                    <input type="text" id="website" name="website" />

                    <div class="contact-wrapper name">
                        <label for="name">
                            <?php echo $lang["contact-name"] ?>
                        </label>
                        <input type="text" id="name" name="name" placeholder="<?php echo $lang['name-placeholder'] ?>" required>
                    </div>
                    <div class="contact-wrapper email-and-phone">
                        <div>
                            <label for="email">E-mail</label>
                            <input type="text" id="email" name="email" placeholder="<?php echo $lang['email-placeholder'] ?>" required>
                        </div>

                        <div>
                            <label for="telephone">
                                <?php echo $lang["contact-telephone"] ?>
                            </label>
                            <input type="text" id="telephone" name="telephone" placeholder="<?php echo $lang['telephone-placeholder'] ?>">
                        </div>
                    </div>
                    <div class="contact-wrapper subject">
                        <label for="subject">
                            <?php echo $lang["contact-subject"] ?>
                        </label>
                        <input type="text" id="subject" name="subject" placeholder="<?php echo $lang['subject-placeholder'] ?>" required>
                    </div>

                    <div class="contact-wrapper message">
                        <label for="message">
                            <?php echo $lang["contact-message"] ?>
                        </label>
                        <textarea id="message" name="message" placeholder="<?php echo $lang['message-placeholder'] ?>" style="height:200px" required></textarea>
                    </div>
                    <input type="submit" id="submit" name="submit" value="<?php echo $lang['contact-submit'] ?>">
                </form>

PHP(表单提交页面):

<?php

// exit if accessed directly.
defined('ABSPATH') || die(header('location: /home'));

if (isset($_POST['submit']) && $_POST['submit'] != '' && $_POST['submit'] != null) {

    $name = $_POST['name'];
    $mailFrom = $_POST['email'];
    $telephone = $_POST['telephone'];
    $subject = $_POST['subject'];
    $message = $_POST['message'];

    $mailTo = "[email protected]";
    $txt = "You have received an e-mail from " . $name . ".\n\n" . "E-mail: " . $mailFrom . ".\n\n" . "Telephone: " . $telephone . ".\n\n" . $message;

    mail($mailTo, $subject, $txt);
}
?>

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset='UTF-8' />
    <title>Thank you!</title>
    <link rel="stylesheet" type="text/css" href="css/style.css">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>

<body>
    <div class="thank-you-wrapper">
        <p>Thank you for reaching out to us. We will get back to you shortly. Please click <a href="/home" style="text-decoration: none; color: #0986d9;">here </a> if you are not redirected within a few seconds.
</p>
    </div>
    <script>
        setTimeout(function() {
            window.location.replace("/home"); // will redirect to main page
        }, 3000); // will call the function after 3 secs.
    </script>
</body>

</html>

PHP(路由器):

<?php

require_once __DIR__ . '/router.php';

// ##################################################
// ##################################################
// ##################################################

// Static GET
// In the URL -> http://localhost

print '1';
// The output -> Index
get('/', 'pages/index.php');

print '2';
// The output -> Thank You
get('/thank-you', 'pages/thank-you.php');

print '3';
// The output -> About
get('/about', 'pages/about.php');

print '4';
// The output -> Services
get('/services', 'pages/services.php');

print '5';
// The output -> Web
get('/web', 'pages/web.php');

print '6';
// The output -> Contact
get('/contact', 'pages/contact.php');
``````````````````````````````````````````````````````
php html 联系表单

评论


答:

1赞 Marcin Orlowski 10/16/2023 #1

路由器定义为:/thank-youGET

get('/thank-you', 'pages/thank-you.php');

当您的表格通过以下方式发送时:POST

<form class="contact-form" method="POST" action="/thank-you">

评论

0赞 High T 10/16/2023
啊,好吧。所以我只是将表单方法更改为 GET?但是,对于敏感数据来说,这不是不安全的吗?
1赞 Marcin Orlowski 10/16/2023
POST 和 GET 都不是安全的或不安全的。安全性应位于传输层 (HTTPS) 中。但我宁愿将路由器更改为使用 POST,因为 GET 会发送查询字符串中的所有数据,您通常不会让用户在 URL 中看到这些数据是浏览器的。
0赞 High T 10/16/2023
W3Schools 表示 GET 不安全,因为表单数据在 URL 中可见 w3schools.com/tags/att_form_method.asp 无论如何,感谢您的建议。
2赞 Marcin Orlowski 10/16/2023
用户在其浏览器的 URL 中看到表单数据的方式是不安全的,并且能够手动编辑和重新发送此类篡改的表单。但它也可以用同样的方式完成。它需要更多的工作和知识,但这可以通过浏览器中的开发工具轻松实现。因此,您希望对大多数表单使用 POST,因为它们通常太大,甚至无法放入浏览器字符串中。但有时您希望用户也将其放在 URL 字符串中,即允许使用此类操作(如过滤、查询等)添加书签。这与真正的安全性无关。它相当 U/XGETPOST
1赞 ADyson 10/16/2023
主要是 GET 如果您将敏感数据(例如个人信息或密码)放入 URL,然后可以由服务器记录或对监视您其他人可见,或者保留在浏览器历史记录中,因为它是 URL 的一部分。POST 数据通常不会发生这种情况,因为它位于请求正文中