ホームページ >バックエンド開発 >PHPチュートリアル >PHP は QQ 空間を模倣してその機能例を実現します

PHP は QQ 空間を模倣してその機能例を実現します

零下一度
零下一度オリジナル
2017-06-15 14:29:304025ブラウズ

この記事は主にQQスペースやモーメントを模倣して更新を投稿したり、更新にコメントしたり、コメントに返信したり、更新やコメントを削除したりする機能を紹介します(中)必要な友達はそれを参照してください

前のエッセイで公開する方法。ダイナミクスが表示されるので、残りのコメントのダイナミクス、コメントの返信、ダイナミクスの削除、およびコメントの機能を見てみましょう。これらの機能は少し混乱します~~~

1. アイデアは次のとおりです。 (1) 投稿を投稿した後、誰かがその投稿にコメントします。(ここでのコメントには別のテーブルが必要で、返信にも別のテーブルが必要です)

(2) 削除します。投稿: はい すべての更新、コメント、返信を削除します。コメントを削除: コメントのみが削除されます

2. コードを記述する前に、プロセスを確認しておきます:

(1) 更新を投稿する--- コメント ---返信 ---再度返信

(2) 上記のプロセスを改良するために、まず紙に書いてからアップロードします (関数の実現はコードワードでは明確に表現できないことに注意してください)。欲しいのですが、まったく同じではありません)

3番目に、最初にコードをチャンクで説明し、最後にメインページのコードを完全に添付しましょう(前の記事を含む)

前の記事 更新の公開とポップアップ コメント ボックスを実現するには、次に進みます:

qqfriends、qqdongtai、qqpinglun、qqhuifu テーブルをそれぞれ見てください。これが初期状態です:

最初のユーザー Li Si がログインします。データベースの qqfriends テーブルから、Li Si の友達が zhangsan と zhaoliu であることがわかり、彼のスペースに表示される友達のダイナミクスは次のとおりです。前回の記事と比較すると、こちら ある記事で、誰が中国語でログインしたかを示しました:

<?php
   session_start();
   $uid = "";
   if(empty($_SESSION["uid"]))
   {
    header("location:login.php");
    exit;
   }
   $uid = $_SESSION["uid"];
   require "../DB.class.php";
   $db = new DB();
   $sql = "select name from qqusers where uid=&#39;{$uid}&#39;";
   $name = $db->strquery($sql);
   echo "欢迎:"."<span class=&#39;qid&#39; yh=&#39;{$uid}&#39;>{$name}</span>";
   ?>

ステップ 1: コメント

1. 「OK」をクリックした後、2 番目になります。 pic~

2. コメントの内容をデータベースに書き込みます


 //定义空字符串,容纳评论的id  
  var code=""; 
 $(".pl").click(function(){     
    code = $(this).attr("code"); //将评论的id重新赋值                 
    }) 
//将评论写进数据库 
$("#tjpl").click(function(){
  var plnr = $(".pldt").val();
  var plid = code; //取发动态的id
  $.ajax({
  url:"pl-cl.php",
  data:{plnr:plnr,plid:plid},
  type:"POST",
  dataType:"TEXT",
  success:function(data){
   alert("评论成功!");
   window.location.href="main.php" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ;
  }      
  });            
 })

pl-cl.php ページ 0c6dc11e160d3b678d68754cc175188a :

3. コメントを読む内容:

<?php
require "../DB.class.php";
$db = new DB();
session_start();
$uid = $_SESSION["uid"];
$plnr = $_POST["plnr"];
$dtid = $_POST["plid"];
$time = date("Y-m-d H:i:s", time());
$sql = "insert into qqpinglun values (&#39;&#39;,&#39;{$dtid}&#39;,&#39;{$uid}&#39;,&#39;{$plnr}&#39;,&#39;{$time}&#39;)";
$db->query($sql,0);
?>

ステップ 2: 返信

1. コメントへの返信:

2. 返信内容をデータベースに書き込みます

<!--读取评论内容--> 
<p id="dqpl">
<?php
 $sql = "select * from qqpinglun";
 $arr = $db->query($sql);
 foreach($arr as $v)
 {
  $sql = "select * from qqdongtai where dtid=&#39;{$v[1]}&#39;";
  $arr2 = $db->query($sql);
  foreach($arr2 as $m)
  {
   //取发动态的姓名
   $sql = "select name from qqusers where uid=&#39;{$v[2]}&#39;";
   $name = $db->strquery($sql);
   //若果是登录者评论则显示“我”
   if($v[2]==$uid)
   {
    $name ="我";
   }
   //获取被评论者的姓名
   $sql = "select name from qqusers where uid=(select uid from qqdongtai where dtid=&#39;{$v[1]}&#39;)";
   $bpl = $db->strquery($sql);
   echo "<p class=&#39;a&#39;><span class=&#39;xm&#39;>{$name}</span>评论<span class=&#39;xm&#39;>{$bpl}</span>的动态:{$m[2]}<p>
    <p class=&#39;b&#39;>{$v[3]}</p>
   <p class=&#39;c&#39;>发表评论时间:{$v[4]}</p>
   <p class=&#39;d&#39;><button class=&#39;btn btn-primary hf&#39; ids =&#39;{$v[0]}&#39;>回复
   </button><span><a href=&#39;scpl-cl.php?code={$v[0]}&#39;>删除评论</a></span></p>";
  }
 }  
?>    
</p>

