自己工作中遇到的问题及解决总结

ajax 上传excel文件 并用 PHPEXCEL excel数据导入数据库

 

/// 后台上传操作,并phpexcel处理数据成数组

public function upload(){

$Reader_M = D("Readers");

$istea = I("post.istea",0,intval);

    $upload = new \Think\Upload();// 实例化上传类

    $upload->maxSize   =     3145728 ;// 设置附件上传大小

    $upload->exts      =     array('xls');// 设置附件上传类型

    $upload->rootPath  =     'Public/upload/'; // 设置附件上传根目录

    $upload->savePath  =     ''; // 设置附件上传(子)目录

    $upload->hash      =     false;

    // 上传文件 

    $info   =   $upload->upload();

 

//开始读取文档

import("Org.Util.PHPExcel");

$filename="Public/upload/".$info['file']['savepath'].$info['file']['savename'];

$PHPExcel = new \PHPExcel();

import("Org.Util.PHPExcel.Reader.Excel5");

import("Org.Util.PHPExcel.Reader.Excel2007");

$PHPReader = new \PHPExcel_Reader_Excel2007();

        if (!$PHPReader->canRead($filename)) {

            $PHPReader = new \PHPExcel_Reader_Excel5();

            if (!$PHPReader->canRead($filename)){

                return false;

            }

        }

 

        $E = $PHPReader->load($filename);

        $currentSheet=$E->getSheet(0);

//获取总列数

$allColumn=$currentSheet->getHighestColumn();

//获取总行数

$allRow=$currentSheet->getHighestRow();

//循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始

for($currentRow=2;$currentRow<=$allRow;$currentRow++){

//从哪列开始,A表示第一列

for($currentColumn='A';$currentColumn<=$allColumn;$currentColumn++){

//数据坐标

$address=$currentColumn.$currentRow;

//读取到的数据,保存到数组$arr

$arr[$currentRow][$currentColumn]=$currentSheet->getCell($address)->getValue();

}

}

 

unlink($filename);  // 删除上传文件

rmdir($upload->rootPath.$info['file']['savepath']);  // 删除上传时创建的文件夹

//遍历数组$arr 加入数据库 Readers

$msg = array();

foreach ($arr as $k => $v) {

$info=$condition=array();

$text="";

if ($v["A"]) {

$text = $v["A"]."  ".$v["B"]."  ".$v["C"]."  ".$v["D"]."  ";

$condition = array("number"=>$v["A"]);

$re = $Reader_M->getOneinfo($condition);

if ($re) {

if ($istea) {

$msg[] = array("status"=>0,"msg"=>"职工号已存在 ","text"=>$text);

}else{

$msg[] = array("status"=>0,"msg"=>"学号已存在 ","text"=>$text);

}

continue;

}else{

if ($v["D"]) {

$condition = array("cardno"=>$v["D"]);

$re = $Reader_M->getOneinfo($condition);

if ($re) {

$msg[] = array("status"=>0,"msg"=>"读者证号已存在 ","text"=>$text);

continue;

}else{

$info["cardno"] = $v["D"];

}

}else{

$info["cardno"] = $v["A"];

}

$info["number"]  =  $v["A"];

$info["name"] =$v["B"];

$info["class"]   =$v["C"];

$info["istea"]   =  $istea;

$info["addtime"] =  time();

$res = $Reader_M->Add($info);

if ($res) {

$msg[] = array("status"=>1,"msg"=>"导入成功 ","text"=>$text);

continue;

}else{

$msg[] = array("status"=>0,"msg"=>"导入失败 ","text"=>$text);

continue;

}

}

}

}

 

$this->ajaxReturn($msg);

}

 

 

