如何使用php管理cookie

时间:2016-01-19 22:31:32

标签: php mysql database cookies

我在一个名为reservation.php的页面中设置了两个cookie,我通过$ 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
}
}             
}   
?>

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

1 个答案:

答案 0 :(得分:0)

$_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查询字符串时,您会收到“Notice:Array to string conversion”消息。

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

我的另一个建议是检查你是否可以在url中使用session或get参数而不是cookie来传递这些变量。