PHP开发的一个小小项目,记录下实现思路(附上实现功能的示例代码)(二)

接着上次的功能;

单个删除:

<a href="javascript:del2({$vo['Stu_number']})"  
οnclick='return del();'>
<img src="__PUBLIC__/Images/xxx" ><a/>
<script>
function del2(Number_stu){
	var url="__URL__/delete2";
	$.post(url, {Number_stu:Number_stu,select:'1'}, function(msg){
        if(msg.info == 'ok') {
          alert('删除成功');
          window.location.reload();//删除成功后刷新本页面
        } else {
          alert('删除失败');
        }
      }, 'json')
}
</script>

多个删除:

<input type="button" class="submit2 btn btn-primary" name="Submit2" οnclick="frmSubmit2(this.form)" value="删除"/>

<script>
function frmSubmit2(form){
	var checkChild = document.getElementsByClassName('checkChild');  //获取信息用于判断

	var j=0;
		for(var i=0;i<checkChild.length;i++){
			if (checkChild[i].checked!=false) {
				j++;
			}
		}
	if (j!=0) {     //未选中信息直接点删除,则提示未选中信息
		if(confirm("确定要删除吗? ")) {
    			form.action = "__URL__/delete3";
        		form.submit();
	  	}else{
	    		return ;
	  	}
	}else{
		alert('未选中信息');
	}
			
}
</script>


前端代码:

功能:点击图标时显示或消失

          点击复选框时多选


//start search
<div class="col-md-12 search" id="search">  
			<form action="__URL__/xxx" method="POST">
				姓名:<input type="text" name="Name">
				学号:<input type="text" name="Number">
				专业:<input type="text" name="Major"> 
				<br/> 
				年级:<input type="text" name="Grade">
				班级:<input type="text" name="Class">
				<input class=" btn btn-primary" type="reset">
				<input type="submit" class="btn btn-primary" value="搜索">
			</form>
			
</div>
//end search

<form action="__URL__/xxx" method="POST">
<input type="submit" class="submit btn btn-primary" id="outExcel"  value="导出"/>
<thead>
				<th><input type="checkbox" id="checkParent"></th>
				<th>姓名</th>
				<th>学号</th>
				<th>专业</th>
				<th>年级</th>
				<th>班级</th>
				<th>政治面貌</th>
				<th>操作</th>
</thead>
{volist id="vo" name="list"}
	<tr>
	  <td><input type="checkbox" name="checkbox1[]" class="checkChild" value="{$vo['Stu_number']}"/></td>
	  <td>{$vo['xxx']}</td>
	  <td>{$vo['xxx']}</td>
	  <td>{$vo['xxx']}</td>
	  <td>{$vo['xxx']}</td>
	  <td>{$vo['xxx']}</td>
	  <td>{$vo['xxx']}</td>
	  <td>
		<a href="__URL__/edit/Number_stu/{$vo['xxx']} " title="修改">
		<img src="__PUBLIC__/Images/xxx" data-toggle="modal" data-target="#myModal3"></a>					
		<a href="javascript:del2({$vo['xxx']})"  
		οnclick='return del();'><img src="__PUBLIC__/Images/xxx" class="deleteStu"><a/>
	  </td>
	</tr>
{/volist}
</form>

Js:
window.onload = function(){
var search = document.getElementById('search');
var checkParent = document.getElementById('checkParent');
var checkChild = document.getElementsByClassName('checkChild');

searchIcon.onclick = function(){  //点击时显示框,对应上面的search代码

		if (search.style.display != "block") {
			search.style.display = "block";
		}else {
			search.style.display = "none";
		}
	}

checkParent.onclick = function(){	//点击属性栏的复选框时多选
		
		for(var i =0;i<checkChild.length;i++){
			if(checkParent.checked){
				checkChild[i].checked = true;

			}else{
				checkChild[i].checked = false;
			}	
		}
		
	}

}


导出excle表功能:

前端代码就上面那段,那个导出按钮

D(Member)->msgOut($select,$checkbox);

导出选中信息

$checkbox为复选框的值,是数组,我前端设置的是学号,用可以寻找相关信息的字段就行。用传过来的信息在数据库中寻找相应的值

此处的Member为模版,实例化模版并使用其中的方法

原本的代码中是有三种导出的形式,这里只是示例代码,理解后只需要做一些逻辑了


Member Model中:

