-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."));

より良い解決策

より適切でユーザー フレンドリーな解決策は、ユーザーが既にお気に入りであるかどうかに応じてページを異なる方法でレンダリングし、追加用と削除用の 2 つの異なるリンクを作成することです。ページを変更しないことにした場合でも、2 つの異なるリンクを持つことができます。いくつかの疑似コードは次のようになります

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 に答える