-1

当单击用户个人资料中的链接时,我正在使用此脚本将用户插入到其他用户的收藏夹中。

目前,用户可以将用户添加到收藏夹,但我希望他们能够再次单击该按钮以将其从收藏夹中删除。

因此,如果条目以某种方式存在,我需要实现删除功能,这就是我卡住的地方。有人可以告诉我哪里出错了。

这是我最初将用户添加到收藏夹的代码:

<?php

require_once('includes/session.php');
require_once('includes/functions.php');
require('includes/_config/connection.php');

session_start();

    confirm_logged_in();

    if (isset ($_GET['to'])) {
    $user_to_id = $_GET['to'];


}


if (!isset($_GET['to']))
    exit('No user specified.');

$user_id = $_GET['to'];

$result = mysql_query("INSERT INTO ptb_favorites (user_id, favorite_id) VALUES (".$_SESSION['user_id'].", ".$user_to_id.")") 
or die(mysql_error());

header($_SERVER['HTTP_REFERER']);

?>

如果条目已经存在,这就是我尝试添加的内容以使其删除:(这给了我语法错误并且不起作用)

<?php

require_once('includes/session.php');
require_once('includes/functions.php');
require('includes/_config/connection.php');

session_start();

    confirm_logged_in();

    if (isset ($_GET['to'])) {
    $user_to_id = $_GET['to'];


}


if (!isset($_GET['to']))
    exit('No user specified.');

$user_id = $_GET['to'];

$result = mysql_query("INSERT INTO ptb_favorites (user_id, favorite_id) VALUES (".$_SESSION['user_id'].", ".$user_to_id.")") 
or die(mysql_error());

if ($insert() === true) {
    $delete = (function () use ($connection, $user_to_id) {
        $sql = "DELETE FROM ptb_favorites WHERE user_id = ? AND favorite_id = ?";
        $statement = $connection->prepare($sql);

        $result = $statement->execute(array(
            $_SESSION['user_id'],
            $user_to_id
        ));

        return $result;
    });

    $delete();
}

header($_SERVER['HTTP_REFERER']);

?>
4

1 回答 1

0

有一些不同的方法可以做到这一点。我将从最快的(而且不是很好的解决方案)开始。

快速解决方案

向 ptb_favorites 上的(user_id, favorite_id)添加一个唯一索引(例如主键)(您可能已经拥有该索引),然后当有人单击该链接时,您将尝试插入,如果您遇到重复的键违规,您将删除。它看起来像这样

mysql_query("INSERT INTO ptb_favorites (user_id, favorite_id) VALUES (".$_SESSION['user_id'].", ".$user_to_id.")") 
or die(mysql_query("DELETE FROM ptb_favorites WHERE user_id = ".$_SESSION['user_id']." AND favorite_id = ".$user_to_id."));

更好的解决方案

更好和更用户友好的解决方案是根据用户是否已经是收藏夹来不同地呈现页面,并创建两个不同的链接,一个用于添加,一个用于删除。即使您决定不更改页面,您也可以拥有两个不同的链接。一些伪代码看起来像这样

if ("select 1 from ptb_favorites where user_id = <my_id> and favorite_id = <page_user_id>") then
  [render delete link and a star in front of user name]
else
  [render add link and just the user name]
end 
于 2012-12-29T08:49:30.270 回答