IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP学习7:数据库记录用户点赞和收藏的东西,并且切换icon、php返回多个echo,怎么取出返回值? -> 正文阅读

[PHP知识库]PHP学习7:数据库记录用户点赞和收藏的东西,并且切换icon、php返回多个echo,怎么取出返回值?

以下是自己试了各种方法得到的总结,或许比较麻烦,不是什么简便方法。但是自己逻辑思维的呈现,请多指教。

userid为用户的id

tnid为游记(即用户点赞收藏的那个东西)的id

collect:这个是用来标记是否点赞过,默认为0(即没点赞过),一点赞就改为1,再取消点赞,则不要变为0,而是变为2(没点赞)

因为0的时候用INSERT语句,1和2状态时,要用UPDATE语句。

<!--icon-->
            
          
            <div class="icon">
                <div class="collect"  id="collecttn" onclick="collecttn();">
                    <img src="<?php
             $rs1=$DB->query("SELECT * FROM user_collect WHERE tnid={$id} AND userid={$uid}");
             $res1 = $DB->fetch($rs1);
             if($res1['collect']==1){
                 echo 'images/start1.png';
             }else if($res1['collect']==2){
                 echo 'images/start0.png';
             }else{
                 echo 'images/start0.png';
             }

            ?>" alt="" id="collect">
                    <span id="collcetnum"><?php echo $res['tncollect']; ?></span>
                </div>
            </div>

img即为图标,刚进入页面时候,图标到底是用"未点赞"还是"已点赞",取决于数据库里的collect的值。数据库的collect是1,就用start1.png。是2就用start0.png,否则(数据库没有这个值),就说明用户从来没点赞过。就用start0.png。

<span>标签里面写的是当前的数量。刚进入页面时候,进行一次SELECT,获取数量。

注意:以上都是用户刚刷进入页面的时候的显示值。

那用户点击之后呢?如下:

通过在js里面,调用ajax(使用ajax的好处就是能进行局部刷新,即你一点赞,就能看到图标切换了的效果,也能看到数量的+1或者-1)


  
<script>
var collecttn =document.getElementById('collecttn');
var collcetnum=document.getElementById('collcetnum');
var collect =document.getElementById('collect');
var thumb =document.getElementById('thumb');


collecttn.onclick=function(){
    // alert('点击了一下');
      var xhr=null;
      xhr=new XMLHttpRequest();
      xhr.open("get","show_icon.php?tnid="+<?php echo $res['tnid']; ?>,true);
      
      xhr.send();
      xhr.onreadystatechange = function(){
              if(xhr.readyState == 4){
                //   alert(xhr.responseText);
                    var arr= JSON.parse(xhr.responseText);
                    
                    collect.src=arr[0];
                    collcetnum.innerText=arr[1];
 
                }
      }   
}

</script>

?我的show_icon.php写的内容如下:


<?php

include 'config.php';
    session_start();
    $uid=$_SESSION['userid'];
    
        
  
        if(!$link){
             echo "连接失败";
             exit;
        }
        

        $tnid=$_GET['tnid'];
        $arr = array(); 
        
        
        
        // -----------------------------------------------------------------
 
        mysqli_set_charset($link,"utf8");
        mysqli_select_db($link,"travel");
        
        
        // 每点击一次,重新select一下
        $sql="SELECT * FROM user_collect WHERE userid=$uid AND tnid=$tnid";
        $res = mysqli_query($link,$sql);
        $rs=mysqli_fetch_assoc($res);
        // var_dump($rs['collect']);
        
        // num
        $sql0="SELECT * FROM travelnote WHERE tnid=$tnid";
        $res0 = mysqli_query($link,$sql0);
        $rs0=mysqli_fetch_assoc($res0);
        $num0=$rs0['tncollect'];
        // var_dump($num0);
        
        
         // -----------------------------------------------------------------
         
         
        
        if(is_null($rs['collect'])){
            // echo '<script>alert(1);</script>';
            $sql1="INSERT INTO user_collect(userid,tnid,collect,icon) VALUES('$uid','$tnid',1,'images/start1.png') ";
            $res1 = mysqli_query($link,$sql1);
            // echo 'images/start1.png';
            $arr = array(); 
            array_push($arr,'images/start1.png');
            
            
            
             $newnum=$num0+1;
            // var_dump($newnum);
            // echo $newnum;
            array_push($arr,$newnum);

            $sql4="UPDATE travelnote SET tncollect=$newnum WHERE tnid=$tnid";
            // var_dump($sql4);
            $res4 = mysqli_query($link,$sql4);
            echo json_encode($arr);
          
 
        }
        
        if($rs['collect']==1){
                $sql2="UPDATE user_collect SET collect=2,icon='images/start0.png' WHERE userid=$uid AND tnid=$tnid";
                $res2 = mysqli_query($link,$sql2);
                // echo 'images/start0.png';
                $arr = array(); 
                array_push($arr,'images/start0.png');
                
                
                $newnum=$num0-1;
                // var_dump($newnum);
                // echo $newnum;
                array_push($arr,$newnum);
                $sql5="UPDATE travelnote SET tncollect=$newnum WHERE tnid=$tnid";
                // var_dump($sql5);
                $res5 = mysqli_query($link,$sql5);
                echo json_encode($arr);
                
            }else if($rs['collect']==2){
                $sql3="UPDATE user_collect SET collect=1,icon='images/start1.png' WHERE userid=$uid AND tnid=$tnid";
                $res3 = mysqli_query($link,$sql3);
                // echo 'images/start1.png';
                $arr = array(); 
                array_push($arr,'images/start1.png');
      
                $newnum=$num0+1;
                // var_dump($newnum);
                // echo $newnum;
                array_push($arr,$newnum);
                
                $sql6="UPDATE travelnote SET tncollect=$newnum WHERE tnid=$tnid";
                // var_dump($sql6);
                $res6 = mysqli_query($link,$sql6);
                echo json_encode($arr);
            }
        
      
    
        
 
      
        mysqli_close($link);
        
        
?>

?每点击一下,就进入show_icon.php,在php里面要重新select一下当前的值。

php返回多个echo,怎么取出返回值?

由于要返回的echo有多个(①返回icon路径? ②返回点击后的数量),所以我把它们放进数组里面

$arr = array();?
array_push($arr,'images/start1.png');

array_push($arr,$newnum);

echo json_encode($arr);

然后在js接收的时候,记得把数组转换成字符串形式

xhr.onreadystatechange = function(){
              if(xhr.readyState == 4){
                //   alert(xhr.responseText);
                    var arr= JSON.parse(xhr.responseText);
                    
                    collect.src=arr[0];
                    collcetnum.innerText=arr[1];
 
                }
      }

var arr= JSON.parse(xhr.responseText);? ?//转成字符串
?collect.src=arr[0];? //取出数组里的第一个值(即点击之后所展示的图标的路径,然后赋值给img的src)
?collcetnum.innerText=arr[1];? //取出数组里的第二个值(即点击之后数量的变化,然后赋值给span的innerTEXT)

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:08:09  更:2022-03-08 22:09:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:41:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码