从我最喜欢的列表中删除一个页面。 (PHP)

时间:2011-08-17 08:20:43

标签: php list

我的朋友创建了一个网站,可以将页面添加到用户收藏列表中。但最近我有很多抱怨从收藏列表中删除一个页面...看起来代码有错误,有时添加页面而不是删除页面。

更多解释:每个页面都有一定的ID,因此在向收藏夹添加内容时会添加ID号,然后将逗号分隔开其他数字。从收藏夹删除页面同样的事情..它搜索数字并删除它...但有时它不会!我不知道为什么......它告诉我“页面被成功删除”但我没有看到它被删除,有时它会返回我之前删除的一些旧页面!请你查一下代码..

这是代码

if($_REQUEST['do'] == 'delfav')
{
    $mn_Id = safe($_REQUEST['mn_Id'],true);
    $page  = 'favorite';
    if(isset($mn_Id))
    {
        $fav = explode(',' , $_SESSION['user']['Favorites']);
        if(in_array($mn_Id,$fav))
        {
            echo $ind = array_search($mn_Id , $fav);
            unset($fav[$ind]);
            $new = implode(',' , $fav);
            $ss = $db->query("UPDATE users SET Favorites = '".$new."' WHERE Id = '".$_SESSION['user']['Id']."' ");
            if($ss)
            {
                $msg = 'the page was successfully deleted';
            }
            else
            {
                $msg = 'error occurred please try again later';
            }
        }
        else
        {
            $msg = 'This page is not in your favorite list';
        }
    }
}

2 个答案:

答案 0 :(得分:5)

如果您无法更改与数据库相关的代码,则可以使用以下代码进行测试:

(...)

if(isset($mn_Id))
{
    $fav = explode(',' , $_SESSION['user']['Favorites']);
    if(in_array($mn_Id,$fav))
    {
        $fav = array_diff($fav, array($mn_Id));
        $new = implode(',' , $fav);
        $ss = $db->query("UPDATE users SET Favorites = '".$new."' WHERE Id = '".$_SESSION['user']['Id']."' ");

(...)

改变的地方取代了这个:

echo $ind = array_search($mn_Id , $fav);
unset($fav[$ind]);

为此:

$fav = array_diff($fav, array($mn_Id));

答案 1 :(得分:1)

根据我之前的经验 - 正如phresenel所说 - 避免在你的表中使用CSV。我不知道你的列表的长度,但我已经设法多次打破PHP字符串。如果你想保留你的CSV(这是你的 funeral 网站),请检查unset是否真正取消了所需的变量(在之前和之后回显列表)。 但是如果你想改进它,我建议使用一个单独的表来收藏;一个只有两列的表,一个用于使用的id,另一个用于喜欢的网站(四个条目列表将转换为四个记录 - 每个记录具有相同的用户ID)。要删除只搜索用户ID和网站,如果找到则删除该行。要添加,只需添加一个新行。请注意,这是一种非常简化的方法,可能违反了几种数据库最佳实践。