hf-cl.php ページ

   //定义空字符串,容纳回复评论的id  
    var ids=""; 
    $(".hf").click(function(){     
       ids = $(this).attr("ids"); //将评论的id重新赋值  
//       alert((ids)); 
       $(&#39;#mM&#39;).modal(&#39;show&#39;);              
       }) 
   //将回复评论写进数据库 
   $("#tjhf").click(function(){
     var hfnr = $(".hfpl").val();
//     alert(hfnr);
//     alert(ids);
     $.ajax({
     url:"hf-cl.php",
     data:{hfnr:hfnr,ids:ids},
     type:"POST",
     dataType:"TEXT",
     success:function(data){
     alert("回复成功!");
    window.location.href="main.php" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ;
     }      
     });            
    })

qqhuifu テーブルを確認してください。余分な行はありますか?

3. 返信内容を読み上げます:

<?phprequire "../DB.class.php";
$db = new DB();
session_start();
$uid = $_SESSION["uid"];
$hfnr = $_POST["hfnr"];
$cid = $_POST["ids"];
$time = date("Y-m-d H:i:s", time());
$sql = "insert into qqhuifu values (&#39;&#39;,&#39;{$cid}&#39;,&#39;{$uid}&#39;,&#39;{$hfnr}&#39;,&#39;{$time}&#39;)";
$db->query($sql,0);
?>

返信内容が表示されました:


ステップ 3: 削除

1. 更新を削除します: (コメントと返信を含む)。

scdt-cl.php

<p id="dqhf"> 
     <!--取一次回复-->
    <?php
    $sql = "select * from qqhuifu where cid in (select cid from qqpinglun)";
    $arr = $db->query($sql);
    foreach($arr as $a)
    {
     $sql = "select * from qqpinglun where cid=&#39;{$a[1]}&#39;";
     $arr2 = $db->query($sql);
     foreach($arr2 as $n)
     {
      //取评论动态的姓名
      $sql = "select name from qqusers where uid=&#39;{$a[2]}&#39;";
      $name = $db->strquery($sql);
      //若果是登录者评论则显示“我”
      if($a[2]==$uid)
      {
       $name ="我";
      }
      //获取被回复评论的姓名
      $sql = "select name from qqusers where uid=(select uid from qqpinglun where cid=&#39;{$a[1]}&#39;)";
      $bpl = $db->strquery($sql);
      echo "<p class=&#39;a&#39;><span class=&#39;xm&#39;>{$name}</span>回复<span class=&#39;xm&#39;>{$bpl}</span>的评论:{$n[3]}<p>
       <p class=&#39;b&#39;>{$a[3]}</p>
      <p class=&#39;c&#39;>回复时间:{$a[4]}</p>
      <p class=&#39;d&#39;><button class=&#39;btn btn-primary hf&#39; ids =&#39;{$a[0]}&#39;>回复
      </button><span><a href=&#39;schf-cl.php?code={$a[0]}&#39;>删除回复</a></span></p>"; 
     }
     }
    ?>
   </p>

2. コメントを削除: (返信を含む)


scpl-cl.php

<?php
$code = $_GET["code"];
require "../DB.class.php";
$db = new DB();
$sql = "delete from qqdongtai where dtid=&#39;{$code}&#39;";
$db->query($sql,0);
$sql2 = "delete from qqpinglun where dtid=&#39;{$code}&#39;";
$db->query($sql2,0);
$sql3 = "delete from qqhuifu where cid=(select cid from qqpinglun where dtid=&#39;{$code}&#39;)";
$db->query($sql3,0);
header("location:main.php");
?>
3. 返信を削除: (自分のみ)

schf-cl.php

<?php
$code = $_GET["code"];
require "../DB.class.php";
$db = new DB();
$sql2 = "delete from qqpinglun where cid=&#39;{$code}&#39;";
$db->query($sql2,0);
$sql3 = "delete from qqhuifu where cid=&#39;{$code}&#39;";
$db->query($sql3,0);
header("location:main.php");
?>

削除に関しては、いちいち試しません~~~包含関係にだけ注意してください


メインページの全コード:

<?php
$code = $_GET["code"];
require "../DB.class.php";
$db = new DB();
$sql2 = "delete from qqpinglun where cid=&#39;{$code}&#39;";
$db->query($sql2,0);
$sql3 = "delete from qqhuifu where cid=&#39;{$code}&#39;";
$db->query($sql3,0);
header("location:main.php");
?>

ここまで、ダイナミックパブリッシング、動的コメント、動的返信、動的削除と書かれていますが、まだ解決されていない問題が1つあり、それは返信の問題です。以下の簡略図を見てください:


つまり、返信テーブルの一部が返信コメントで、残りの部分が返信返信です (少し複雑です) 見たい場合は、引き続き注目してください (下)続きます~~~

まず、発生した問題を要約しましょう:

(1) ajax によって出力されたボタンがクリック イベントを追加できないのはなぜですか?

ajax は非同期 ajax であるため、すぐに従う必要があります。

(2) ボタンの値を取得できないのはなぜですか-----これ

(3) PHP ページで、Ajax を使用する必要があるのはどのような場合ですか? php をいつ使用するか?

この例では、ajax を使用してデータベースにデータを書き込み、php を使用してデータベースからコンテンツを読み取ります。 (前回の記事では、ダイナミクスは ajax を使用して読み取られました。この記事では、両方の方法が利用可能です。詳細については、コード全体を参照してください)

(4) 最後に、特にテーブル間の接続において、明確なロジックが重要です。

以上がPHP は QQ 空間を模倣してその機能例を実現しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。