初识通用数据库操作类――前端easyui-datagrid,form(php)


Posted in PHP onJuly 31, 2015

初识通用数据库操作类——前端easyui-datagrid,form(php),实现代码比较简单,具体实现步骤请看下文。

实现功能:

    左端datagrid显示简略信息,右侧显示选中行详细信息,数据库增删改

(1)点击选中行,右侧显示详细信息,其中【新增】、【修改】、【删除】按钮可用,【保存】按钮禁用

(2)点击【新增】按钮,【修改】,【删除】按钮禁用,【保存】按钮启用

(3)点击【修改】按钮,【新增】,【删除】按钮禁用

难点:通用数据库操作类中insert方法跟update方法

最终效果图:

前端功能不是很完善,按钮之间逻辑还是有点问题,最后补充前端代码

其中Formain.php对前端传值判断,并调用actSQL.class.php获得结果

代码比较简单

如下:

<?php
  require('include/mysql_connect/actSQL.class.php');
  $key=$_REQUEST['key'];
  $a=new actSQL('localhost','root','1234','tpss');
  //获取信息
  if($key=='1')
  {
   $a->getAllData('t_prekeychart');
  }
  if($key=='2')
  { 
   $objectstr=$_REQUEST['object'];   
   if($a->insertData($objectstr,'t_prekeychart'))
   {
    echo json_encode("true");
   }else{
    echo json_encode("false");
   }
   //test
   //$test='{"keychartid":"2","keyid":"2","keychartname":"2","level":"2","showtype":"2","helptips":"2","keylevel":"2","ishmap":"2"}';
   //$a->insertData($test,'t_prekeychart');
  }
  if($key=='3')
  { 
   $prekey=$_REQUEST['keychartid'];
   $prekeyname='keychartname';
   if($a->delData($prekey,$prekeyname,'t_prekeychart'))
   {
    echo json_encode("true");
   }else{
    echo json_encode("false");
   }
  }
  if($key=='4')
  {
   $objectstr=$_REQUEST['object'];
   $prekeyname='keychartid';
   if($a->updData($objectstr,$prekeyname,'t_prekeychart'))
   {
    echo json_encode("true");
   }else{
    echo json_encode("false");
   }
  }
?>

看Formain.php中出现的类的各个方法,简单思考一下

其中

getAllData($tablename)获取表格的所有信息,这个方法比较简单,一个简单的sql语句就可以搞定,最后将结果json格式返回即可

delData($prekey,$prekeyname,$tablename)删除指定信息,这个更简单,就不说了

insertData( $objectstr,$tablename ) ,其中$objectstr是json格式的字符串,$tablename表名,

难点是将拼凑成 insert into $tablename (......) values(.....) 这种语句

解决办法:

(1)根据$tablename获取所有的列名,并将列名数组转换为字符串,为最后sql语句的拼凑做准备,除此获取列名还有个目的,往下看

(2)将json格式的字符串$objectstr转换为关联数组,调用json_decode() 方法

补充json_decode()方法

mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )
接受一个 JSON 格式的字符串并且把它转换为 PHP 变量,其中assoc,当该参数为  TRUE   时,将返回 关联数组    。

(3)按 照查询到的列名顺序查询数据,数据为空时,赋值为NULL , 将结果存到数组,防止数据库插入数值错位(获取列名的另个原因)

(4)将(3)的结果转化为字符串,调用implode()方法

补充implode()方法:

string implode(string glue, array pieces);
本函数将数组的内容组合成一个字符串,参数 glue 是字之间的分隔符号

(5)拼凑sql语句字符串,然后向数据库插入

updData($objstr,$prekeyname,$tablename)方法难点也是在于sql语句的字符串拼凑,拼凑格式应该如下

update $tablename set ..... where $prekeyname=$data[$prekeyname]

前两步同insertData()

(3)遍历列名字符数组,获取非主键名的列名值,按照  “列名=列名值”  的字符串格式存入数组 ,这里就是set 后面部分的不完全字符串

(4)将(3)结果转换为字符串,将数组元素以   ','   分隔开,这个就是set后面最后的字符串 格式为“xx=xx,xx=xx”

(5)拼凑sql字符串,然后更新数据库

insertData()以及updData()函数如下

/*
   * 添加信息
   * @param:$objstr:json风格的数据库插入信息字符串
   *   $tablename:表名
   */
  function insertData($objstr,$tablename)
  {
    $dbc=$this->conData();
    if($dbc)
    { 
     $columnname=array();
     $columnname=$this->getColumns($tablename);
     //echo $columnname[0];
     $clos=implode(',',$columnname); //将列名数组转换为字符串
     //echo $clos;
     $data=json_decode($objstr,true); //将json格式的字符串转换为关联数组
     //echo $value['keychartname'];
     $values=array();
     foreach($columnname as $value)
     {
       //按照查询到的列名查询数据,数据为空的,赋值为NULL,防止数据库插入数值错位
       //echo $data[$value]."<br>";
       if(isset($data[$value]))
       {
         array_push($values,$data[$value]);
       }else{
        $data[$value]=NULL;
        array_push($value,$data[$value]);
       }
     }
     $strvalue=implode(',',$values);
     //echo $strvalue;
     /*
     * SQL: insert into $tablename($clos) values(...)
     */
     $sql=<<<SQL
     insert into $tablename($clos) values($strvalue);
SQL;
     //echo $sql;
     $res=mysqli_query($dbc,$sql);
     if($res)
     {
      return true;
     }else{
       return false;
     }
    }else{
      echo "连接错误!";
    } 
  }
