【问题标题】:setcookie() PHP not working with variablessetcookie() PHP 不使用变量
【发布时间】:2019-04-28 04:14:02
【问题描述】:

我需要在作业中设置 cookie。当我使用字符串(即setcookie('Name', 'John', time() + 86400))设置它们时,它可以工作,但是当使用PHP 变量时,即setcookie('Name', $name, time() + 86400),cookie 没有设置。

我不确定我做错了什么。我已经在我的页面上回显了 $name 变量,它显示出来了,所以我知道它正在设置。当我使用$_COOKIE['Name'] 显示cookie 时,它​​在收到字符串时有效,但在PHP variable 时无效。

order01.php

<form action="order02.php" class="formLayout">
 <div class="formGroup">
  <label>First name:</label>
  <input type="text" name="fname" class="textbox" autofocus 
  required placeholder="First name" title="first name" 
  maxlength="20" pattern="[A-Za-z'-]{2,20}">
 </div>
 <div class="formGroup">
  <label> Car model:</label>
  <div class="formElements">
   <input type="radio" name="model" required value="Mustang">Ford Mustang<br>
   <input type="radio" name="model" required value="Subaru">Subaru WRX 
STI<br>
   <input type="radio" name="model" required value="Corvette">Corvette<br>
  </div>
 </div>


<?php
 $name = $_GET['fname'];
 $model = $_GET['model'];

 //write cookies for name and model for 1 day
 setcookie('Name', $name, time() + 86400);
 setcookie('Model', $model, time() + 86400);
?>

order02.php

if(isset($_COOKIE['Name'])){
 echo "Cookie ".$_COOKIE['Name']." is set";
}
else{
 echo "<div class='pageContainer'>";
 echo "<h2 class='containerText, centerText'>Failed to validate inputs";
 echo "<br><br>";
 echo "<a href='order01.php'><button>Go Back</button></a>";
 echo "</div>";
 exit();
}

【问题讨论】:

  • 您试图将 fname 输入值输入到 php 变量中,这是错误的。 var_dump($name) 你的 $name 并检查你是否从中获得了任何价值?
  • 我在表单中输入 'bobby' 时执行了 var_dump($name) 并输出了 string(5) "bobby" @MuhammadShareyar

标签: php html cookies


【解决方案1】:

您的代码中存在一些问题,首先,没有关闭 &lt;/form&gt; 标记,其次您必须在 order01.php 上提交您的表单,您将在其中保存您的 cookie,所以试试这个,它会起作用的

Order01.php

<form action="order01.php" class="formLayout">
<div class="formGroup">
 <label>First name:</label>
 <input type="text" name="fname" class="textbox" autofocus 
 required placeholder="First name" title="first name" 
 maxlength="20" pattern="[A-Za-z'-]{2,20}">
</div>
<div class="formGroup">
 <label> Car model:</label>
 <div class="formElements">
  <input type="radio" name="model" required value="Mustang">Ford Mustang<br>
 <input type="radio" name="model" required value="Subaru">Subaru WRX STI<br>
 <input type="radio" name="model" required value="Corvette">Corvette<br>
</div>

 <input type="submit" value="submit">
</div>
</form>

Order02.php

  <?php

 $name = $_GET['fname'];
 $model = $_GET['model'];

 //write cookies for name and model for 1 day
 setcookie('Name', $name, time() + 86400);
 setcookie('Model', $model, time() + 86400);

if(isset($_COOKIE['Name'])){
  echo "Cookie ".$_COOKIE['Name']." is set";
 }
 else{
   echo "<div class='pageContainer'>";
   echo "<h2 class='containerText, centerText'>Failed to validate inputs";
   echo "<br><br>";
   echo "<a href='order01.php'><button>Go Back</button></a>";
   echo "</div>";
   exit();
  }

?>

【讨论】:

  • 我有一个 我只是没有包含它,因为我试图不在我的问题中输入不重要的代码。因此,如果我将操作更改为 order01.php,我如何到达 order02.php?如果我使用字符串,则 cookie 设置正确,因此当 action = "order02.php" 成功设置
  • 您可以做 2 件事,1- 您可以将 cookie 值存储在您的 order02.php 中,2- 您可以按照我的建议将 cookie 值保存在您的 order01.php 中,并在存储 cookie 值之后您可以将其重定向到您的 order02.php 文件
  • 我的 cookie 值正在被保存,只是在我使用 PHP 变量时没有。那是我的问题。
  • 这是因为您没有在 order01.php 上提交表单,如果您想在 order02.php 上提交表单,那么您必须在该文件中设置 cookie,检查我是否已更新代码跨度>
【解决方案2】:

不得在 cookie 行之前输出(echo、print_r() 和 HTML 标签)

您可以在任何输出之前编写 cookie 代码

 <?php
  $name = $_GET['fname'];
  $model = $_GET['model'];

 //write cookies for name and model for 1 day
  setcookie('Name', $name, time() + 86400);
  setcookie('Model', $model, time() + 86400);
       ?>

<form action="order01.php" class="formLayout">
 <div class="formGroup">
  <label>First name:</label>
  <input type="text" name="fname" class="textbox" autofocus required placeholder="First name" title="first name" maxlength="20" pattern="[A-Za-z'-]{2,20}">
</div>
<div class="formGroup">
   <label> Car model:</label>
   <div class="formElements">
    <input type="radio" name="model" required value="Mustang">Ford Mustang<br>
    <input type="radio" name="model" required value="Subaru">Subaru WRX STI<br>
    <input type="radio" name="model" required value="Corvette">Corvette<br>
   </div>

   <input type="submit" value="submit">
  </div>
 </form>

【讨论】:

    猜你喜欢
    • 2010-10-13
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多