第一次做的一个小小项目(用TP实现的)
主要功能:
(1) 图片的导入以及每张图片相应的信息
(2) 多种excle表的导入
(3) excle表的导出(只导出选中部分)
(4) 最基本的权限管理
(5) 最基本的翻页,查询,修改,删除等
项目的不足:
(1)对数据库的设计不熟悉,设计不合理(有更好的设计方式)
(2)由于对前端的掌握不够,与前端开发人员合作不是非常好,并未能很好地用ajax实现各功能
希望能在寒假前交予测试并争取早日交付,寒假准备重新设计数据库,把部分功能重做。
下面把一些实现逻辑和示例代码贴在下面,一方面作为一种记录,另一方面希望需要的人可以看看。
希望大牛们或更有经验的人能提供建议,谢谢!
以下是主功能的实例代码:
最最最最简单的权限管理
(功能是判断是否为超级管理员或是管理员,以显示相应注册按钮)
用数据库中的一个字段判断,数据库的设置就不贴了,以下是页面的判断代码:
<!--管理员注册-->
<divid="top-icon">
{ifcondition="$role eq 1"}
<div class="userHeadtop-icon">
<a href="__URL__/register/role/3" title="用户注册"><imgsrc="__PUBLIC__/Images/xxx></a>
</div>
<div class="userHeadtop-icon">
<a href="__URL__/register/role/2" title="管理员注册"><imgsrc="__PUBLIC__/Images/xxx" ></a>
</div>
<div class="top-icon">
<a href="__URL__/register/role/1"title="超级管理员用户注册"><imgsrc="__PUBLIC__/Images/xxx "></a>
</div>
{elseifcondition="$role eq 2"/} // 此处最后一定要加/不然会出错,当时找了好久的错误
<div class="userHeadtop-icon">
<a href="__URL__/register/role/3" title="用户注册"><img src="__PUBLIC__/Images/xxx"></a>
</div>
<div class="userHeadtop-icon">
<a href="__URL__/register/role/2" title="管理员注册"><imgsrc="__PUBLIC__/Images/xxx" ></a>
</div>
{/if}
PS:注册功能就不贴了,最简单的添加数据库
退出按钮:
<a href="__URL__/quit"οnclick='return del();'>
<img src="__PUBLIC__/Images/xxx">
</a>
Js:
<script>
function del(){
if(confirm("是否退出")) {
return true;
}else {
return false;
}
}
</script>
控制器中:
function quit(){
session(null);//清空所有session信息
redirect(U('admin/Index/index'),0,'重新登录');
}
模态框多图片上传:
<form action="__URL__/upload" method="POST"enctype="multipart/form-data">
<div class="modal-body" style="height: auto;width: 100%;">
<divclass="col-md-3 chooseImg">
<table>
<select name="select[]" id="" class="form-control"> //此处为选择上传类型
<option value="1">竞赛类</option>
<option value="2">非竞赛类</option> </select>
<input type="file"class="form-control" name="file[]">
<input type="text" class="form-control" placeholder="学号" name="number[]">
<input type="text" class="form-control" placeholder="证书名称" name="Name_project[]">
<input type="text" class="form-control" placeholder="证书等级" name="grade[]">
<input type="text" class="form-control" placeholder="取得时间" name="time[]">
<input type="text" class="form-control" placeholder="指导老师" name="teacher[]">
</table>
</div>
<!--以下重复7个跟上面一样的div,同时上传8张图片以及对应信息,用select实现上传类型的选择 -->
</form>
以下为接收数据代码:
//下面第一部分的代码为判断是否缺少信息或是被工具改过参数,如果是则提示信息并返回
function upload(){
if(!$_POST['select'] || !$_POST['number'] || !$_POST['time'] ||!$_POST['grade'] || !$_POST['teacher'] || !$_POST['Name_project']){
echo "<script type='text/javascript'>alert('参数错误!');</script>";
$URL=U('admin/TheList/index');
echo "<script type='text/javascript'>
window.location.href = '$URL';
</script>";
exit;
}
//接收数据,数据类型为数组
$select = $_POST['select'];//上传的证书是比赛类型或是非比赛
$number = $_POST['number'];//相关学号
$time = $_POST['time'];//取得的时间
$grade = $_POST['grade'];//证书等级
$teacher = $_POST['teacher'];//指导老师
$Name_project = $_POST['Name_project'];//证书名称
//以下代码为判断接收的各类型数据项是否匹配,8张图片下面的信息是否填全,不全则提示
$count2=0;
$count3=0;
$count4=0;
$count5=0;
$count6=0;
//循环判断数组中有效数据的个数,直接用count的话一直为8,因为前台有八个输入框,就算没输入也会有8个,其中可能部分数据为空
foreach($number as $val){
if($val!='')
$count2++;
}
foreach($time as $val){
if($val!='')
$count3++;
}
foreach($grade as $val){
if($val!='')
$count4++;
}
foreach($teacher as $val){
if($val!='')
$count5++;
}
foreach($Name_project as $val){
if($val!='')
$count6++;
}
if($count2!=$count3 || $count2!=$count4 ||$count2!=$count5 || $count2!=$count6 || $count3!=$count4 || $count3!=$count5 ||$count3!=$count6 || $count4!=$count5 || $count4!=$count6 || $count5!=$count6){
$this->error('输入的信息不匹配');
}
/******************保存在服务器上********************/
import('ORG.Net.UploadFile');//导入上传类
$upload= new \UploadFile();// 实例化上传传类
$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->allowExts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
$upload->savePath= './Public/Uploads/';// 设置附件上传目录
if(!$upload->upload()) {// 上传错误提示错误信息
echo "<scripttype='text/javascript'>alert('上传错误');</script>";
$URL=U('admin/TheList/index');
echo "<scripttype='text/javascript'>
window.location.href = '$URL';
</script>";
exit;
}else{ //上传成功获取上传文件信息
$info = $upload->getUploadFileInfo();
//多图片一次性上传,返回一个二维数组
$count = count($info);
//$_FILES['img']['tmp_name']; 上传 临时文件的绝对路径
}
//for循环,实现上传
for($i=0;$i<$count;$i++){
$select1 = $select[$i]; //接收各个数组同一位置的信息
$number1 = $number[$i];
$time1 = $time[$i];
$grade1 = $grade[$i];
$teacher1 = $teacher[$i];
$Name_project1 = $Name_project[$i];
$datasize =$info[$i]["size"]; //获取当前上传图片的大小,用于条件判断
$name = $info[$i]["name"]; //用于提示信息
if($datasize > 1024*300){
echo '<scriptlanguage="javascript">alert("'.$name.'大小超过300k'.'");</script>';
continue;
}else{
if(!($select1 &&$number1 && $time1 && $grade1 && $teacher1 &&$Name_project1 && $info[$i])){
echo '<scriptlanguage="javascript">alert("'.$name.'相关信息不全'.'");</script>';
continue;
}
switch($select1){
case‘1’: //此处为导入数据库,个人的数据库设置不同
//思路:把图片的路径放在数据库,加上存放的文件名,取出的时候需要在前面加__PUBLIC__
不能一开始就把__PUBLIC__存在数据库中,TP中是解析这个的,放在数据库取出后系统将其当作变量,不会解析
//实例:(一些安全性判断等这里就不写了,只是举个栗子)
$updata['Filecopy_address']="Uploads/".$info[$i]["savename"];
$updata['Name_project']=$Name_project1;
$updata['Name_project']=$Name_project1;
$updata['Time1']=$time1;
$updata['Techer_guidance']=$teacher1;
$updata['Grade2']=$grade1;
$model->where($where)->save($updata);
break;
case‘2’:
//如上
}//endswitch
PS: 其他功能会陆续上传的!
大家一起学习吧!有问题或是建议欢迎交流!
版权声明:本文为qq_36289732原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。