0

こんにちは私は私が持っているコメントフィードのためのいいねボタンを作りました、しかし私がそれをクリックするたびにそれはページをリロードします私はそれがページをリロードしないようにそれを作りたいです。私の質問に対する答えはどこにも見つかりません。javascriptまたはAJAXを使用する必要があることは理解していますが、コーディング方法がわからないため、行き詰まっています。

これは私のコメントフィードがあるページにあります。ページの名前はmember-index.phpです。

<a href=\"like-exec.php?id=".$rows['ID']."&members_id=".$_SESSION['SESS_MEMBER_ID']."\">like</a>

これはコードを実行するページにあります(like-exec.php)

<?php
require('../config/connect.php');
require('../config/config.php');

$sql = "UPDATE comments set `like` = `like`+1 where `ID` = '$_GET[id]'";
$result=mysql_query($sql);


$con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("likes", $con);

mysql_query("INSERT INTO likes (members_id, comm_id) VALUES(".$_SESSION['SESS_MEMBER_ID'].", $id)");


mysql_close($con);
header("location: success.php");

?>

そのコードが終了した後、それはsusses.phpに送信され、次にそれをmember-index.phpにリダイレクトします。

4

3 に答える 3

0
<a class="like" href=\"like-exec.php\" comment-id=".$rows['ID']." members-id=".$_SESSION['SESS_MEMBER_ID']."\">like</a>

JQueryを使用してAJAXでPHPを呼び出すようにしてください。

$(".like").click(function(){

    $.ajax({
      url: $(this).attr("href"),
      type: "GET",
      data: { comment-id: $(this).attr("comment-id"), members-id: $(this).attr("members-id")},
      success:function(result){

         if(result.success) {
            // Success
         }else{
            // Not success
         }

      },
      error: function(request,status,error){
         // Request error
      }
    });    

});

$_GET["comment-id"]PHPでは、とを使用して変数を取得できます$_GET["members-id"]。スクリプトが成功すると、配列で情報を定義し、それをJSONでエンコードできます。その後、を使用echoして応答を生成する必要があります。

echo json_encode(array(
   "success" => true
));

スクリプトが成功しない場合は、次のように定義できます。

echo json_encode(array(
    "success" => false,
    "reason" => "some reason"
));
于 2013-03-05T10:17:13.927 に答える
-1

PHP / HTML

'like'リンクにクラスを追加して、jQueryでより簡単にターゲットを設定し、リンクのIDを行IDにすることができるようにします。また、ページの他の場所に数値IDがないことを確認する価値があります。これらは、マークアップの他の場所で簡単に使用できる単純なIDになるためです。

<a class="like" id="<?php echo $rows['ID']; ?>" href=\"like-exec.php?id=".$rows['ID']."&members_id=".$_SESSION['SESS_MEMBER_ID']."\">like</a>

jQuery

$('a.like').click(function() {
    // triggered when like link is clicked

    // get the id of this link
    var id = $(this).attr('id');

    // make the AJAX request to the PHP script that updates the database table

    $.ajax({
        type: "GET",
        url: update_likes.php,
        dataType: 'html',
        data: ({ id: id }), // first id is the name, second is the actual id variable we just created
        beforeSend: function(data) {
            // you can do stuff in here before you send the data, display spinner gif etc
            alert('sending!');
        },
        success: function(data) {
            // same here but when the ajax request is successful
            // the data variable is coming from the echo of your PHP script
            alert(data);
        },
        complete: function(data) {
            // yet again but on completion
            alert('complete!');
        }

    });

    // stops the browser following the link (href) in the a tag
    return false;

});

PHP

ajaxリクエストを送信する新しいスクリプトですが、これは質問で既に使用しているコードとまったく同じです。

update_likes.php

<?php
require('../config/connect.php');
require('../config/config.php');

// not sure if session_start(); is in your config but you will need it
// in this script somewhere to do your second query.

// $_GET['id'] is now coming via ajax

$sql = "UPDATE comments set `like` = `like`+1 where `ID` = '$_GET[id]'";
$result=mysql_query($sql);


$con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if (!$con)
{
    die('Could not connect: ' . mysql_error());
}

mysql_select_db("likes", $con);

mysql_query("INSERT INTO likes (members_id, comm_id) VALUES(".$_SESSION['SESS_MEMBER_ID'].", $id)");


mysql_close($con);

