2011-12-26 95 views
0

我在尝试通过while loop中的foreach loop设置这些cookie时出现错误。我得到的错误是.... Notice: A non well formed numeric value encountered in
PHP脚本:设置cookie通过循环内部的foreach循环

while($row = mysql_fetch_array($sql)){ 
      $path = "/"; 
      $expire = time() + 2592000; 
      $expire = date("Y-m-d h:i:s",$expire); 
      $c = array(
      md5('id')=>$row['id'], 
      md5('name')=>$row['u'], 
      md5('sex')=>$row['s'], 
      md5('country')=>$row['co'], 
      md5('state')=>$row['st'], 
      md5('city')=>$row['ci'], 
      md5('timezone')=>$row['ti'] 
      ); 
      foreach($c as $name=>$value){ 
       setcookie($name,$value,$expire,$path); 
      } 
      echo "Logging you in! <img src=\"source/image/50gl.gif\"><br>"; 
     } 
+3

你在哪一行得到错误? – 2011-12-26 18:37:16

+0

我解决了这个问题,感谢他从我的格式化时间戳,我只是总是假设你可以把任何日期放在时间戳(格式化或不)中,但显然你不能! :) – 2011-12-26 18:43:44

+0

为什么你md5加密cookie数据名称? – Gajus 2011-12-26 18:50:03

回答

4

$expire有望成为一个int。你有一个字符串。这条线是不必要的,问题的原因:

$expire = date("Y-m-d h:i:s",$expire); 

http://us3.php.net/setcookie

您可能会注意到到期参数发生在一个Unix时间戳,而不是日期格式WDY,DD-星期一到YYYY HH:MM:SS GMT,这是因为PHP在内部执行此转换。

0

setCookie()的第三个参数“expire”需要一个整数,但是您证明了日期字符串。 这是一个Unix时间戳,因此距离该时代以秒为单位。 因此,评论 // $ expire = date(“Y-m-d h:i:s”,$ expire);

它会很好的工作。