이번에는 Ajax+mysql로 게시판을 만드는 기능을 가져오겠습니다. Ajax+mysql로 게시판을 만들 때 주의사항은 무엇인가요?
최근 Ajax와 MySQL 간의 데이터 상호 작용을 구현하기 위해 작은 데모를 만들었습니다. js 부분은 jq를 사용하고, 백엔드는 php를 사용하며, 데이터베이스는 mysql입니다. 나중에 node+mongodb 버전을 만들겠습니다.
mysql의 사용 및 설치에 대해서는 자세히 설명하지 않겠습니다. Baidu xampp, Apache 서버 및 mysql 데이터베이스를 직접 통합했는데 매우 사용하기 쉽습니다.
먼저 서버와 데이터베이스를 엽니다. 먼저 여기에 "11" 데이터베이스를 만든 다음 마이크로블로그라는 테이블을 만들었습니다. (참고: 여기서는 높은 버전의 mysql을 사용하고 있으며 데이터베이스에 연결하는 방법은 PHP입니다. 모두 mysqli_ 입니다. 버전이 너무 낮다면 mysql_ 메소드를 이용해서 직접 코드를 수정해주세요.)
코드 부분은 다음과 같습니다:
html 페이지와 js 부분:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>微博留言板</title> <style type="text/css"> *{ margin: 0; padding: 0; } #box{ width: 600px; /*height: 500px;*/ border: 2px solid rgb(85,85,85); border-radius: 15px; margin: 50px auto; padding: 20px 10px 15px; background-color: rgb(85,85,85); } #content{ display: block; resize: none; width: 550px; height: 200px; margin: 0 auto; border: 2px solid rgb(225,225,225); border-radius: 10px; text-align: center; font-size: 30px; background-color: rgb(225,225,225); } #content:focus{ outline: none; border: 2px solid rgb(225,225,225); box-shadow: 0 0 15px rgb(225,225,225); } #btn{ border: 2px solid rgb(255,204,0); width: 80px; height: 40px; border-radius: 5px; margin-top: 30px; font-size: 17px; cursor: pointer; outline: none; background-color: rgb(255,204,0); } .list{ list-style: none; background-color: rgb(249,249,249); margin-top: 20px; } .list>li{ padding: 20px 10px 10px; border-bottom: 2px solid rgb(68,68,68); font-size: 20px; color: rgb(200,214,225); position: relative; word-break: break-word; word-wrap: break-word; background-color: rgb(85,85,85); } .list>li>.control{ position: absolute; bottom: 3px; right: 5px; font-size: 14px; } .list>li>p{ margin-bottom: 25px; } .control span,.control em{ display: inline-block; margin-right: 15px; } .control em{ color: darkblue; cursor: pointer; } a{ text-decoration: none; color: darkred; } #page>a{ display:inline-block; width: 40px; height: 30px; margin-top: 10px; text-align: center; line-height: 30px; font-size: 20px; border-radius: 5px; color: white; background-color: rgb(51,21,70); } #head{ color: rgb(200,214,225); font-size: 30px; height: 50px; border-bottom: 2px solid rgb(68,68,68); margin-bottom: 20px; } </style> </head> <body> <p id="box"> <p id="head"> 留言板 </p> <p id="fill_in"> <textarea id="content"></textarea> <button id="btn">提交留言</button> </p> <!--留言列表--> <p id="message_text"> <ul class="list"> </ul> </p> <!--分页--> <p id="page"> <a href="javasript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" >1</a> <a href="javasript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" >2</a> </p> </p> </body> <script src="Jq/jquery-3.1.1.min.js"> </html>
코드가 완전히 표시되지 않습니다. 다음은 코드의 PHP 부분입니다.
계속 01부, jq의 ajax 요청:
<script type="text/javascript"> $(function(){ $("#btn").on("click",function(){ if ($("#content").val() == "") { alert("~~客官,说一句再走呗~~"); return; } else{ $.ajax({ type:"get", url:"http://localhost/phpStudy/ajax03/message.php", async:true, dataType:"json", data:{ content:$("#content").val(), act:"add" }, success:function(data){ // var result = JSON.parse(data); if (data.error==0) { createLi(data.id,$("#content").val(),data.time); } else{ alert(data.msg); } } }); } }); //创建节点 function createLi(id,content,time){ var html = $('<li><p>'+content+'</p><p class="control"><span>时间:'+time+'</span>顶:<em>0</em>踩:<em>0</em><a class="remove" href="javasript:void(0)" rel="external nofollow" rel="external nofollow" rel="external nofollow" >删除</a></p></li>'); $(".list").prepend(html); var h = html.height(); html.height(0); html.stop().animate({ height:h },300); //删除 html.find(".remove").on("click",function(){ html.stop().animate({ height:0 },300,function(){ html.remove(); }) }); } }) </script>
이 부분은 PHP 코드 부분입니다:
<?php header("Content-type:text/html;charset=utf8"); date_default_timezone_set("PRC"); //链接数据库 $link = mysqli_connect("localhost", "root", "", "eleven"); //设置数据库编码格式 mysqli_query($link, "set names utf8"); ?>
참고: 이 부분은 다른 일을 배울 때 호출했기 때문에 공개 코드로 작성했습니다. 따라서 다음 코드는 will have
include_once "comment.php";
이 줄은 다른 코드를 나타냅니다.
<?php /* * 开发文档 * 1.用于提交的留言留言进行存储 * url:http://localhost/phpStudy/ajax03/message.php * 提交方式:get * 提交参数说明: * content 必须 留言板内容 * act 必须 借口标识 * 返回参数说明 * 成功:{"error":"0","id":1,"time":"2016-11-30"} * 失败:{"error":1,"msg":"留言失败,请重试"} * * 2.up * id 必须 留言的id编号 * act 必须 接口标识 up * 返回声明 * 成功:{"error":"0"} * 失败:{"error":"1","msg":"点赞失败"} * * 3.分页(获取页码的接口); * act 必须 接口标识 count * 返回参数说明: * 成功:{"error":"0","countPage":"3"}; * 失败:{"error":"1","msg":"请求数据失败,请重试!"} * * 4.分页(点击页码跳转) * url:http://localhost/phpStudy/ajax03/message.php * 提交方式:get * 提交参数说明: * starPage 必须参数 页码索引值 * act 必须 接口标识 page * 返回参数说明 * 成功:{"error":"0","data":[{},{},{},{},{}]} * 失败:{"error":"1","msg":"数据查询失败,请重试!"} * */ include_once "comment.php"; $act = $_GET["act"];//接口请求标识 switch ($act) { case 'add'://提交留言 $content = $_GET["content"]; $time = time(); $times = date("Y-m-d H:i:s",$time); $query = "INSERT INTO microblog(id,content,time) VALUES(null,'{$content}','{$times}')"; mysqli_query($link,$query); $insertId = mysqli_insert_id($link); if($insertId>0){ $arr = ["error"=>0,"id"=>$insertId,"time"=>$times]; echo json_encode($arr);//将数组转化为json,方便前端使用 } else{ $arr = ["error"=>1,"msg"=>"留言失败,请重试!"]; echo json_encode($arr);//将数组转化为json,方便前端使用 } break; case 'up': $id = $_GET['id']; $search = "SELECT up FROM microblog WHERE id = $id"; $result = mysqli_query($link, $search); $upNum = mysqli_fetch_row($result)[0]; $upNum++; $query = "UPDATE microblog SET up='{$upNum}' WHERE id = '{$id}'"; mysqli_query($link,$query); if(mysqli_affected_rows($link)){//更新数据成功 echo '{"error":"0"}'; } else{//更新失败 echo '{"error":"1","msg":"点赞失败!"}'; } break; case 'down': $id = $_GET['id']; $search = "SELECT down FROM microblog WHERE id = $id"; $result = mysqli_query($link, $search); $downNum = mysqli_fetch_row($result)[0]; $downNum++; $query = "UPDATE microblog SET down='{$downNum}' WHERE id = '{$id}'"; mysqli_query($link,$query); if(mysqli_affected_rows($link)){//更新数据成功 echo '{"error":"0"}'; } else{//更新失败 echo '{"error":"1","msg":"踩失败!"}'; } break; case 'remove': $id = $_GET['id']; $query ="DELETE FROM microblog WHERE id='{$id}'"; mysqli_query($link,$query); if(mysqli_affected_rows($link)>0){//删除数据成功 echo '{"error":"0"}'; } else{ echo '{"error":"1","msg":"删除失败!"}'; } break; case 'count'://返回总页码 $query = "SELECT count(id) FROM microblog"; $result = mysqli_query($link, $query); $count = mysqli_fetch_row($result)[0];//以索引数组形式返回查询结果 $countPage = ceil($count/5); echo '{"error":"0","countPage":"'.$countPage.'"}'; break; case 'page'://点击分页或者是页面第一次加载 $index = $_GET["num"]*5; $search = "SELECT * FROM microblog ORDER BY id DESC LIMIT {$index},5";//倒叙查询留言 $result = mysqli_query($link, $search); $arr = [];//存查询出来的数据 while($row = mysqli_fetch_assoc($result)){ array_unshift($arr,$row); } // print_r($arr); // {"error":"0","info":[{},{},{},{},{}]} $resultArr = ["error"=>"0","info"=>$arr]; echo json_encode($resultArr); break; } ?>
이 기사의 사례를 읽은 후 방법을 마스터했다고 생각합니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사에 주목하세요!
추천 자료:
Ajax를 사용한 동기화와 비동기 구현의 차이점은 무엇입니까?
AJAX 도메인 간 요청 JSONP JSON 데이터를 얻는 자세한 단계(코드 포함)
위 내용은 Ajax+mysql은 메시지 보드 기능을 생성합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!