1

Facebookのようないいねボタンのコーディングが欲しい。試してみましたが、問題は、AJAX を介して他の PHP ファイルから返されたデータが表示されないことです。これが私のコードです。

SQL

CREATE TABLE `imagedata` (
 `id` int(10) DEFAULT NULL,
 `image` varchar(1000) DEFAULT NULL,
 `upload_by` int(10) DEFAULT NULL
)
CREATE TABLE `likedata` (
 `liked_by` int(10) DEFAULT NULL,
 `image_id` int(10) DEFAULT NULL
)
 CREATE TABLE `userdata` (
  `id` int(2) NOT NULL,
  `names` varchar(10) NOT NULL
 )

db.php

 $cn=mysql_connect("localhost","root","");
if(!$cn){
    echo "Database problem occur.";
    die();
}
$db=mysql_select_db("test",$cn);
if(!$db){
    echo "Database not exist.";
    die();
}
function getLike($tablename,$image_id){
    $num=0;
    $result=mysql_query("select liked_by from $tablename where image_id=$image_id");
    $num=mysql_num_rows($result);
    return $num;
}
function getCheck($tablename,$id,$image_id){
    $n=0;
    $result=mysql_query("select * from $tablename where liked_by=$id and image_id=$image_id");
    $n=mysql_num_rows($result);
    return $n;
}    

AJAX.php

<?php
    require_once("db.php");
        session_start();
        if(!isset($_SESSION["id"])){
    echo "Please login";
    die();
        }
        $id=$_SESSION["id"];
    echo "LOGIN ID = ".$id."<p><br></p>";
    $result=mysql_query("select * from imagedata");
    while($row=mysql_fetch_assoc($result)){
    $image_id=$row["id"];
    $pic=$row["image"];
    $upload_by=$row["upload_by"];
    $no=getCheck("likedata",$id,$image_id);
    $num=getLike("likedata",$image_id);
    if($no>0){
        echo "<p><img src='$pic' /></p>";
        echo "<span id='no_likes'>$num</span>&nbsp;&nbsp;<a onclick='ajaxLike($id,$image_id)' id='status'>unlike</a>";
    }
    else{
        echo "<p><img src='$pic' /></p>";
        echo "<span id='no_likes'>$num</span>&nbsp;&nbsp;<a onclick='ajaxLike($id,$image_id)' id='status'>like</a>";
    }

}
?>

AJAX.js

  function ajaxLike(id,image_id){
var doc=new XMLHttpRequest();
var url="like.php";
var data="id="+id+"&image_id="+image_id;
doc.open("POST",url,true);
doc.setRequestHeader("Content-type","application/x-www-form-urlencoded");
doc.onreadystatechange=function(){
    if(doc.readyState==4 && doc.status==200){
        var info=doc.responseText;
        var arr=info.split(" ");
        document.getElementById("no_likes").innerHTML=arr[0];
        document.getElementById("status").innerHTML=arr[1];
    }
}
doc.send(data);
document.getElementById("status").innerHTML="processing.....";
 }

Like.php

<?php 
    require_once("db.php");     
    if($_POST["id"]!="" && $_POST["image_id"]!="" && $_POST["status"]!=""){
        $id=$_POST["id"];
        $image_id=$_POST["image_id"];
        $status=$_POST["status"];
        $no=mysql_num_rows(mysql_query("select * from likedata where liked_by=$id and image_id=$image_id"));
        if($no>0){
            mysql_query("delete from likedata where liked_by=$id and image_id=$image_id");
            $num=mysql_num_rows(mysql_query("select liked_by from likedata where image_id=$image_id"));
            echo $num." "."like";

        }
        else{
            mysql_query("insert into likedata values($id,$image_id)");
            $num=mysql_num_rows(mysql_query("select liked_by from likedata where image_id=$image_id"));
            echo $num." "."unlike";
        }

    }
    ?>    

いいね/いいねボタンをクリックした後にデータベースをチェックすると、必要な結果が表示されます。F5でページを更新しないとページに表示されません。ヘルプ..

4

2 に答える 2

0

あなたが説明したように、あなたは like.php で良い条件を満たしたことはありません:

AJAX.js で、status=: を追加します。

var data="id="+id+"&image_id="+image_id + "&status=1";

次に、like.php では、次のようになります。

if($_POST["id"]!="" && $_POST["image_id"]!="" && $_POST["status"]!="")
于 2013-10-27T16:18:13.740 に答える