【发布时间】:2011-02-01 10:57:16
【问题描述】:
我最近一直在尝试在我的网站上进行这个小修改。基本上已登录的用户可以将游戏添加到自己的收藏中,未登录的访问者将被引导到注册页面。
虽然我认为我可以尝试在我的 PHP 上做一些工作,让访问者也可以将游戏添加到他们的收藏夹中。 (游戏是 Flash 游戏)
所以我制作了这个 JS 脚本,它允许用户点击图片,这个脚本检查 cookie 是否已经存在,如果不存在,它会添加它,如果它确实存在,它将删除 cookie(一张图片从“添加到收藏夹”更改为“从收藏夹中删除”
由于可以有很多不同的收藏游戏,我不能使用简单的 cookie 名称,所以我这样设置:xx1200=set(所以有 2 个 x,然后是构成 cookie 标题的游戏 id,然后"set" 是 cookie 值。所有收藏的游戏将具有相同的值,但名称不同,即它们的 ID,前面带有 xx。
现在要在另一个页面上打印 cookie,显示他们最喜欢的游戏,我在一个页面上添加了 PHP,所以基本上得到了 cookie,但是我的问题是:如何通过值获取 cookie 名称(通常你会打印 @ 987654321@ 但现在我的 cookie 名称更改了。
我使用print_r($_COOKIE); 打印整个cookie,我在数组中看到我的[zz800] => set,但我不知道如何获取ID(在上面的示例中为800)然后获取游戏(s ) 对应于给定的 ID。
任何帮助将不胜感激!谢谢你:)
更新:
这是我现在拥有的代码,过去几个小时一直在工作和关闭,现在它工作正常,我没有添加 PHP,只是添加了 javascript。
我唯一的问题是,当我尝试删除 1 个条目时,它会删除整个 cookie,所以我似乎找不到修复的地方。 另一个问题是将 ID 从数组中取出,如果有人可以帮助我,将不胜感激。
这是我的代码:
<?php
$globalCookie = '629';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
<script>
function createCookie(value)
{
if(document.cookie.search(value)==-1){
if(document.cookie.indexOf('games') == -1) {
document.cookie = 'games' + '=' + ',' + value + '; expires=Fri, 27 Jul 2011 02:47:11 UTC; path=/';
} else {
var deagle = document.cookie;
document.cookie = deagle + ',' + value + '; expires=Fri, 27 Jul 2011 02:47:11 UTC; path=/';
}
} else {
// Removes the cookie (making the clear cookie problem most probably
document.cookie = 'games' + '=' +escape( value ) + '; expires=Fri, 27 Jul 2001 02:47:11 UTC; path=/';
}
}
</script>
</head>
<body>
<script>
var globalCookie = <?=$globalCookie?>;
</script>
<?php
$stuff = $_COOKIE["games"];
$game = $globalCookie;
$pos = strpos($stuff, $game);
if ($pos === false) { ?>
<a href='javascript:;'><img id="mygame1" src='images/add_mygames.gif' border="0" onClick="createCookie(globalCookie); (this.src=='images/add_mygames.gif')?(this.src='images/remove_mygames.gif'):(this.src='images/add_mygames.gif');"></a>
<?
} else { ?>
<a href='javascript:;'><img id="mygame1" src='images/remove_mygames.gif' border="0" onClick="createCookie(globalCookie); (this.src=='images/remove_mygames.gif')?(this.src='images/add_mygames.gif'):(this.src='images/remove_mygames.gif');"></a>
<?
}
?>
</body>
</html>
我现在使用 $globalCookie 代替我的游戏 ID。
再次感谢您的帮助!
上面制作的cookie看起来像:
games=,621,256,637,57354
我发现使用explode()的唯一方法,因为如果逗号在数字之后,它不会计算第一个
【问题讨论】:
-
没有它的访问者,我已经有一个不同的系统使用我的用户数据库
-
使用 strpos 搜索数据 ini 逗号分隔字符串是个坏主意。例如:games=,621,256,637,57354,你会发现 '21' 会有一个结果,而你知道它的结果应该是 false。解决方法:使用array_search(先用逗号分解)或者使用PCRE。