/*
   *更新信息 
   *@param: $objstr:json风格的数据库更新信息字符串
   *   $tablename:表名
   *   $prekeyname:主键名  
   * */
  function updData($objstr,$prekeyname,$tablename)
  {
    $dbc=$this->conData();
    if($dbc)
    {
     $columnname=array();
     $columnname=$this->getColumns($tablename); 
     //$clos=implode(',',$columnname); //将列名数组转换为字符串
     $data=json_decode($objstr,true); //将json格式的字符串转换为关联数组
     $sets=array();
     foreach($columnname as $value)
     { 
      //列名不等于主键名获取值
      if($prekeyname!=$value)
      {
        //set $value=$data[$value];
        array_push($sets,"$value=$data[$value]");//接好的set语句部分
      }
     }
     //$sets数组转化为字符串
     $stringsets=implode(',',$sets);
     //echo $stringsets;
     /*
     * SQL:update $tablename set ..... where $prekeyname=$data[$prekeyname]; 
     * */
     $sql=<<<SQL
      update $tablename set $stringsets where $prekeyname=$data[$prekeyname];
SQL;
     $res=mysqli_query($dbc,$sql);
     if($res)
     {
      return true;
     }else{
      return false;
     }
    }else{
      echo "连接错误";
    }
  }
/*
   *获取表的所有列名
   *@param:$tablename:表名
   */
  function getColumns($tablename)
  { 
   $dbc=@mysqli_connect('localhost','root','1234','information_schema');
   if(!$dbc)
   {
    echo "Connect Error".mysqli_connect_error($dbc);
   }else
   {
    //连接成功,从表COLUMNS获取表的所有列名
    $sql="select COLUMN_NAME from columns where TABLE_NAME='$tablename'";
    $res=@mysqli_query($dbc,$sql);
    $items=array();
    if($res)
    {
     while($row=mysqli_fetch_array($res,MYSQLI_ASSOC))
     {
      $columnname=$row['COLUMN_NAME'];
      array_push($items,$columnname);
     }
    return $items;
    mysqli_close($dbc);
    }
    else{
     echo "查询失败,请检查SQL语句!";
     }
   }
  }

以上就是本文全部内容,希望大家喜欢。

PHP 相关文章推荐
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 PHP
php 结果集的分页实现代码
Mar 10 PHP
CI(CodeIgniter)框架介绍
Jun 09 PHP
ThinkPHP连接数据库及主从数据库的设置教程
Aug 22 PHP
使用PHPMailer实现邮件发送代码分享
Oct 23 PHP
ThinkPHP分组下自定义标签库实例
Nov 01 PHP
php隐藏IP地址后两位显示为星号的方法
Nov 21 PHP
Ajax和PHP正则表达式验证表单及验证码
Sep 24 PHP
PHP序列化操作方法分析
Sep 28 PHP
PHP基于递归实现的约瑟夫环算法示例
Aug 27 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
YII2框架使用控制台命令的方法分析
Mar 18 PHP
使用Appcan客户端自动更新PHP版本号(全)
Jul 31 #PHP
php使用Imagick生成图片的方法
Jul 31 #PHP
如何使用Gitblog和Markdown建自己的博客
Jul 31 #PHP
php自定义类fsocket模拟post或get请求的方法
Jul 31 #PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
Jul 31 #PHP
PHP中filter函数校验数据的方法详解
Jul 31 #PHP
PHP代码实现爬虫记录――超管用
Jul 31 #PHP
You might like
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
PHP 远程关机实现代码
2009/11/10 PHP
php学习之 数组声明
2011/06/09 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
2012/08/01 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
php微信开发之谷歌测距
2018/06/14 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
一个不错的应用,用于提交获取文章内容,不推荐用
2007/03/03 Javascript
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
jquery实现上下左右滑动的方法
2015/02/09 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
Vue.js路由vue-router使用方法详解
2017/03/20 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
[10:54]Team Spirit vs Navi
2018/06/07 DOTA
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python实现简单的文件传输与MySQL备份的脚本分享
2016/01/03 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
Django之模型层多表操作的实现
2019/01/08 Python
Python3 全自动更新已安装的模块实现
2020/01/06 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
python自动化办公操作PPT的实现
2021/02/05 Python
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
医学生实习自我鉴定
2013/09/27 职场文书
和平主题的演讲稿
2014/01/12 职场文书
2014年师德师风自我剖析材料
2014/09/27 职场文书
2015欢度元旦标语口号
2014/12/09 职场文书
2014年社区工会工作总结
2014/12/18 职场文书
小学数学教学随笔
2015/08/14 职场文书