PHP+Mysql+jQuery查询和列表框选择操作实例讲解


Posted in PHP onOctober 22, 2015

本文讲解如何通过ajax查询mysql数据,并将返回的数据显示在待选列表中,再通过选择最终将选项加入到已选区,可以用在许多后台管理系统中。本文列表框的操作依赖jquery插件。

PHP+Mysql+jQuery查询和列表框选择操作实例讲解

HTML

<form id="sel_form" action="post.php" method="post"> 
  <p><input type="text" name="keys" id="keys" value="输入姓名或手机号码" onclick="this.value=''" /> 
  <input type="button" id="searchOption" value="搜索" /> <span id="msg_ser"></span></p> 
  <div id="sel"> 
  <select name="liOption[]" id='liOption' multiple='multiple' size='8'> 
  </select> 
  </div> 
  <input type="submit" value="提 交" /> 
</form>

说明,HTML内容是一个表单,里面放置有一个查询输入框,和一个列表框,以及相关按钮。

MYSQL数据表结构

CREATE TABLE IF NOT EXISTS `t_mult` ( 
 `id` int(11) NOT NULL auto_increment, 
 `username` varchar(32) NOT NULL, 
 `phone` varchar(20) NOT NULL, 
 PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

表t_mult是一张联系人资料表,包括姓名和手机号码字段。

CSS

<link rel="stylesheet" type="text/css" href="jquery.multiselect2side.css" />

本例中只加载了Multiselect插件所需的样式文件,其他CSS大家可以自行设计。
JAVASCRIPT
首先需要引用本例所需的两个js文件。

<script type="text/javascript" src="js/jquery.js"></script> 
<script type="text/javascript" src="js/jquery.multiselect2side.js"></script> 
<link rel="stylesheet" type="text/css" href="jquery.multiselect2side.css" />

接着我们来调用Multiselect插件。

$("#liOption").multiselect2side({ 
  selectedPosition: 'right', 
  moveOptions: false, 
  labelsx: '待选区', 
  labeldx: '已选区' 
});

然后我们来写搜索按钮进行Ajax查询数据的操作。

$("#searchOption").click(function(){ 
  var keys=$("#keys").val(); 
  $.ajax({ 
     type: "POST", 
     url: "action.php", 
     data: "title="+keys, 
     success: function(msg){ 
      if(msg==1){ 
        $("#msg_ser").show().html("没有记录!"); 
      }else{ 
        $("#liOptionms2side__sx").html(msg); 
        $("#msg_ser").html(""); 
      } 
     } 
  }); 
  $("#msg_ser").ajaxSend(function(event, request, settings){ 
    $(this).html(""); 
  }); 
});

说明,当点击搜索按钮时,进行的是Ajax异步操作,JAVASCRIPT将获取的搜索框的输入值,以POST方式传递给后台程序action.php处理,处理后,返回不同的结果给JAVASCRIPT,如果返回1,HTML页面会提示“没有记录”,反之,则将结果输出给左边列表框(待选区):liOptionms2side__sx。注意关键的地方到了,为什么列表框不是XHTML离的liOption,而变成了liOptionms2side__sx了呢?这个要从Multiselect插件说起,Multiselect插件其实就是将一个列表框装换成左右两个列表框,已供相关操作,通过查看其插件代码不难发现,左边的列表框名为:liOptionms2side__sx,右边列表框(已选区)名为:liOptionms2side__dx,后面会用到。

PHP

首先来看action.php的处理。
第一步是连接数据库。

$conn=mysql_connect("localhost","root",""); 
mysql_select_db("demo",$conn); 
mysql_query("SET names UTF8");

第二步读取数据,并输出。通过检测搜索框传来的值,构造不同的SQL语句,并将数据返回输出,代码如下:

$keys=trim($_POST['title']); 
$keys=mysql_real_escape_string($keys,$conn); 
if(!empty($keys)){ 
   $sql="select * from t_mult where username like '%$keys%' or phone='$keys'"; 
}else{ 
   $sql="select * from t_mult"; 
} 
$query=mysql_query($sql); 
$count=mysql_num_rows($query); 
if($count>0){ 
  while($row=mysql_fetch_array($query)){ 
    $str.="<option value='".$row['id']."'>".$row['username']."-".$row['phone']."</option>"; 
  } 
  echo $str; 
}else{ 
  echo "1"; 
}

最后还有一个提交操作,后台post.php程序来获取最终提交的项的值。

$selID=$_POST['liOptionms2side__dx']; 
if(!empty($selID)){ 
  $str=implode(",",$selID); 
  echo $str; 
}else{ 
  echo "没有选择任何项目!"; 
}

注意,我们获取的是右边列表框liOptionms2side__dx的值,而不是liOption的值。
一个查询、操作的例子实现了,但是还有一点点瑕疵,在待选区往已选区添加项目时,如何判断控制已经添加过的项目不能重复添加,这个就留给大家思考吧,试一试有什么好的解决方式。

PHP 相关文章推荐
如何使用PHP中的字符串函数
Oct 09 PHP
基于qmail的完整WEBMAIL解决方案安装详解
Oct 09 PHP
php中显示数组与对象的实现代码
Apr 18 PHP
PHP文件上传主要代码讲解
Sep 30 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
Sep 27 PHP
php中的字符编码转换函数用法示例
Oct 20 PHP
php专用数组排序类ArraySortUtil用法实例
Apr 03 PHP
PHP+JS三级菜单联动菜单实现方法
Feb 24 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
Mar 06 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
Oct 14 PHP
PHP获取input输入框中的值去数据库比较显示出来
Nov 16 PHP
php实现 master-worker 守护多进程模式的实例代码
Jul 20 PHP
PHP实现无限级分类(不使用递归)
Oct 22 #PHP
PHP实现递归无限级分类
Oct 22 #PHP
php防止网站被攻击的应急代码
Oct 21 #PHP
PHP统计当前在线用户数实例讲解
Oct 21 #PHP
php精确的统计在线人数的方法
Oct 21 #PHP
为你总结一些php信息函数
Oct 21 #PHP
深入理解PHP变量的值类型和引用类型
Oct 21 #PHP
You might like
最令PHP初学者头痛的十四个问题
2006/07/12 PHP
php sprintf()函数让你的sql操作更安全
2008/07/23 PHP
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
nicejforms——美化表单不用愁
2007/02/20 Javascript
aspx中利用js实现确认删除代码
2010/07/22 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
jQuery中each()方法用法实例
2014/12/27 Javascript
jQuery 更改checkbox的状态,无效的解决方法
2016/07/22 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
Python实现的连接mssql数据库操作示例
2018/08/17 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
Python爬取网页信息的示例
2020/09/24 Python
详解python的super()的作用和原理
2020/10/29 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
2021/01/27 Python
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
什么是SQL Server的确定性函数和不确定性函数
2016/08/04 面试题
网络通讯中,端口有什么含义,端口的取值范围
2012/11/23 面试题
人力资源作业细则
2014/03/03 职场文书
大学生工作求职信
2014/06/23 职场文书
2014年小学重阳节活动策划方案
2014/09/16 职场文书
地道战观后感2000字
2015/06/04 职场文书
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
Java中的继承、多态以及封装
2022/04/11 Java/Android