搜索
首页后端开发php教程php模仿qq空间实现其功能实例

php模仿qq空间实现其功能实例

Jun 15, 2017 pm 02:29 PM
phpqq空间

这篇文章主要介绍了模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中) ,需要的朋友可以参考下

在上一篇随笔中已经将如何发布动态呈现了,那么现在来看一下剩下的评论动态、回复评论、删除动态和评论功能,这几个功能会有点绕~~~

一、思路如下:

(1)你发表动态之后,会有人评论这一条动态,当评论之后,你也会回复该评论;(此处评论要单独一张表,回复也要单独一张表)

(2)删除动态:会将动态连同评论、回复全部删除;删除评论:只会删除该条评论

二、在写代码之前,我还是想把流程说一遍:

(1)发表动态---评论---回复---再回复

(2)将上边的流程细化,我先在纸上写出,再上传,码字不能表达清楚(注意的是,我想要的功能的实现,并不是一模一样的哈)

三、还是先将代码分块解释,最后将主页面代码完全附上(含上一篇)

在上一篇中已经实现发布动态、弹出评论框,那么现在接着向下走:

分别看一下qqfriends,qqdongtai,qqpinglun,qqhuifu表,这是初始状态:

先以用户李四登录,由数据库qqfriends表中知道,李四的好友是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、评论张三的动态,点击“确定”后,就是第二张图了~

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页面0c6dc11e160d3b678d68754cc175188a0c6dc11e160d3b678d68754cc175188a


<?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);
?>

查看qqpinglun表中是不是多了这一条 “为什么开心呢?”:

3、读取评论内容:


<!--读取评论内容--> 
<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>

第二步:回复

1、回复刚刚的评论:

2、将回复内容写进数据库


   //定义空字符串,容纳回复评论的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" ;
     }      
     });            
    })

 hf-cl.php页面


<?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);
?>

 查看qqhuifu表,是不是多了一行呢?

3、将回复内容读出:


<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>

回复内容已经显示了:

第三步:删除

1、删除动态:(含评论和回复)

scdt-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");
?>

2、删除评论:(含回复)

scpl-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");
?>

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");
?>

 关于删除就不依次试了~~~注意包含关系就好了

主页面全部代码:



 
 
  
  
   
  
  
  
  
  
       
 
 
  

strquery($sql); //这种方法可以取到uid。 echo "欢迎:"."{$name}"; ?>

发表动态:

朋友动态:

query($sql); // var_dump($arr); foreach($arr as $v) { $sql = "select name from qqusers where uid='{$v[1]}'"; $name = $db->strquery($sql); if($v[1]==$uid) { $name = "我"; } echo "

{$name}发表动态:

{$v[2]}

发表动态时间:{$v[3]}

删除动态

"; } ?>

