0

自分のサイト (ExpressionEngine を使用) にいいねボタンを作成しましたが、機能します。ただし、ほぼ同じコードを別のページに配置すると、いいねボタンのテキストは常に最後のページにあるはずだったものになります(本来あるべきものとは反対ですが、ページを更新すると正しくなるため、単に反転することはできません動作するコードは次のとおりです。

<?php
$DB1 = $this->EE->load->database('ext_db', TRUE);
$mapID = "{entry_id}";
$ipAddress = $_SERVER['REMOTE_ADDR'];
$thisquery = "SELECT * FROM mapLikes WHERE ipAddress = '$ipAddress' AND mapID = '$mapID'";
$q = $DB1->query($thisquery);
$results = $q->result_array();
foreach ($q->result() as $row)
{
    $liked = $row->liked;
}
$buttontext = 'Like';
$buttonimage = "1";
if ($liked == "1") {
    $buttontext = 'Unlike';
    $buttonimage = "2";
}

if($_POST['like']) {
    if ($liked == "1") {
        $thisquery = "DELETE FROM mapLikes WHERE mapID = '$mapID' AND ipAddress = '$ipAddress'";
        $DB1->query($thisquery);
    } else {
        $thisquery = "INSERT INTO mapLikes (mapLikeID, mapID, liked, ipAddress) VALUES ('null', '$mapID', '1', '$ipAddress')";
        $DB1->query($thisquery);
    }
}
?>

そして、そうでないコード:

<?php
$DB1 = $this->EE->load->database('ext_db', TRUE);
$mapID = "{segment_3_category_id}";
$ipAddress = $_SERVER['REMOTE_ADDR'];
$thisquery = "SELECT * FROM categoryLikes WHERE ipAddress = '$ipAddress' AND mapID = '$mapID'";
$q = $DB1->query($thisquery);
$results = $q->result_array();
foreach ($q->result() as $row)
{
    $liked = $row->liked;
}
$buttontext = 'Like';
$buttonimage = "1";
if ($liked == "1") {
    $buttontext = 'Unlike';
    $buttonimage = "2";
}

if($_POST['like']) {
    if ($liked == "1") {
        $thisquery = "DELETE FROM categoryLikes WHERE mapID = '$mapID' AND ipAddress = '$ipAddress'";
        $DB1->query($thisquery);
    } else {
        $thisquery = "INSERT INTO categoryLikes (categoryLikeID, mapID, liked, ipAddress) VALUES ('null', '$mapID', '1', '$ipAddress')";
        $DB1->query($thisquery);
    }
}
?>

ご覧のとおり、2 つのコードの違いは $mapID とクエリだけです。しかし、何らかの理由で一方が機能し、もう一方が機能しません。何が起こっているのか誰にも分かりますか?これは、ExpressionEngine よりも php の問題だと思います。

4

2 に答える 2

0

今それを理解し、コードの最初のビットには2番目と同じ問題があることにも気付きました。私がしたことは、次のように POST スクリプトでボタンの状態を設定することでした。

if($_POST['like']) {
    if ($liked == "1") {
        $thisquery = "DELETE FROM mapLikes WHERE mapID = '$mapID' AND ipAddress = '$ipAddress'";
        $DB1->query($thisquery);
        $buttontext = 'Like';
        $buttonimage = "1";
    } else {
        $thisquery = "INSERT INTO mapLikes (mapLikeID, mapID, liked, ipAddress) VALUES ('null', '$mapID', '1', '$ipAddress')";
        $DB1->query($thisquery);
        $buttontext = 'Unlike';
        $buttonimage = "2";
    }
}
于 2013-08-14T09:58:26.960 に答える