这个简单的html/PHP表单有什么问题?它在本地测试时工作,但在实际服务器上失败



我想添加一个"发送消息"的形式到现有的网站。我找到了这个教程:

PHP Contact Form

我回顾了教程中的代码,了解了它是如何工作的,然后编写了它。我启动并运行了它,它通过了我所有的测试,在我的PC上本地运行。

然后我把它作为现有网站的一部分放在服务器上。它失败了。单击Submit按钮将清除屏幕,窗体将消失在视图中。没有错误消息。没有。

XAMPP和实际服务器都运行PHP版本8.1.12。

在这行PHP代码中失败:header('Location: contact.php', true, 303);

我花了相当多的时间调试它,学习更多关于PHP的知识,遵循这里的Stack Overflow的建议,并且我阅读了关于函数header()的PHP文档。我参加了两个LinkedIn学习PHP的课程。我不知道出了什么问题。

然后我把这个问题简化成这个简单的代码,使它尽可能简单,一个只有提交按钮的表单。它和完整的表单有同样的问题。

下面是我的测试代码:
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Contact</title>
</head>
<?php
session_start();
$request_method = strtoupper($_SERVER['REQUEST_METHOD']);
if ($request_method === 'GET'){
?><form action="for_stack_overflow.php" method="post">
<button type="submit">Send Message</button>
</form>
<?php
}
elseif ($request_method === 'POST'){
header('Location: for_stack_overflow.php', true, 303);
exit; 
}
?></html>

这个简单的html/php代码有我的完整的表单相同的问题:在点击提交按钮,屏幕被清除,表单,只有一个按钮,消失了。

我故意删除了所有缩进,因为我了解到一个常见的问题是看不见的空白会导致PHP函数header()失败。

这个程序(和我的完整表格):

  1. 在本地PC上测试时工作完美;
  2. 在真实服务器上运行时失败,在我的网站托管帐户上。

为了解决这个问题,我已经用尽了所有的方法。

怎么了?会出什么问题呢?我不明白的是什么?

header()session_start()调用移到HTML输出之前。

<?php session_start();
...
?>
<!doctype html>
...

裁判:https://www.php.net/manual/en/function.header.php

请记住,header()必须在任何实际输出之前调用可以通过普通的HTML标签,文件中的空白行或PHP发送。

裁判:https://www.php.net/manual/en/function.session-start.php

注意:

To use cookie-based sessions, session_start() must be called before outputting anything to the browser.

相关内容

  • 没有找到相关文章

最新更新