// header("location: success.php");
// don't need this anymore

// only echo one string from an ajax request so if you need more do some
// concatenation
echo 'successfully updated db!';

?>

最後に、mysql_関数は非推奨になっているため、PDOまたはmsqliを調べてください。

PS私はコードをテストしていませんが、うまくいけばうまくいくはずです。

アップデート

クリック機能を次のように変更してみてください。

$('a.like').click(function(e) {
    // triggered when like link is clicked


    // stops the browser following the link (href) in the a tag
    e.preventDefault();

    // get the id of this link
    var id = $(this).attr('id');

    // make the AJAX request to the PHP script that updates the database table

    $.ajax({
        type: "GET",
        url: update_likes.php,
        dataType: 'html',
        data: ({ id: id }), // first id is the name, second is the actual id variable we just created
        beforeSend: function(data) {
            // you can do stuff in here before you send the data, display spinner gif etc
            alert('sending!');
        },
        success: function(data) {
            // same here but when the ajax request is successful
            // the data variable is coming from the echo of your PHP script
            alert(data);
        },
        complete: function(data) {
            // yet again but on completion
            alert('complete!');
        }

    });
});
于 2013-03-05T10:06:52.773 に答える
-1

Webサイトに追加した場合はjquery、このようにajax呼び出しを行うことができます。

まず、likeリンクを更新して、Webサーバーに直接リンクするのではなくjavascriptを呼び出すようにします。だから、あなたのリンクを更新してください:

<a href=\"like-exec.php?id=".$rows['ID']."&members_id=".$_SESSION['SESS_MEMBER_ID']."\" onclick="updateLike($(this));return false;">like</a>

次に、JavaScriptを追加してajax更新コンポーネントを処理します。サーバーからの応答を単純なアラートとして配置しましたが、htmlを直接更新するか、インライン更新を配置してみてください。次のJavaScriptをページに追加する必要があります。

<script type="text/javascript">
function updateLike(elm)
{
$.ajax({
  type:'GET',
  url: elm.attr('href'),
  error: function(xhr, status, err) {
      // TODO : User friendly error message on ajax fail
      alert("Request Error :" + xhr + status + err);
  }

  success: function(resp) {
      // ajax operation was successful - confirm the like was okay
      if (resp.success) {
         window.location(resp.redirect);
      } else {
         // TODO : User friendly error message on update fail
         alert("Like failed : " + resp.error);
      }
  }
}
</script>

$.ajax()関数はajax操作を実行します。このerrorプロパティは、クライアントがサーバーとの通信に失敗した場合、または有効な応答を取得できなかった場合の問題を処理します。successプロパティは、サーバーが応答したインスタンスを処理します 。successさらに、更新が成功したかどうかを確認する必要があります。

以下は、likesアップデートのサーバー側コードです。あなたはmysql_*関数を使ったので、私はこれらをそのままにしておいた。ただし、これらの関数は現在、MySQLiを優先して非推奨になっていることに注意してください。これを反映するようにコードを更新することを検討する必要があります。

<?php
require('../config/connect.php');
require('../config/config.php');

$error = "";

$con = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if (!$con)
{
   $error = "Unable to connect to database.";
} else {

   // Check the database is available
   $db = mysql_select_db("likes", $con);

   if (!$db)
   {
      $error = "Unable to select like database.";
   } else {
      // Moved update to after connecting with database
      $sql = "UPDATE comments set `like` = `like`+1 where `ID` = '" . $_GET[id] . "'";
      $result = mysql_query($sql);
      if (!$result) { // Check query is successful
         $error .= "Error when updating comment likes.";
      }

      $result = mysql_query("INSERT INTO likes (members_id, comm_id)
      VALUES(".$_SESSION['SESS_MEMBER_ID'].", $id)");
      if (!$result) { // Check insert is successful
         $error .= "Error when inserting member likes.";
      }
   }

   mysql_close($con);
}

// Convert output to a JSON object for jquery to handle
$resp = new Object();
if ($error == "")
{
   $resp->success = true;
   $resp->redirect = "success.php";
} else {
   $resp->error = $error;
   $resp->success = false;
}

echo json_encode($resp);
?>

上記のコードはテストされていません。そのため、タイプミス/バグ/エラーが発生する可能性がありますが、開始するには十分なはずです。

于 2013-03-05T10:20:57.407 に答える