【问题标题】:HTML forms that needs to save data with PHP需要用 PHP 保存数据的 HTML 表单
【发布时间】:2015-11-12 10:48:29
【问题描述】:

我正在尝试制作一个表单,其字段将自动从 url 填充。此外,如果用户点击“为我保留座位”,它应该重定向到一个位置,发送电子邮件并保存 cookie。如果用户点击“不感兴趣,谢谢”,它应该将他/她重定向到另一个位置,发送电子邮件并保存 cookie。

现在,我已经有 2 年没有使用 PHP 了,而且我忘记了很多东西。

代码如下:

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
if(isset($_POST['submit'])){
// Fetching variables of the form which travels in URL
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$title = $_POST['positiontitle'];
$company = $_POST['companyname'];
$all = array($firstname, $lastname, $title, $company);
if($firstname !=''&& $lastname !=''&& $title !=''&& $company !='')
{
//  To redirect form on a particular page
header("Location:http://www.example.com");
}
else{
?><span><?php echo "Please fill in all fields!";?></span> <?php
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="noindex, nofollow" />
</head>
<body>
 <form class="conf-form" method="POST">
    <legend>Please input your information:</legend><br />
    First name:<br>
    <input class="fst-name" type="text" name="firstname" value="First Name">
    <br><br />
    Last name:<br>
    <input class="lst-name" type="text" name="lastname" value="Last Name">
    <br /><br />
    Position title:<br />
    <input class"pos-title" type="text" name="positiontitle" value="Position Title"/>
    <br /> <br />
    Company name:<br />
    <input class="cmp-name" type="text" name="companyname" value="Company Name"/>
    <br /><br />
    <input id="save-me" type="submit" value="Save me a seat" name="submit">&nbsp;&nbsp;&nbsp;&nbsp;<input id="not-int" type="submit" value="Not interested, thank you" name="notsubmit">
    <br /><br />
    If you have any comments/questions please let us know here:<br />
    <textarea rows="4" cols="50"></textarea>
</form> 
</body>
</html>

它不会重定向到我想要的地方。首先,我该如何解决这个问题?

【问题讨论】:

  • 到底是什么问题?
  • 我进行了编辑。 :)对不起
  • 我们是否应该假设您引用的 PHP 代码在 includes/redirect.php 中,因此包含在 HTML 文件的底部?

标签: php jquery html forms post


【解决方案1】:

在您已发送内容后无法进行重定向。在您的情况下,您在运行 header() 之前已经拥有 HTML 内容:

请记住,必须在任何实际输出之前调用 header() 通过普通 HTML 标记、文件中的空行或 PHP 发送。 使用 include 或 require 读取代码是一个非常常见的错误, 函数或其他文件访问函数,并且有空格或空 在调用 header() 之前输出的行。同样的问题 使用单个 PHP/HTML 文件时存在。

应该触发错误,但您可能已关闭错误报告。要打开错误报告,您需要在每次运行的主 PHP 文件的顶部包含以下内容:

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

这将在开发时节省您的时间。

要解决您的确切问题,您需要将 PHP 包含文件移到 HTML 内容上方。

【讨论】:

  • 如果您还记得网页的生命周期,PHP 代码应该几乎总是位于文件的顶部并包含一个测试,因此它仅在发生某些操作(按下按钮)时运行.
  • 什么都没有发生?你知道这无济于事。您是否已将所有 PHP 移至 HTML 之上?您是否开启了错误报告?
  • 对不起,我很着急。道歉。请查看已编辑的问题。
  • 是的,将 PHP 移到文件的 顶部。它应该高于一切。这包括htmldoctypehead。此外,将错误报告代码移到所有其他 PHP 代码之上。
  • 我做到了。现在当我点击“提交”时,我只得到这个路径:localhost/…
【解决方案2】:

您的 PHP 代码没有运行。 form 的默认方法是 get,在您的代码中,您尝试从永远不会发送的 HTTP POST 中获取一些东西。

要解决这个问题,您应该更改表单method 属性,或者将您的PHP 更改为使用$_GET。我建议将method='post' 添加到您的表单标签中。有关更多信息,请查看 PHP.net 上的这两个页面,$_POST$_GET

对于您在问题中描述的内容

我正在尝试制作一个表单,其字段将自动从 url 填充。

也许get 对你来说会更有趣。

接下来,为什么会有这个代码:

If you have any comments/questions please let us know here:<br />
<textarea rows="4" cols="50"></textarea>

如果您仍然不使用它。如果您要使用它,那么您应该使用post 作为您的表单方法,因为 url(以及get)对其大小有限制。无论哪种方式,您都可能希望向此文本区域添加 name 属性。

回顾

  1. 将您的form method 更改为post,或将您的PHP 代码更改为$_GET
  2. name 属性添加到您的textarea 以便您的代码可以访问它而不是无用

【讨论】:

    猜你喜欢
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    相关资源
    最近更新 更多