采用Jquery+Ajax+PHP+MySQL实现分类列表管理 - 上篇

jerry mysql 2015年08月20日 收藏

在实际应用中,我们要管理一个客户分类,实现对客户分类的增加、删除和修改等操作,如何让这些操作变得更人性化,让用户操作起来更加方便成了我们必须研究的课题。

本文将采用Jquery+Ajax+PHP+MySQL来实现一个客户分类列表的管理,如何利用Ajax和Json技术让用户操作起来觉得更轻松,且看本文一一讲解。

准备阶段

您需要具备HTML和Jquery等前端知识,以及基本的PHP程序和MySql数据库相关知识。要实现本文中的DEMO示例,首先需要一个mysql数据库:

  1. CREATE TABLE `catalist` (
  2. `cid` int(11) NOT NULL auto_increment,
  3. `title` varchar(100) NOT NULL,
  4. `sort` mediumint(6) NOT NULL default '0',
  5. PRIMARY KEY (`cid`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

其次在页面中引入jquery库,以及操作结果提示插件jNotify和删除确认插件hiAlert。后者两个插件在本站都有详细的讲解,读者可以通过链接了解下:jNotify:操作结果信息提示条 hiAlert:美化的网页对话框

将需要准备的文件一并加入到index.php的<head>之间。

  1. <script type="text/javascript" src="js/jquery.js"></script>
  2. <script type="text/javascript" src="js/jNotify.jquery.js"></script>
  3. <script type="text/javascript" src="js/jquery.alert.js"></script>
  4. <script type="text/javascript" src="js/global.js"></script>
  5. <link rel="stylesheet" type="text/css" href="css/alert.css" />

准备完毕我们进入主题。

index.php

index.php是主体页面,读取了数据库中的分类数据,以列表展示,并提供了增加、删除和修改的功能按钮。

  1. <?php
  2. include_once('connect.php'); //连接数据库
  3. $query = mysql_query("select * from catalist order by cid asc");
  4. while($row=mysql_fetch_array($query)){
  5. $list .= "<li rel='".$row['cid']."'><span class='del' title='删除'></span>
  6. <span class='edit' title='编辑'></span><span class='txt'>".$row['title']."</span></li>";
  7. }
  8. ?>

以上代码通过读取数据表中的数据,返回一个列表字符串。然后我们要将字符串输出到对应的列表中,代码如下:

  1. <div class="selectlist">
  2. <h3>客户类别</h3>
  3. <ul id="catalist">
  4. <?php echo $list;?>
  5. </ul>
  6. <p><a href="javascript:;" onclick="addOpt()">新增一项</a></p>
  7. </div>

试着往数据表中添加几条数据,可以看到一个分类列表。

CSS

  1. .input{width:160px; padding:2px; border:1px solid #d3d3d3}
  2. .cur_tr{background:#ffc}
  3. .selectlist{width:280px; margin:30px auto; border:1px solid #ccc;}
  4. .selectlist h3{height:32px; line-height:32px; padding:0 4px; border-bottom:1px dotted #d3d3d3;
  5. background:#f7f7f7}
  6. .selectlist h3 span{float:right; font-weight:500}
  7. .selectlist ul{margin-top:4px; margin-left:20px; list-style-type: disc}
  8. .selectlist ul li{line-height:26px}
  9. .selectlist p{line-height:28px; padding-left:6px}
  10. .selectlist ul li span{width:20px; height:20px}
  11. .selectlist ul li span.edit{ float:right;background:url(images/edits.gif) no-repeat 0 5px;
  12. cursor:pointer}
  13. .selectlist ul li span.del,.selectlist ul li span.dels,.selectlist ul li span.cancer{
  14. float:right;background:url(images/del.gif) no-repeat 0 5px; cursor:pointer}
  15. .selectlist ul li span.ok,.selectlist ul li span.oks{float:right;background:url(images/ok.gif)
  16. no-repeat 0 5px; cursor:pointer}

CSS我就不详细讲解,看下就明白了,最终显示的效果如图:

新增项操作

在global.js加入addOpt()函数:

  1. function addOpt(){
  2. var str = "<li><span class='dels' title='取消'></span><span class='ok' title='保存'></span>
  3. <input type='text' class='input' /></li>";
  4. $("#catalist").append(str);
  5. }

通过单击“新增一项”链接,向DOM中添加了一个新增项的输入框。

当用户输入内容后,点击“保存”,将会触发一个ajax操作,先看代码:

  1. $(function(){
  2. //保存新增项
  3. $(".ok").live('click',function(){
  4. var btn = $(this);
  5. var input_str = btn.parent().find('input').val();
  6. if(input_str==""){
  7. jNotify("请输入类别!");
  8. return false;
  9. }
  10. var str = escape(input_str);
  11. $.getJSON("post.php?action=add&title="+str,function(json){
  12. if(json.success==1){
  13. var li = "<li rel='"+json.id+"'><span class='del' title='删除'>
  14. </span><span class='edit' title='编辑'></span><span class='txt'>"+
  15. json.title+"</span></li>";
  16. $("#catalist").append(li);
  17. btn.parent().remove();
  18. jSuccess("恭喜,操作成功!");
  19. }else{
  20. jNotify("出错了!");
  21. return false;
  22. }
  23. });
  24. });
  25. });

首先获取用户输入的内容,如果没有输入任何内容则提示用户输入内容,然后将用户输入的内容进行escape编码,保证中文字符能正确传输给后台程序识别。然后通过$.getJSON方法向后台post.php发起一个异步的Ajax请求。后台post.php接收参数值并进行相关处理,前端代码通过响应后台返回的JSON数据,如果新增成功,则向列表后面追加一项,并提示用户“操作成功”,如果失败则提示用户“出错了”。

如果要取消新增项操作,只需当单击“取消”按钮时执行以下代码:

  1. //取消新增项
  2. $(".dels").live('click',function(){
  3. $(this).parent().remove(); //将新增项移除
  4. });

后台post.php需要处理新增项内容,代码如下:

  1. include_once('connect.php'); //连接数据库
  2. $action = $_GET['action'];
  3. switch($action){
  4. case 'add': //新增项
  5. $title = uniDecode($_GET['title'],'utf-8');
  6. $title = htmlspecialchars($title,ENT_QUOTES);
  7. $query = mysql_query("insert into catalist (cid,title) values (NULL,'$title')");
  8. if($query){
  9. $insertid = mysql_insert_id($link);
  10. $arr = array('id'=>$insertid,'title'=>$title,'success'=>1);
  11. }else{
  12. $arr = array('success'=>2);
  13. }
  14. echo json_encode($arr);
  15. break;
  16. case '':
  17. break;
  18. }

通过接收前端提交的内容,进行解码后,写入数据表中,并输出JSON数据格式供前台处理。关于uniDecode()函数,读者可以下载源码了解,主要是为了正确读取解析jquery通过异步提交的中文字符串。

添加项操作已经完成,下面请看删除项操作。

删除项操作

回到global.js,在$(function(){})加入下面的代码:

  1. //删除项
  2. $(".del").live('click',function(){
  3. var btn = $(this);
  4. var id = btn.parent().attr('rel');
  5. var URL = "post.php?action=del";
  6. hiConfirm('您确定要删除吗?', '提示',function(r){
  7. if(r){
  8. $.ajax({
  9. type: "POST",
  10. url: URL,
  11. data: "id="+id,
  12. success: function(msg){
  13. if(msg==1){
  14. jSuccess("删除成功!");
  15. btn.parent().remove();
  16. }else{
  17. jNotify("操作失败!");
  18. return false;
  19. }
  20. }
  21. });
  22. }
  23. });
  24. });

显然,通过单击“删除”按钮,同样是向后台post.php发送一个ajax请求,将删除项对应的参数ID发送给后台并响应后台处理结果,如果成功,则提示用户“删除成功”,并通过remove()将数据项移除,如果失败,则提示“操作失败”。

后台post.php接收参数并作出相应的处理:

  1. case 'del': //删除项
  2. $id = $_POST['id'];
  3. $query = mysql_query("delete from catalist where cid=".$id);
  4. if($query){
  5. echo '1';
  6. }else{
  7. echo '2';
  8. }
  9. break;

以上这段代码片段,加在post.php的switch语句中,执行了删除语句,并输出执行结果供前端处理。

限于篇幅,修改项操作在下一篇文中讲解,敬请关注。

下载地址