0

为什么这行不通?

下面的代码在 send.php 上

<?php
  $expire=time()+60*60*24*30;
  $name = $_POST['nameField'];
  setcookie("name", $name, $expire);
?>

cookie 的值为空。为什么?我该如何解决?

新问题:

为什么 $_POST['nameField'] 为空?

<form action="/contact/send.php" method="post" id="contactForm">
<input type="text" id="nameField" name="Name" value="<?php if (isset($_COOKIE["name"])){ echo $_COOKIE["name"];} ?>" class="extra_large" />
<input type="submit" class="submit" name="Submit" value="   Send   " />
4

5 回答 5

1
<input type="text" id="nameField" name="Name"

此输入的名称也必须是nameField

<input type="text" id="nameField" name="nameField"

$_GET$_POST变量按名称获取表单输入的值。例如$_GET['stack']and$_POST['stack']获取<input name="stack">的值。

于 2011-01-26T15:55:58.553 回答
0

在 HTML 中你应该写 name="nameField",name 是发布值的名称而不是 id,如果是这样,上面的代码似乎工作正常

于 2011-01-26T15:57:02.387 回答
0

表单字段的名称是'Name',id 是'nameField'。因此,您需要使用

$name = $_POST['Name'];

或将输入上的名称更改为 nameField

于 2011-01-26T15:57:38.753 回答
0

关于 cookie:cookie 只会在下一页加载时生效。因此,如果您设置了 cookie,则在加载另一个页面之前,您无法引用或使用该 cookie。这只是它们工作方式的怪癖之一。

关于 POST:您需要使用 $_POST['name_attribute'] 而不是 ID

于 2011-01-26T15:58:04.290 回答
0

你怎么知道它不起作用?

Cookies(以及 $_COOKIE)在下一个页面加载之前不会被设置- 在客户端发送包含 cookie 的请求之前,它必须将设置 cookie 的标头返回给客户端。

因此将有一个对该脚本的 HTTP 请求,它将返回标头以设置名称 cookie 以及任何输出,并且只会是获取(并填充 $_COOKIE)名称 cookie 的下一页。

此外,如前所述,$_POST[] 引用表单元素的名称属性。您的文本框需要有 name='nameField',而不仅仅是 id。

于 2011-01-26T15:58:25.477 回答