仿微博发布动态,php入门学习笔记

一直学的都是前端方面的东西,最近对php有点感兴趣,研究了一下以前项目中后台的php文件,也看了点视频,做了一个放微博发布动态的小功能,算是刚入门吧。记录一下学习过程。欢迎php的大佬指导批评^_^

代码部分

// 创建消息节点
        function createEle(id, txt, time, acc, ref) {
            var content = '<div class="infer" data-set='+ id +'>'+
                '<p>'+ txt +'</p>'+
                '<div class="bottom">'+
                    '<small>'+ time +'</small>'+
                    '<span>'+
                        '<a class="up" href="javascript:;">'+ acc +'</a>'+
                        '<a class="down" href="javascript:;">'+ ref +'</a>'+
                        '<a class="inferDel" href="javascript:;">删除</a>'+
                    '</span>'+
                '</div>'+
            '</div>';
            $('.create').prepend(content);
        }
        // 初始加载
        init();
        function init() {
            $.ajax({
                type: 'POST',
                url: 'weibo.php',
                data: 'act=update',
                success: function (res) {
                    var data = JSON.parse(res);
                    $(data).each(function (index, value) {
                        createEle(data[index].id, data[index].content, data[index].uptime, data[index].acc, data[index].ref);
                    })
                }
            })
        }
        // 获取时间
        function time() {
            var data = new Date();
            function change(val) {
                if (val < 10) {
                    return '0' + val;
                } else {
                    return val;
                }
            }
            var arr = [data.getMonth() + 1 + '月', data.getDay() + '日 ', data.getHours() + ':', change(data.getMinutes()) + ':', change(data.getSeconds())];
            return arr.join('');
        }
        // 发送 创建
        $('#send').click(function () {
            if ($('#text').val()) {
                var txt = $('#text').val();
                $.ajax({
                    type: 'POST',
                    url: 'weibo.php',
                    data: 'act=add&content='+txt+'&time='+time(),
                    success: function(res){
                        var mul = 0;
                        var data = JSON.parse(res);
                            createEle(data[data.length - 1].id, txt, time(), 0, 0);
                    }
                });
            } else {
                alert('输入不能为空');
            }
        });
        // 删除
        $('body').on('click', '.inferDel', function () {
            $(this).parents('.infer').remove();
            $.ajax({
                type: 'POST',
                url: 'weibo.php',
                data: 'act=del&id='+$(this).parents('.infer').attr('data-set'),
                success: function(res){
                }
            });
        })
        // 点赞
        $('body').on('click', '.up', function () {
            $(this).html(parseInt($(this).html()) + 1);
            $.ajax({
                type: 'POST',
                url: 'weibo.php',
                data: 'act=acc&id='+$(this).parents('.infer').attr('data-set')+'&acc='+$(this).html(),
                success: function(res){
                }
            });
        })
        // 踩点
        $('body').on('click', '.down', function () {
            $(this).html(parseInt($(this).html()) + 1);
            $.ajax({
                type: 'POST',
                url: 'weibo.php',
                data: 'act=ref&id='+$(this).parents('.infer').attr('data-set')+'&ref='+$(this).html(),
                success: function(res){
                }
            });
        })

php

<?php
    // 设置页面内容是html,编码格式是utf-8
    header('Content-type:text/html;charset=utf-8');
    // 设置默认时区
    date_default_timezone_set('Asia/Shanghai');
    // 设置时间格式
    define('DATETIME', date("y/m/d h:i:s"));
    // 显示错误信息On
    ini_set('display_errors', 'On');
    // 连接数据库
    // localhost是连接本地,root数据账号 数据库密码是空 数据库名usersql
    $con = new mysqli('localhost', 'root', '', 'usersql');
    // 设置连接字符集
    mysqli_query($con, 'set character set utf8');
    // 设置客户端字符集
    mysqli_query($con, 'set names utf8');
    // 设置数据库报错信息
    if ($con->connect_error) {
        die('数据库连接失败'.$con->connect_error);
    } else {
        // echo '数据库连接成功';
    }
     
    // 插入数据
    if ($_POST['act']=='add') {
        $txt = $_POST['content'];
        $time = $_POST['time'];
        // echo $time;
        $sql = "INSERT INTO weibo (content, uptime) VALUES ('$txt', '$time')";
        $con->query($sql);
        $sql2 = 'SELECT * FROM weibo';
        $result = $con->query($sql2);
        if ($result) {
            $test = array();
            while($row = $result->fetch_assoc()) {
                $info = array("id" => $row['id'], "content" => $row['content'], "uptime" => $row['uptime'], "acc" => $row['acc'], "ref" => $row['ref']);
                array_push($test, $info);
            }
            echo json_encode($test);
        } else {
            echo "Error";
        }
        // if ($con->query($sql)) {
        //     echo mysqli_insert_id($con);
        // } else {
        //     echo "Error";
        // }
    }
    // 删除数据
    if ($_POST['act']=='del') {
        $id = $_POST['id'];
        $sql = "DELETE FROM weibo WHERE id = '$id'";
        $con->query($sql);
    }
    // 点赞数据
    if ($_POST['act']=='acc') {
        $id = $_POST['id'];
        $acc = $_POST['acc'];
        $sql = "UPDATE weibo SET acc = '$acc'  WHERE id = '$id'";
        $con->query($sql);
    }
    // 踩点数据
    if ($_POST['act']=='ref') {
        $id = $_POST['id'];
        $ref = $_POST['ref'];
        $sql = "UPDATE weibo SET ref = '$ref'  WHERE id = '$id'";
        $con->query($sql);
    }
    // 加载数据库
    if ($_POST['act']=='update') {
        $sql = 'SELECT * FROM weibo';
        $result = $con->query($sql);
        if ($result) {
            $test = array();
            while($row = $result->fetch_assoc()) {
                $info = array("id" => $row['id'], "content" => $row['content'], "uptime" => $row['uptime'], "acc" => $row['acc'], "ref" => $row['ref']);
                array_push($test, $info);
            }
            echo json_encode($test);
        } else {
            echo "Error";
        }
    }
    $con->close();
?>

写完之后才知道$con->query($sql)是老版本的写法,现在的语法是mysqli_query($conn, $sql)。
最后加载数据库,对把数据处理成数组对象,转成json格式传递到前端,这里还是稍微纠结了一会儿,感觉写的可读性有点差……

2018-12-15 优化更新
// 加载数据库
    if ($_POST['act']=='update') {
        $sql = 'SELECT * FROM weibo';
        $result = mysqli_query($con, $sql);
        // if ($result) {
        $info = mysqli_fetch_all($result, MYSQLI_ASSOC);
        echo json_encode($info, JSON_UNESCAPED_UNICODE);
            // $test = array();
            // while($row = $result->fetch_assoc()) {
            //     array_push($test, $row);
         //    }
            // echo json_encode($test, JSON_UNESCAPED_UNICODE);
            // echo json_encode($test);
        // } else {
        //     echo "Error";
        // }
    }

刚开始写的时候不知道用什么方法返回结果集,用了fetch_assoc()方法获取一行关联数组,再array_push()进一个空数组里。发现有mysqli_fetch_all()方法之后感觉自己愚蠢至极……直接用mysqli_fetch_all()处理结果集就行了,要加上MYSQLI_ASSOC使返回的是关联数组,方便AJAX遍历,否则返回的是没有索引的数组格式。

相关推荐