我最近一直试图在我的网站上进行一些修改。基本登录的用户可以将游戏添加到他们喜欢的游戏中,而未登录的访问者将被定向到注册页面。
虽然我认为我可以尝试使用我的PHP一点点,并使访问者也可以将游戏添加到他们的收藏夹中。 (游戏是flash游戏)
所以我创建了这个允许用户点击图像的JS脚本,这个脚本检查cookie是否已经存在,如果没有,它会添加它,如果它确实存在,它将删除cookie(图像)从“添加到收藏夹”更改为“从收藏夹中删除”
由于可以有许多不同的收藏游戏,我不能使用简单的cookie名称,所以我将其设置为:xx1200 = set(所以有2个x,然后是游戏ID,它会产生cookie标题,然后“set”是cookie的值。所有收藏的游戏都会有相同的值,但名称不同,就是他们的ID,前面是xx。
现在要在另一个页面上打印cookie,显示他们喜欢的游戏,我在页面上添加了PHP,所以基本上得到了cookie,但是我的问题存在:如何通过其值获取cookie名称(通常你会打印{ {1}}但现在我的Cookie名称发生了变化。
我使用$_COOKIE["set"];
来打印整个cookie,我在数组中看到了print_r($_COOKIE);
,但我无法弄清楚如何获取ID(上例中为800)然后获取对应于给定ID的游戏。
任何帮助将不胜感激!谢谢你:))
这是我现在的代码,过去几个小时都在处理和关闭,现在它确实工作正常,我没有添加PHP,只是javascript。
我唯一的问题是,当我尝试删除1个条目时,它会删除整个cookie,所以我似乎无法找到修复它的位置。 另一个问题是从数组中获取ID,如果有人可以帮助我,那将不胜感激。
这是我的代码:
[zz800] => set
我现在使用$ globalCookie替代我的游戏ID。
再次感谢您的帮助!
以上制作的cookie也是如此:
<?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>
我发现只有这样才能使用explode(),因为如果逗号位于数字之后,则不会计算第一个
答案 0 :(得分:3)
您应该以不同的方式存储Cookie信息,如下所示的逗号分隔的游戏ID列表:
games=123,345,641
您可以使用这样的内容来解析&amp;访问数据:
$games = explode(',', $_COOKIE['games'];
foreach( $games as $game_id ){
echo $game_id;
}
它为您提供了一系列用户喜欢的游戏ID。
由于您将只使用一个cookie存储受欢迎的游戏,因此作为用户收藏/不喜欢的游戏,您需要编写代码来实现以下(在Javascript中):
当用户收藏/不喜欢游戏时
对于键控值,确实需要一个已知的键。其他任何事情都是毫无意义的。在您的问题中,您拥有要存储在cookie中的信息,该信息可以包含任意数量的值。将这些值存储/发送为分隔列表要好于将每个值作为关键字粘贴到cookie中。幸运的是,您的数据(数字ID)很适合这种方法。
答案 1 :(得分:0)
如果您想扫描Cookie并获取游戏ID,可以尝试:
foreach ($_COOKIE as $key => $value){
echo("Game ID: ".substr($key,3)." - Status: ".$value);
}
在上面的示例中应输出“游戏ID:800 - 状态:设置”
答案 2 :(得分:0)
在第二个参数上使用array_keys。它与array_search类似,除了它返回一个匹配第二个参数中给出的值的数组,而array_search总是返回第一个匹配。
<?
//example data
$_COOKIE = array(
'zz800' => 'set',
'zz801' => 'set',
'zz802' => 'set',
'yz800' => 'test'
);
print_r(array_keys($_COOKIE, 'set'));
//result
array('zz800', 'zz801', 'zz802');
?>
答案 3 :(得分:-1)
如果您希望这样做,您需要进行数组搜索。
var_dump( array_search('set', $_COOKIE) );
我认为实现它是一个相当不错的主意,但说实话!