//  前台页面调用js方法

  function doUpload() {

     var formData = new FormData($( "#form1" )[0]);

     $.ajax({

          url: "{:U('Upload/upload')}",

          type: 'POST',

          data: formData,

          async: false,

          cache: false,

          contentType: false,

          processData: false,

          success: function (msg) {

            $("#msg").html('');

            $.each(msg,function(e,val){

              if (val.status) {

                $("#msg").append(""+val.text+val.msg+"

");

              }else{

                $("#msg").append(""+val.text+val.msg+"

");

              };

            })

            

          }

     });

     return false;

}

 

如何实现li列表中显示文字强制不换行,大于li宽度自动隐藏文字,这种效果在新闻列表中时很实用的,下面有个不错的示例,大家可以参考下

 

代码如下:


li{ 
display:block; 
font-size:14px; 
height:16px; 
line-height:16px; 
width:330px; 
white-space:nowrap; //强制不换行 
overflow:hidden; //自动隐藏文字 
text-overflow: ellipsis; //文字隐藏后添加省略号 
-o-text-overflow:ellipsis; //适用于opera浏览器 


涉及关键属性的语法: 

1、语法: 
text-overflow : clip | ellipsis 
参数: 
clip :  不显示省略标记(...),而是简单的裁切 
ellipsis :  当对象内文本溢出时显示省略标记(...) 

2、 
语法: 
overflow : visible | auto | hidden | scroll 
参数: 
visible :  不剪切内容也不添加滚动条。假如显式声明此默认值,对象将被剪切为包含对象的window或frame的大小。并且clip属性设置将失效 
auto :  此为body对象和textarea的默认值。在需要时剪切内容并添加滚动条 
hidden :  不显示超过对象尺寸的内容 
scroll :  总是显示滚动条 

3、 
语法: 
white-space : normal | pre | nowrap 
参数: 
normal :  默认处理方式 
pre :  用等宽字体显示预先格式化的文本。不合并字间的空白距离和进行两端对齐。参阅pre对象 
nowrap :  强制在同一行内显示所有文本,直到文本结束或者遭遇br对象。参阅td,div等对象的nowrap属性(特性) 

 

 

 

attr 未指定元素获取/增加属性

 

$(p).arr(id获取p标签的id

 

$(p).arr(id,5) 设置p标签的id值为5

 

$(p).arr(id,function(){

return 5;

}) 以函数返回值的形式设置p标签的id

 

$(p).arr({id:5,class:name})  批量设置p标签的属性值

 

POST xxxx 404 (Not Found)   jquery.min.js:4 

 

1、后台语句有误,thinkphp里 常见sql语句错误加了“;”

2、请求参数有误

 

更新字段

如果只是更新个别字段的值,可以使用setField方法。

使用示例:

 

$User = M("User"); // 实例化User对象

// 更改用户的name

$User-> where('id=5')->setField('name','ThinkPHP');

 

setField方法支持同时更新多个字段,只需要传入数组即可,例如:

$User = M("User"); // 实例化User对象

// 更改用户的nameemail的值

$data = array('name'=>'ThinkPHP','email'=>'[email protected]');

$User-> where('id=5')->setField($data);

 

而对于统计字段(通常指的是数字类型)的更新,系统还提供了setIncsetDec方法。

$User = M("User"); // 实例化User对象

$User->where('id=5')->setInc('score',3); // 用户的积分加3

$User->where('id=5')->setInc('score'); // 用户的积分加1

$User->where('id=5')->setDec('score',5); // 用户的积分减5

$User->where('id=5')->setDec('score'); // 用户的积分减1

 

js 字符串截取函数及用法

 

1.substr(start,length) 

 start 整数,起始位置,可为负数

 length 要截取的字符串长度

2.substring(start,stop)

 start 起始位置,不能为负数

 stop 结束位置,不能为负数

3.slice(start,stop)

 start 起始位置,可为负数

 stop 结束位置,可为负数

String 对象的方法 slice()substring() 和 substr() (不建议使用)都可返回字符串的指定部分。slice() 比 substring() 要灵活一些,因为它允许使用负数作为参数。slice() 与 substr() 有所不同,因为它用两个字符的位置来指定子串,而 substr() 则用字符位置和长度来指定子串。

你可能感兴趣的:(自己工作中遇到的问题及解决总结)