我正在使用此脚本在点击其个人资料中的链接时将用户插入其他用户收藏夹。
目前,用户可以将用户添加到收藏夹,但我希望他们能够再次点击该按钮将其从收藏夹中删除。
所以我需要实现一个删除,如果条目存在功能以某种方式,那就是我被困住的地方。有人可以告诉我我哪里出错了。
这是我原来的添加用户到收藏夹代码:
<?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']);
?>
答案 0 :(得分: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