如何使用 php 管理 cookie


How to manage cookies with php

我在一个名为 reservation 的页面中设置了两个 cookie.php在那里我通过$POST方法读取两个输入的内容,

if (isset($_POST['chambre']) && isset($_POST['option_chambre'])  )
{
setcookie('preference',$_POST['option_chambre'],time()+3600*24*31,"http://127.0.0.1/partie_3_f/accueil.php",null, false, true);
setcookie('type',$_POST['chambre'],time()+3600*24*31,"http://127.0.0.1/partie_3_f/accueil.php",null, false, true);       
}

然后在其他页面中,我尝试检查数据库并显示结果,其中两个列的值将与 cookie 中储存的值具有相同的值

<?php 
{
$con = mysqli_connect('localhost','root','root','pdxhotel');
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$type=$_COOKIE['type'];
$pre = $_COOKIE['preference'];
$soal = $con->query("select * from chambre where vide = 1 and   type_chambre='".$type."' and preference = '".$pre."'");
if (mysqli_num_rows($soal)==0)
{
    echo "pas de chambre disponible";
}
else
{ 
?>
<div id="titres" align="center">
<label >----------------------------</label>
<h2 id="tit"> Resultat de recherche </h2>
<label >----------------------------</label>
</div>
<?php 
for ($i = 0; $i<mysqli_num_rows($soal); $i++)
{
?>
    <div id="offre1" class="offre">
    <img src="Images/chambre3.jpg" width="100%" height="50%" />
    <p  > <?php echo "Chambre de type",$_COOKIE['type'],"and qui vérifie la condition:",$_COOKIE['preference']?> </p>
 </div>
<?php
}
}             
}   
?>

我遇到了问题 注意:数组到字符串的转换!这是我第一次使用cookie,你能告诉我出了什么问题,我该怎么办?

$_SERVER['HTTP_COOKIE']的内容是这个问题的关键:

"PHPSESSID=vmejgnbc0ptq893eo7fei9sgc7; preference[$id]=1; type[$id]=a; preference=1; type=a"
  • PHPSESSID:这是你的PHP会话ID,这很好

  • 首选项=1; type=a:这些是你的代码在OP中设置的cookie,因为它们的键是用纯文本设置的。

  • 首选项 [$id]=1; type[$id]=a:这些键会导致问题。首先,这些似乎是偏好和类型的重复,更大的问题是它们的名字中有一个[$id]。当 php 将 cookie 字符串解析为 $_COOKIE 数组时,这些值被解释为数组本身,并以 $i 作为其键。当您尝试读取首选项并将键键入为字符串以将其值插入 sql 查询字符串时,您会收到"注意:数组到字符串的转换"消息。

由于我们无法调试您的代码,因此我们无法确定这些重复和不正确的密钥来自何处。我的第一个猜测是这些cookie是早期测试的残余物。尝试在用于测试的浏览器中删除它们。如果它们再次出现,则需要调试代码并建立设置其他 cookie 的位置。

我的另一个建议是检查您是否可以使用会话或在 url 中获取参数,而不是 cookie 来传递这些变量。