从PHP表单中获取cookie值

4

我该如何设置cookie的名称和值,以便用户可以在表单中输入该值?我要怎样才能在第二个页面上显示出这个cookie的值?(尽管可能有更聪明的方法来实现这个功能,但我仍然想知道如何使用cookie完成它!)谢谢!

<?php
setcookie($color, 'color');
setcookie($name, 'name');
?>

<?php
echo "<form action=\"form_data.php\" method=\"post\">";
echo "favorite color:<input type=\"text\" name=\"color\" size=\"20\"><br/>";
echo "name:<input type=\"text\" name=\"name\" size=\"20\"><br/>";
echo "<input type=\"submit\" value=\"Submit\" />";
echo "<br /><input type=\"hidden\" name=\"submitted\" value=\"true\" />";
?>

表单数据的数据:

  <?php
  echo "<b>fav color:</b>".$_COOKIE['color'];
  echo "<b>name:</b>".$_COOKIE['name'];
  ?>
4个回答

5

首先,你有一个表单:

<?php
echo "<form action=\"form_data.php\" method=\"post\">";
echo "favorite color:<input type=\"text\" name=\"color\" size=\"20\"><br/>";
echo "name:<input type=\"text\" name=\"name\" size=\"20\"><br/>";
echo "<input type=\"submit\" value=\"Submit\" />";
echo "<br /><input type=\"hidden\" name=\"submitted\" value=\"true\" />";
?>

然后在 form_data.php 文件中:

<?php
// set the cookie with the submitted user data
setcookie('color',$_POST['color']);
setcookie('name', $_POST['name']);
echo "<b>fav color:</b>".$_COOKIE['color'];
echo "<b>name:</b>".$_COOKIE['name'];
?>

然而,您会注意到 $_COOKIE 变量尚不可用... 如果您重新加载该页面,它们将出现。

为了适应 cookie 的这种行为,您可以在 form_data.php 中设置重定向:

<?php 
 if (!empty($_POST)) {
  // set the cookie with the submitted user data
  setcookie('color',$_POST['color']);
  setcookie('name', $_POST['name']);
  // redirect the user to final landing page so cookie info is available
  header("Location:form_data.php");
 } else {
  echo "<b>fav color:</b>".$_COOKIE['color'];
  echo "<b>name:</b>".$_COOKIE['name'];
 }
?>

你可以将它们重定向到任何适当的位置。希望这有所帮助,祝你好运!

2

您的问题涉及setcookie函数失败。

例如:

setcookie('color', 'red');

echo $_COOKIE['color']; //输出:红色


我该如何让它适用于来自我的表单的未知值呢?这就是我卡住的地方(它真的可以做到吗?!) - Lenn

0

我不知道为什么你要使用cookies。据我所知,你可以使用会话来传递用户信息,像这样: 下面是完整的代码示例,它对我有效:

<?php
session_start();
if(array_key_exists('sub',$_POST))
$_SESSION['name']=$_POST['name'];
?>
<html>
<form  method="post">
<input type='text' name="name">
<input type='submit' name='sub' value='send my info'>
</html>

在另一个页面中只需使用这个:

<?php
session_start();
$r=$_SESSION['name'];
echo $r;
?>

记得在每个需要使用会话的页面上调用session_start();


他们特别询问了关于cookies的问题,我认为他们有充分的理由。你的代码更常见,当然。 - baraboom
当我们必须连接服务器并且服务器必须对我们进行身份验证时,必须使用cookie,因为HTTP是无状态的,需要cookie。我无法理解这种坚持。以亚马逊为例,它使用cookie存储用户信息并了解每个用户。Nguyen只是说了填写表格,没有其他内容。 - Nickool

0

有人能解释一下baraboom写的内容吗:

然而,你会注意到$_COOKIE变量还不可用...如果你重新加载页面,它们就会出现。

<?php 
 if (!empty($_POST)) {
  // set the cookie with the submitted user data
  setcookie('color',$_POST['color']);
  setcookie('name', $_POST['name']);
  // redirect the user to final landing page so cookie info is available
  header("Location:form_data.php");
 } else {
  echo "<b>fav color:</b>".$_COOKIE['color'];
  echo "<b>name:</b>".$_COOKIE['name'];
 }
?>

只是想弄清楚为什么在提交后用户会被重定向到该页面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接