0

戻って質問を確認したところ、「作成者によって自発的に削除された」と言われましたが、削除しませんでした。だから、そこで何が起こったのかわからない。だから今、私はそれをもう一度尋ねなければなりません、そして今回はここにとどまることを願っています!

多数の画像を表示する PHP スクリプト ページがあります。ログインしたユーザーが画像の下のリンクをクリックして、画像を「いいね」する(「お気に入り」にする)、またはすでにお気に入りの場合は「いいね」を解除できる方法を設定しています。ユーザーの現在の「好きな状態」は、MySQL データベースに (1 または 0 として) 保存されます。

私のPHPページは、画像レコードを(いくつかのページネーションロジックとともに)ループし、データベースをポーリングして、返された「好きな状態」に従って各画像の下に異なるリンクを出力します. すでに「いいね」された画像にはリンクの 1 つの形式が描画され、「いいね」されていない画像には別の形式が描画されます (それぞれ 2 つの異なる css クラスのいずれかを使用して、視覚的なフィードバックのロールオーバー タイプのアイコンとして表示されます)。

次のようになります。

<?php
$step = 0;
while($row = $statement3->fetch()) {
$step++;
$ThisPhotoID = $row['photoid'];

echo '<img src="images/'.$ThisPhotoID.'.jpg" alt="" />';

echo '<div class="info">';
$statement4 = $db->prepare("SELECT COUNT(*) FROM `likes` WHERE `username` = ? AND `photoid` = ?");
$statement4->execute(array($username, $ThisPhotoID));
    if (!$statement4->fetchColumn() > 0) {
    //Favourite doesn't exist for this user, so invite to "like"...
    echo '<a href="#" id="linkid'.$step.'" title="Click to like this photo" class="like">&nbsp;</a>';
    }
    else {
    //Favourite does exist for this user, so check if already "liked" or not...
    $LikeState = 1;
    $statement5 = $db->prepare("SELECT COUNT(*) FROM `likes` WHERE `username` = ? AND `photoid` = ? AND `likestate` = ?");
    $statement5->execute(array($username, $ThisPhotoID, $LikeState));
        if ($statement5->fetchColumn() > 0) {
        //Favourite exists and it is liked, so invite to "unlike"...
        echo '<a href="#" id="linkid'.$step.'" title="Click to UNLIKE this photo" class="unlike">&nbsp;</a>';
        }
        else {
        //Favourite exists but it is not "liked", so invite to "like"...
        echo '<a href="#" id="linkid'.$step.'" title="Click to like this photo" class="like">&nbsp;</a>';
        }
    }
echo '</div>';
}
?>

これはすべて問題なく機能し、「いいね」されているかどうかに応じて、各画像に適切なリンクを描画します。現時点では、リンク参照は単なるハッシュであり、「好きな状態」を変更する処理をどのように行うのか疑問に思っています。

ハッシュの代わりに名前を付けることができる処理スクリプトの準備ができました。これは、クエリ文字列で $ThisPhotoID 変数を取得し、データベースを更新し (「いいね状態」を切り替える)、次の方法でページに戻ります。 PHP ヘッダー - おそらくアンカーに。

その処理スクリプトは次のようになります。

<?php
include("login.php");
$username = $session->username;

include('db_connect.php');

//This would be used in the link's query string...
$PhotoID = $_GET['photoid'];

//Get existing "likestate"...
$askstatement = $db->prepare("SELECT `likestate` FROM `likes` WHERE `username` = ? AND `photoid` = ?");
$askstatement->execute(array($username, $PhotoID));
$CurrentLikeState = $askstatement->fetchColumn(0); // Will be 1 or 0.

//Make new likestate...
if ($CurrentLikeState == 1) {
$NewLikeState = 0;
}
else {
$NewLikeState = 1;
}

//Change the like state...
$update_statement = $db->prepare("UPDATE `likes` SET `likestate` = ? WHERE `username` = ? AND `photoid` = ?");
$update_statement->execute(array($NewLikeState, $username, $PhotoID));

header("Location:mypage.php");
?>

しかし、これは理想的ではありません。おそらく JQuery を使用して、ページを離れたり更新したりせずに、Ajax 経由で更新を行うことができるかどうか疑問に思っています。私が知る限り、これを行うには、JQuery を含める必要があります。

  • js 関数を挿入する
  • 各リンクに js onclick イベントを挿入する
  • javacsript/ajax が代替リンクとして使用するための処理ファイルに新しい形式のリンクを作成します。

私が助けを必要としているのはjavascript / ajaxコードですが、とにかくそれがどのように機能するのかについて少し混乱しています.データベースが更新された後にそれらを変更しますか? (PHP がリンクを出力する場合、リンクは PHP が出力したままのままではありませんか?)

4

2 に答える 2

0

あなたの質問にコメントする方法が本当にわからないという理由だけで、このセクションでこのコメントを提供しています. JQuery には、使用できる 2 つの異なる関数 (関数と関数) が$.post()あり$.ajax()ます。

リンクを次のように分類できます。

<a class="like_link" title="<?php echo $picture_id; ?>">

jquery クリック関数を使用するだけです。

$('.like_link').click(function(){
     var id=$(this).attr("title");
     // Ajax-stuff
});

またはそのように何か。これが答えになるつもりはありません。単なる情報です。

于 2012-05-22T22:08:26.713 に答える
0

私は過去に同様のことを行い、それをあなたの例に変更しました。

リンクを含む html を想定すると、次のようになります。

<div id="allmylinks">
    <a href="toggle.php?link=foo">First link</a>
    <a href="toggle.php?link=bar">Second link</a>
</div>
$("div#allmylinks a").click(function(e){
    e.preventDefault();
    var link= $(this);
    $.get(
        $(this).attr('href'),
        function(data){
            console.log('Succesfull! '+data);
            link.attr('href',data);      // Set the new link
            $link.append(' was toggled');// Add some text
    });
    $(this).parents('div.entry-content').fadeOut('slow');
});

toggle.php で私はこれを持っていた:

if(isset($_REQUEST['link']))
    $link = $_REQUEST['link'];
else
    $link = "error";

// Validate link and process it
...

// If it's ajax
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest')
{
    // The new link
    echo 'toggle.php?link=toggled-'.$link;
}
// Not an ajax-request, redirect to previous page
else 
{
    header('Location: index.php');
    die();
}
于 2012-05-26T12:10:30.200 に答える