query($sql); foreach($arr as $v) { $sql = "select * from qqdongtai where dtid='{$v[1]}'"; $arr2 = $db->query($sql); foreach($arr2 as $m) { //取发动态的姓名 $sql = "select name from qqusers where uid='{$v[2]}'"; $name = $db->strquery($sql); //若果是登录者评论则显示“我” if($v[2]==$uid) { $name ="我"; } //获取被评论者的姓名 $sql = "select name from qqusers where uid=(select uid from qqdongtai where dtid='{$v[1]}')"; $bpl = $db->strquery($sql); echo "

{$name}评论{$bpl}的动态:{$m[2]}

{$v[3]}

发表评论时间:{$v[4]}

删除评论

"; } } ?>

query($sql); // var_dump($arr); foreach($arr as $a) { $sql = "select * from qqpinglun where cid='{$a[1]}'"; $arr2 = $db->query($sql); // var_dump($arr2); foreach($arr2 as $n) { //取评论动态的姓名 $sql = "select name from qqusers where uid='{$a[2]}'"; $name = $db->strquery($sql); //若果是登录者评论则显示“我” if($a[2]==$uid) { $name ="我"; } //获取被回复评论的姓名 $sql = "select name from qqusers where uid=(select uid from qqpinglun where cid='{$a[1]}')"; $bpl = $db->strquery($sql); echo "

{$name}回复{$bpl}的评论:{$n[3]}

{$a[3]}

回复时间:{$a[4]}

删除回复

"; } } ?>

<script> //ajax方法:刷新页面时将内容读取出来,并按发表时间读出来 // $.ajax({ // url:"sx-cl.php", // dataType:"TEXT", // success:function(data){ // var hang = data.trim().split("|"); // var str=""; // for(var i=0;i<hang.length;i++) // { // var lie = hang[i].split("^"); // str = str + "<p class=&#39;a&#39;><span class=&#39;xm&#39;>"+lie[1]+"</span>发表动态:</p><p class=&#39;b&#39;><p>"+lie[2]+"</p><p class=&#39;c&#39;>发表动态时间:"+lie[3]+"</p>"; // str =str+"<p id=&#39;d&#39;><button class=&#39;btn btn-primary pl&#39; data-toggle=&#39;modal&#39; data-target=&#39;#myModal&#39; code =&#39;"+lie[0]+"&#39;>评论</button><span><a href=&#39;del.php?code="+lie[0]+"&#39;>删除动态</a></span></p>"; // } // $("#nr").html(str); // //点击“评论按钮”实现将code值传到模态框的“提交按钮” // //为什么放在此处:因为ajax是异步的,如果不放在此处会加不上点击事件 // $(".pl").click(function(){ // code = $(this).attr("code"); //将评论的id重新赋值 // }) // } // }); // //php方法: 当发表动态时,将动态内容写进数据库,并刷新页面 $("#fb").click(function(){ var dt= $(".xdt").val(); var uid = $(".qid").attr("yh"); $.ajax({ url:"main-cl.php", data:{dt:dt}, 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" ; } }); }) //定义空字符串,容纳评论的id var code=""; $(".pl").click(function(){ code = $(this).attr("code"); //将评论的id重新赋值 }) //将评论写进数据库 $("#tjpl").click(function(){ var plnr = $(".pldt").val(); var plid = code; //取发动态的id // alert(plnr); // alert(plid); $.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" ; } }); }) //定义空字符串,容纳回复评论的id var ids=&quot;&quot;; $(&quot;.hf&quot;).click(function(){ ids = $(this).attr(&quot;ids&quot;); //将评论的id重新赋值 // alert((ids)); $(&amp;#39;#mM&amp;#39;).modal(&amp;#39;show&amp;#39;); }) //将回复评论写进数据库 $(&quot;#tjhf&quot;).click(function(){ var hfnr = $(&quot;.hfpl&quot;).val(); // alert(hfnr); // alert(ids); $.ajax({ url:&quot;hf-cl.php&quot;, data:{hfnr:hfnr,ids:ids}, type:&quot;POST&quot;, dataType:&quot;TEXT&quot;, success:function(data){ alert(&quot;回复成功!&quot;); window.location.href=&quot;main.php&quot; rel=&quot;external nofollow&quot; rel=&quot;external nofollow&quot; rel=&quot;external nofollow&quot; rel=&quot;external nofollow&quot; rel=&quot;external nofollow&quot; ; } }); }) </script>

到此处为止,动态的发布、动态的评论、动态的回复、动态的删除都已经写完了,但是有个问题还还还没解决完,也就是回复的回复问题。请看下面的简图:

也就是回复表中有一部分是回复的评论,而剩余的部分则是回复的回复(有点绕)想看的就继续关注(下)未完待续~~~

 

先总结一下遇到的问题:

(1)为什么ajax输出的button添加不上点击事件?

     因为ajax是异步ajax,所以要紧接其后。

(2)为什么取不到button的值------this

(3)一个php页面中,什么时候用ajax?什么时候用php?

    在这个实例中,我用ajax将数据写进数据库;用php从数据库读取内容。(上一篇中,动态是用ajax读取的,在这一篇中,两种方法都有,详情请看全部代码)

(4)最后,逻辑清晰很关键,尤其是表与表之间的关联。

以上是php模仿qq空间实现其功能实例的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
PHP:服务器端脚本语言的简介PHP:服务器端脚本语言的简介Apr 16, 2025 am 12:18 AM

PHP是一种服务器端脚本语言,用于动态网页开发和服务器端应用程序。1.PHP是一种解释型语言,无需编译,适合快速开发。2.PHP代码嵌入HTML中,易于网页开发。3.PHP处理服务器端逻辑,生成HTML输出,支持用户交互和数据处理。4.PHP可与数据库交互,处理表单提交,执行服务器端任务。

PHP和网络:探索其长期影响PHP和网络:探索其长期影响Apr 16, 2025 am 12:17 AM

PHP在过去几十年中塑造了网络,并将继续在Web开发中扮演重要角色。1)PHP起源于1994年,因其易用性和与MySQL的无缝集成成为开发者首选。2)其核心功能包括生成动态内容和与数据库的集成,使得网站能够实时更新和个性化展示。3)PHP的广泛应用和生态系统推动了其长期影响,但也面临版本更新和安全性挑战。4)近年来的性能改进,如PHP7的发布,使其能与现代语言竞争。5)未来,PHP需应对容器化、微服务等新挑战,但其灵活性和活跃社区使其具备适应能力。

