一直学的都是前端方面的东西,最近对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遍历,否则返回的是没有索引的数组格式。