function msgOut($select='',$list=''){
       $xlsModel = M(xxx);

       $all = $xlsModel->field('*')->select();    //所有基本信息
       $count2 = count($all);                     //所有基本信息的数量
	//此处的$list为复选框的一维数组,查询其中所有的值,需要重新构造查询语句,以下为构造方法
       if($list!=null){
            foreach ($list as $key => $value) {
                $b[]=Array('0'=>'eq','1'=>$value);
            }
            $b[]='or';
       }else{
            $b[]='';
       }


    if($select==1){                  //基本信息的导出
      $where2['Stu_number']=$b;                                                                                               $xlsData=$xlsModel->field('*')->where($where2)->order('Stu_number asc')->select();
 } else if($select==2){               //工作情况表导出
          $where2['Number_stu']=$b;
          $certificate=M(‘xxx’);    //实例化数据库中的表
          $xlsData = $certificate->field('*')->where($where2)->order('Number_stu asc')->select();
          $count=count($xlsData);

          for($i=0;$i<$count;$i++){
                for($j=0;$j<$count2;$j++){
                    if($xlsData[$i]['Number_stu']==$all_info[$j]['Stu_number']){
                         $xlsData[$i]['Name']=$all_info[$j]['Name'];
                         $xlsData[$i]['Sex']=$all_info[$j]['Sex'];
                         $xlsData[$i]['Major']=$all_info[$j]['Major'];
                         $xlsData[$i]['Grade']=$all_info[$j]['Grade'];
                         $xlsData[$i]['Class']=$all_info[$j]['Class'];
                    }
                }
            }

       }
switch($select){
	case '1'://竞赛相关信息的导出
        $data = array();
        foreach ($xlsData as $k=>$goods_info){
            $data[$k]['Name'] = $goods_info['Name'];
            $data[$k]['Sex'] = $goods_info['Sex'];
            $data[$k]['Number_stu'] = $goods_info['Number_stu'];
            $data[$k]['Major'] = $goods_info['Major'];
            $data[$k]['Grade']  = $goods_info['Grade'];
            $data[$k]['Class']  = $goods_info['Class'];
            $data[$k]['Name_project'] = $goods_info['Name_project'];
            $data[$k]['Techer_guidance'] = $goods_info['Techer_guidance'];
            $data[$k]['is_major'] = $goods_info['is_major'];
            $data[$k]['Time1'] = $goods_info['Time1'];
            $data[$k]['Grade2'] = $goods_info['Grade2'];
            $data[$k]['Count'] = $goods_info['Count'];
        }

        foreach ($data as $field=>$v){
            if($field == 'Name')
                $headArr[]='姓名';
            if($field == 'Sex')
                $headArr[]='性别';
            if($field == 'Number_stu')
                $headArr[]='学号';
            if($field == 'Major')
                $headArr[]='专业';
            if($field == 'Grade')
                $headArr[]='年级';
            if($field == 'Class')
                $headArr[]='班级';
            if($field == 'Name_project')
                $headArr[]='项目名称';
            if($field == 'Techer_guidance')
                $headArr[]='指导老师';
            if($field == 'is_major')
                $headArr[]='是否本专业';
            if($field == 'Time1')
                $headArr[]='取得时间';
            if($field == 'Grade2')
                $headArr[]='等级';
            if($field == 'Count')
                $headArr[]='证书总数';
        }
            break;
	
	case ‘2’:
	//如上形式
	break;
	
   $filename="基本表的导出";
   //$data 为一个二维数组,第一维是索引,第二维是关联数组
   $this->getExcel($filename,$headArr,$data);
   ob_end_clean();
}


private  function getExcel($fileName,$headArr,$data){
        //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入
        import("Org.Net.PHPExcel");
        import("Org.Net.PHPExcel.Writer.Excel5");
        import("Org.Net.PHPExcel.IOFactory.php");
        import("Org.Util.PHPExcel");
        import("Org.Util.PHPExcel.Reader.Excel5");
        import("Org.Util.PHPExcel.Reader.Excel2007");
        import("Org.Util.PHPExcel.IOFactory.php");
        import("Org.Util.PHPExcel.Shared.Date.php");
        $date = date("_Y.m.d_H.i.s");
        $fileName .= "_{$date}.xls";

        //创建PHPExcel对象,注意,不能少了\
        $objPHPExcel = new \PHPExcel();
        $objProps = $objPHPExcel->getProperties();

        //设置表头
        $key = ord("A");
        //print_r($headArr);exit;
        foreach($headArr as $v){
            $colum = chr($key);
            $col=$colum.'1';
            $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1'," ".$v);
            $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1'," ".$v);
          
            $key += 1;
        }

        $column = 2;
        $objActSheet = $objPHPExcel->getActiveSheet();
        foreach($data as $key => $rows){ //行写入
            $span = ord("A");
            foreach($rows as $keyName=>$value){// 列写入
                $j = chr($span);
                $objActSheet->setCellValue($j.$column," ".$value);
                $span++;
            }
            $column++;
        }
        
        $fileName = iconv("utf-8", "gb2312", $fileName);

        //重命名表
        //$objPHPExcel->getActiveSheet()->setTitle('test');
        //设置活动单指数到第一个表,所以Excel打开这是第一个表
        $objPHPExcel->setActiveSheetIndex(0);
        ob_end_clean();//清除缓冲区,避免乱码
        header('Content-Type: application/vnd.ms-excel');
        header("Content-Disposition: attachment;filename=\"$fileName\"");
        header('Cache-Control: max-age=0');

        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output'); //文件通过浏览器下载
        exit;
        
    }





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基本的Modbus RTU代码示例,使用QT编写,并加上注释: #include <QtSerialPort/QSerialPort> #include <QtSerialPort/QSerialPortInfo> #include <QDebug> // Modbus RTU设备地址 const quint8 DEVICE_ADDRESS = 0x01; // Modbus RTU功能码 const quint8 FUNCTION_READ_COILS = 0x01; const quint8 FUNCTION_READ_HOLDING_REGISTERS = 0x03; // Modbus RTU读取数据的起始地址和数量 const quint16 READ_START_ADDRESS = 0x0000; const quint16 READ_DATA_COUNT = 0x0001; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 打开串口 QSerialPort serialPort; serialPort.setPortName("/dev/ttyUSB0"); serialPort.setBaudRate(QSerialPort::Baud9600); serialPort.setDataBits(QSerialPort::Data8); serialPort.setParity(QSerialPort::NoParity); serialPort.setStopBits(QSerialPort::OneStop); serialPort.setFlowControl(QSerialPort::NoFlowControl); if (!serialPort.open(QIODevice::ReadWrite)) { qDebug() << "Failed to open serial port"; return 1; } // 构造Modbus RTU读取数据的请求 QByteArray requestData; QDataStream stream(&requestData, QIODevice::WriteOnly); stream.setByteOrder(QDataStream::LittleEndian); // 数据流使用小端字节序 stream << quint8(DEVICE_ADDRESS) << quint8(FUNCTION_READ_COILS) << quint16(READ_START_ADDRESS) << quint16(READ_DATA_COUNT); // 计算Modbus RTU读取数据的CRC校验码 quint16 crc = 0xFFFF; for (int i = 0; i < requestData.size(); i++) { quint8 byte = requestData.at(i); crc ^= byte; for (int j = 0; j < 8; j++) { if (crc & 0x0001) { crc >>= 1; crc ^= 0xA001; } else { crc >>= 1; } } } requestData.append(crc & 0xFF); requestData.append((crc >> 8) & 0xFF); // 发送Modbus RTU读取数据的请求 serialPort.write(requestData); if (!serialPort.waitForBytesWritten(1000)) { qDebug() << "Failed to write data to serial port"; return 1; } // 等待Modbus RTU读取数据的响应 QByteArray responseData; if (serialPort.waitForReadyRead(1000)) { responseData = serialPort.readAll(); } else { qDebug() << "Failed to read data from serial port"; return 1; } // 解析Modbus RTU读取数据的响应 QDataStream responseStream(responseData); responseStream.setByteOrder(QDataStream::LittleEndian); quint8 deviceAddress; quint8 functionCode; quint8 dataByteCount; quint16 data; quint16 crc16; responseStream >> deviceAddress >> functionCode >> dataByteCount >> data >> crc16; if (deviceAddress != DEVICE_ADDRESS || functionCode != FUNCTION_READ_HOLDING_REGISTERS || dataByteCount != 2) { qDebug() << "Failed to parse response data"; return 1; } // 打印Modbus RTU读取的数据 qDebug() << "Read data:" << data; // 关闭串口 serialPort.close(); return a.exec(); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值