为什么要使用PHP?解释的优点和好处为什么要使用PHP?解释的优点和好处Apr 16, 2025 am 12:16 AM

PHP的核心优势包括易于学习、强大的web开发支持、丰富的库和框架、高性能和可扩展性、跨平台兼容性以及成本效益高。1)易于学习和使用,适合初学者;2)与web服务器集成好,支持多种数据库;3)拥有如Laravel等强大框架;4)通过优化可实现高性能;5)支持多种操作系统;6)开源,降低开发成本。

揭穿神话:PHP真的是一种死语吗?揭穿神话:PHP真的是一种死语吗?Apr 16, 2025 am 12:15 AM

PHP没有死。1)PHP社区积极解决性能和安全问题,PHP7.x提升了性能。2)PHP适合现代Web开发,广泛用于大型网站。3)PHP易学且服务器表现出色,但类型系统不如静态语言严格。4)PHP在内容管理和电商领域仍重要,生态系统不断进化。5)通过OPcache和APC等优化性能,使用OOP和设计模式提升代码质量。

PHP与Python辩论:哪个更好?PHP与Python辩论:哪个更好?Apr 16, 2025 am 12:03 AM

PHP和Python各有优劣,选择取决于项目需求。1)PHP适合Web开发,易学,社区资源丰富,但语法不够现代,性能和安全性需注意。2)Python适用于数据科学和机器学习,语法简洁,易学,但执行速度和内存管理有瓶颈。

PHP的目的:构建动态网站PHP的目的:构建动态网站Apr 15, 2025 am 12:18 AM

PHP用于构建动态网站,其核心功能包括:1.生成动态内容,通过与数据库对接实时生成网页;2.处理用户交互和表单提交,验证输入并响应操作;3.管理会话和用户认证,提供个性化体验;4.优化性能和遵循最佳实践,提升网站效率和安全性。

PHP:处理数据库和服务器端逻辑PHP:处理数据库和服务器端逻辑Apr 15, 2025 am 12:15 AM

PHP在数据库操作和服务器端逻辑处理中使用MySQLi和PDO扩展进行数据库交互,并通过会话管理等功能处理服务器端逻辑。1)使用MySQLi或PDO连接数据库,执行SQL查询。2)通过会话管理等功能处理HTTP请求和用户状态。3)使用事务确保数据库操作的原子性。4)防止SQL注入,使用异常处理和关闭连接来调试。5)通过索引和缓存优化性能,编写可读性高的代码并进行错误处理。

您如何防止PHP中的SQL注入? (准备的陈述,PDO)您如何防止PHP中的SQL注入? (准备的陈述,PDO)Apr 15, 2025 am 12:15 AM

在PHP中使用预处理语句和PDO可以有效防范SQL注入攻击。1)使用PDO连接数据库并设置错误模式。2)通过prepare方法创建预处理语句,使用占位符和execute方法传递数据。3)处理查询结果并确保代码的安全性和性能。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),