2016-08-19 7 views
2

私はjquery、ajax、phpを使ってLikeやUnlikeの機能に取り組んでいます。私の問題は理解するのが少し難しい。まずそれを理解しようとします。 Jquery Postが正しく機能していませんか?


私は2つのPHPページ、 viewProfile.phpLikeMail.phpを持っています。 viewProfile.phpのajax関数によって LikeMail.phpが呼び出されています。

<div id="Like"></div> 
:ここ

がviewProfile.phpページの説明のセクションでここ

       ----------------- 
          | Like/Unlike | 
          ----------------- 

は、実際にこのAjaxの機能

function like() 
{ 
    var req = new XMLHttpRequest(); 
    req.onreadystatechange = function() 

    { 
     if(req.readyState==4 && req.status==200) 
     { 
      document.getElementById('Like').innerHTML=req.responseText; 

     } 
    } 
    req.open('POST','LikeMail.php','true'); 
    req.send(); 
} 
setInterval(function(){like()},1000); 

HTMLでLikeMail.phpから来ているボタンがあります

このdivに出力が表示されています。 上記のボタンは、LikeMail.phpの条件に依存するLikeまたはUnlikeとなります。これについては、後述のLikeMail.phpの説明セクションで説明します。

いずれか(ボタン)LikeまたはUnlikeがクリックされたとき。それからLikeMail.phpに投稿要求を送るそれぞれのjqueryクリック機能を呼び出します。LikeMail.phpページにLikeまたはUnlikeボタンが実際に存在するので、Indirectページをタイトルに記載しました。しかし、ajaxコールのために、これらのボタンはviewProfile.phpページに表示されています。だから私はそれはそれはjQueryのポストまたはLikeボタンの説明の

$(document).ready(function(){ 

    $('#Like').unbind().click(function(){ 
     $.post("LikeMail.php", 
      {Like: this.id}, 
     function(data){ 
      $('#response').html(data); 
     } 
     ); 

    }); 

}); 


終了ですUnlikeボタン

$(document).ready(function(){ 

    $('#Unlike').unbind().click(function(){ 
     $.post("LikeMail.php", 
      {Unlike: this.id}, 
      function(data){ 
       $('#response').html(data); 
      } 

     ); 

    }); 

}); 

のためのjQueryのポストである

実際のページへviewProfile.phpを通じてLikeMail.phpをPOSTリクエストを送信しますviewProfile.phpページ


ここでは210 は、このコードに依存

LikeまたはUnlikeボタンをviewProfile.phpページに示されているLikeMail.phpページの説明のセクションです:

$check_for_likes = mysqli_query($conn, "SELECT * FROM liked WHERE user1='$user1' AND user2='$user2'"); 
       $numrows_likes = mysqli_num_rows($check_for_likes); 
       if (false == $numrows_likes) { 
        echo mysqli_error($conn); 
       } 

       if ($numrows_likes >= 1) { 
        echo '<input type="submit" name="Unlike" value="Unlike" id="Unlike" class="btn btn-lg btn-info edit">'; 


       } 

       elseif ($numrows_likes == 0) { 
        echo '<input type="submit" name="Like" value="Like" id="Like" class="btn btn-lg btn-info edit">'; 
       } 

ボタンは、これらの2つの以上の条件に依存します。

Likeボタンがクリックされたときに、viewProfile.phpからPOSTリクエストがここに来

if(isset($_POST['Like'])) //When Like button in viewProfile.php is clicked then this peace of code inside if condition should run and insert some record in database 
      { 
       $total_likes = $total_likes+1; 
       $like = mysqli_query($conn, "UPDATE user SET user_Likes = '$total_likes' WHERE user_id = '$user2'"); 
       $user_likes = mysqli_query($conn, "INSERT INTO liked (user1,user2) VALUES ('$user1','$user2')"); 
       $query3 = "INSERT INTO notification (user1, user2, alert, notificationType) VALUE ('$user1','$user2','unchecked','like')"; 
       if (mysqli_query($conn, $query3)) { 
        echo "Like"; 
       } else { 
        echo mysqli_error($conn); 
       } 

      } 

同様Unlikeボタンがクリックされたとき。このコードの平和は実行されるべきです。

if(isset($_POST['Unlike'])) //This is the condition for Unlike button. It should delete record from databse 
      { 
       $total_likes = $total_likes-2; 
       $like = mysqli_query($conn, "UPDATE user SET user_Likes='$total_likes' WHERE user_id='$user2'"); 
       $remove_user = mysqli_query($conn, "DELETE FROM liked WHERE user1='$user1' AND user2='$user2'"); 
       $query3 = "DELETE FROM notification WHERE user1='$user1' AND user2='$user2' AND notificationType='like'"; 

       $check = mysqli_query($conn, $query3); 
       if ($check) { 
        echo "Unlike"; 
       } else { 
        echo mysqli_error($conn); 
       } 
      } 


問題:私が直面した
主な問題は、私はLikeまたはUnlikeをクリックすると、両方がLikeボタンコードの条件を実行していることです。両方ともデータベースにデータを挿入します。Unlike条件はデータベースからデータを削除する必要がありますが、Likeボタンの条件としてデータも挿入します。親切にも、この問題に取り組む方法を教えてください。前もって感謝します!

更新:
Likeボタンのすべてのコードをすべて削除するとします。 Unlikeボタンの条件が正しく動作します。

+0

概要を簡単に夏らしい@kollein主な問題 – kollein

+0

がProblem'はあなたがあなたの変数をトレースする必要が –

+0

を見出し 'の後に記述されて集中す​​ることができますそれらが壊れているか、または状態が誤っているかを確認してください。 PHP側では 'print_r()'と 'error_log()'を、JavaScriptでは 'alert()'や 'console.log()'を使用して乱用してください。 – technico

答えて

1

おそらくDIVのどこかに重複したIDがあると思います。これをみて。

<div id="Like_2"></div> 

<input type="submit" name="Unlike" value="Unlike" id="Unlike" class="btn btn-lg btn-info edit"> 

<input type="submit" name="Like" value="Like" id="Like" class="btn btn-lg btn-info edit"> 

<div id="response"></div> 


$(document).ready(function(){ 
    $(document).on('click','#Unlike', function(){ 
     $('#response').html(this.id); 
     //ajax call 

    }); 
    $(document).on('click','#Like', function(){ 
     $('#response').html(this.id); 
     //ajax call 

    }); 
}); 

とJavaScript機能:人々へ

function like() 
{ 
    var req = new XMLHttpRequest(); 
    req.onreadystatechange = function() 

    { 
     if(req.readyState==4 && req.status==200) 
     { 
      document.getElementById('Like_2').innerHTML=req.responseText; 

     } 
    } 
    req.open('POST','LikeMail.php','true'); 
    req.send(); 
} 
setInterval(function(){like()},1000); 

https://jsfiddle.net/wx38rz5L/2103/

+0

'viewProfile.php'ページでリクエストを送信すると問題になることはありますか? –

+0

F12を使用して開発者ツールを開いて、バックエンドに送信していることを確認する必要があります。しかし、あなたが何を記述しているかはどこかでIDが重複しているようです。 – Dimitri

+0

最初に動作します。しかし、両方のボタンが機能しなくなり、コンソールが空になる –

関連する問題