PHP课程设计 PHP课程设计

1.wenjuan2021后台用户登录

1.views/index.blade.php 视图中,将请求匹配到特定路由Route中

<div class="submit_btn">
  <input type="submit" >后台</a>
</div>

2.跳转路由地址栏wenjuan2021/login 到routes.php中,映射到特定UserController.php中,控制器处理请求

Route::get('/login','UserController@login');

3.控制器UserController.php获取请求,返回到视图login.blade.php中

public function login(){
  return View::make('user.login');
}

4.视图login.blade.php中设计新用户的书写格式,其中提交方式为post请求方式,将请求匹配到特定路由Route中

<form name="myform" method="post" action="/login" onsubmit="">
  {{Form::token()}}
  <div class="dl_one"><label>用户名:</label><input type="text" name="username" value=""></div>
  <div class="dl_two"><label>密 码:</label><input type="password" name="password" value=""></div>
  <div class="dl_btn">
      <input type="hidden" name="cookietime" value="0">
      <input type="hidden" name="forward" value="?">
      <input name="dosubmit" type="submit" value="登录" class="btn_p">
      <input type="reset" name="reset" class="btn_p" value="重置">
  </div>
</form>

5.跳转路由地址栏wenjuan2021/login 到routes.php中,映射到特定UserController.php中,控制器处理请求

Route::post('/login','UserController@dologin');//基础路由

6.控制器UserController.php获取提交请求,提交成功返回到后台首页,提交失败返回到用户登录界面

public function dologin(){
  $username=Input::get('username');
  $password=Input::get('password');
  if(Auth::attempt(array('username'=>$username,'password'=>$password))){
      return Redirect::to('/adm');
  }   //用户登录使用了Auth::attempt()方法 用户认证为true,用户成功登录
  else{
      return Redirect::to('/login'); //用户认证为false,用户登录失败
  }
  注意:在调用attempt方法时,auth.attempt事件将会触发。如果验证成功以及用户登录了,auth.login事件也会触发

2.后台首页

2.跳转路由地址栏wenjuan2021/adm 到routes.php中,映射到特定SurveyController.php中,控制器处理请求

Route::get('/adm','SurveyController@adminindex');

3.控制器SurveyController.php获取请求,返回到视图adminindex.blade.php中

public function adminindex(){
  return View::make('adminindex');
}

4.视图adminindex.blade.php中设计后台首页的书写格式(整体布局视图在layout.blade.php里边)获取数据

1.满意度调查饼图信息
var chart1 = document.getElementById('showcharts');  //获取ID为showchart的值传给变量chart1
var myChart1 = echarts.init(chart1);   //变换类型
var chart2 = document.getElementById('showcharts2');
var myChart2 = echarts.init(chart2);   //变化类型
var option1,option2;
option1 = {
  title: {
      text: '满意度调查',
      left: 'center'
  },
  tooltip: {                 //饼图上的数据
      trigger: 'item'
  },
  legend: {                   //图例
      orient: 'vertical',
      left: 'left',
  },
  series: [
      {
          name: '问卷汇总',   //获取的showchart的信息
          type: 'pie',
          radius: '50%',
          data: [

          ],
          emphasis: {
              itemStyle: {
                  shadowBlur: 10,
                  shadowOffsetX: 0,
                  shadowColor: 'rgba(0, 0, 0, 0.5)'
              }
          }
      }
  ]
};
myChart1.setOption(option1);   //显示获取信息的数据
2.建议意见饼图信息
option2 = {
  title: {                 //标题"建议意见"
      text: '建议意见',
      left: 'center'
  },
  tooltip: {
      trigger: 'item'
  },
  legend: {             //图例
      orient: 'vertical',
      left: 'left',
  },
  series: [
      {
          name: '问卷汇总', //鼠标靠近饼图显示问卷汇总
          type: 'pie',     //饼图
          radius: '50%',
          data: [
                            //发送服务器的数据
          ],
          emphasis: {
              itemStyle: {
                  shadowBlur: 10,
                  shadowOffsetX: 0,
                  shadowColor: 'rgba(0, 0, 0, 0.5)'
              }
          }
      }
  ]
};
myChart2.setOption(option2); //显示获取信息的数据
$.ajax({              
  type:'get',             //请求方式为get类型
  url:'/adm/show-chart', //发送请求地址
  dataType:'json',     //返回json数据
  success:function(result){   //请求成功后的回调函数,函数的数据由index.blade.php进行处理后的数据
      myChart1.setOption({
          series:{
              data:[                 //发送服务器的数据
                  {value: result['q11'], name: '满意'},
                  {value: result['q12'], name: '不满意'}
              ]
          }
      })
      myChart2.setOption({
          series:{
              data:[
                  {value: result['q21'], name: '检索结果不够精确准确'},
                  {value: result['q22'], name: '检索结果不全面'},
                  {value: result['q23'], name: '反馈时间超出规定天数'},
                  {value: result['q24'], name: '流程繁琐'},
                  {value: result['q25'], name: '服务态度不佳'},
              ]
          }
      })
  },
  error:function(errorMsg){
      alert('图表请求失败');
      myChart1.hideLoading();
  }
});

5.views/adminindex.blade.php 视图中,将请求匹配到特定路由Route中

series: [
  {
      name: '问卷汇总',
      type: 'pie',
      radius: '50%',
      data: [

      ],
      emphasis: {
          itemStyle: {
              shadowBlur: 10,
              shadowOffsetX: 0,
              shadowColor: 'rgba(0, 0, 0, 0.5)'
          }
      }
  }
]

6.跳转路由地址栏wenjuan2021/adm/ 到routes.php中,映射到特定SurveyController.php中,控制器处理请求

Route::get('/adm/show-chart','SurveyController@showchart');

7.控制器SurveyController.php获取请求,整理检索结果数据

public  function showchart(){
  error_reporting(E_ALL ^ E_NOTICE);
  $q1s = DB::table('records')->lists('q1'); //获取数据库records中列表中q1的个数
  $q21s = DB::table('records')->lists('q21');
  $q22s = DB::table('records')->lists('q22');
  $q23s = DB::table('records')->lists('q23');
  $q24s = DB::table('records')->lists('q24');
  $q25s = DB::table('records')->lists('q25');
$agree=0;
$disagree=0;
$q21=0;
$q22=0;
$q23=0;
$q24=0;
$q25=0;
for ($i=0;$i<count($q1s);$i++) {
  if ($q1s[$i]== 1) {
      $agree += 1;
  } else if ($q1s[$i] == 0) {
      $disagree += 1;
  }
}
for ($i=0;$i<count($q21s);$i++) {
  if ($q21s[$i] == 1) {
      $q21 += 1;
  }
}
for ($i=0;$i<count($q22s);$i++) {
  if ($q22s[$i] == 1) {
      $q22 += 1;
  }
}
for ($i=0;$i<count($q23s);$i++) {
  if ($q23s[$i] == 1) {
      $q23 += 1;
  }
}
for ($i=0;$i<count($q22s);$i++) {
  if ($q24s[$i]== 1) {
      $q24 += 1;
  }
}
for ($i=0;$i<count($q25s);$i++) {
  if ($q25s[$i] == 1) {
      $q25 += 1;
  }
}

 

3.用户User管理中添加管理员(后台)

1.views/user/list.blade.php 视图中,将请求匹配到特定路由Route中

@section('content')
  <h2>用户列表页</h2>
  <div class="a_link"><a href="/adm/user/add-user">添加管理员</a></div>
  <div class="table_style">

      <table border="1" width="100%" cellspacing="0" cellpadding="0">
          <tbody><tr>
              <td width="5%">id</td>
              <td width="14%">username</td>
              <td width="14%">email</td>
              <td width="10%">更新时间</td>
              <td width="10%">管理</td>
          </tr>

2.跳转路由地址栏wenjuan2021/adm/user/add-user 到routes.php中,映射到特定UserController.php中,控制器处理请求

Route::controller('/adm/user','UserController');//控制器路由,默认访问getIndex方法

3.控制器UserController.php获取请求,返回到视图adduser.blade.php中

getIndex()方法中问卷记录提交时间、倒序排列、并且每页只有5条数据,视图list.blade.php获取问卷数据

public function getIndex(){
  $surveys=Survey::orderBy('created_at','desc')->paginate(5);
  return View::make('survey.list')->with('surveys',$surveys);
}
public function getAddUser(){
  // return "用户添加页面";
  return View::make('user.adduser');
}

4.视图adduser.blade.php中设计添加新用户的书写格式,其中提交方式为post请求方式,返回控制器UserController.php中

<form method="post" action="/adm/user/add-user">
  <input type="hidden" name="_token" value="{{csrf_token()}}">
  <div class="input_dl">

5.控制器UserController.php获取post请求

1.定义postAddUser方法,进行表单验证,先使$data获取用户待验证的数据,$rules 获取数据库属性规则,生成一条表数据,如果添加成功直接返回添加新用户界面,添加失败也返回添加新用户界面,并附带报错信息
public function postAddUser(){
  $data=Input::all();                       //获取用户待验证的数据(表单验证$data参数)
  $rules=array(
      'username'=>'required',
      'email'=>'required|email|unique:users', //该数据需要应用的验证规则(表单验证$rules参数)
      'password'=>'required|min:6|confirmed'
  );
  $validator=Validator::make($data,$rules); //表单验证(例如验证密码不能重复,密码不能少于6位)
  if ($validator->fails()){
      $errors= $validator->messages();   //如果验证失败,可以从验证器中获取错误信息
      return Redirect::to('/adm/user/add-user')->with('errors',$errors);
  }
2.获取界面输入的内容将值传给变量$name,数据库user表中username属性获取变量$name的数据,其余类似
    $name=Input::get('username');
  $email=Input::get('email');
  $password=Input::get('password');
  $user=new User();
  $user->username=$name;
  $user->email=$email;
  $user->password=Hash::make($password);
  $user->save();
  return Redirect::to('/adm/user');

}

4.用户User管理中修改密码(后台)

1.views/user/list.blade.php 视图中,将请求匹配到特定路由Route中

@foreach($users as $v)
  <tr>
      <td width="5%"><a href="/adm/user/add-user">{{$v->id}}</a></td>
      <td width="14%">{{$v->username}}</td>
      <td width="14%">{{$v->email}}</td>
      <td width="14%">{{$v->created_at}}</td>
      <td width="4%"><a href="/adm/user/edit-user/{{$v->id}}">修改密码</a></td>
  </tr>
@endforeach

2.跳转路由地址栏wenjuan2021/adm/user/add-user 到routes.php中,映射到特定UserController.php中,控制器处理请求

Route::controller('/adm/user','UserController');//控制器路由,默认访问getIndex方法

3.控制器UserController.php获取请求,返回到视图edituser.blade.php中

getIndex()方法中问卷记录提交时间、倒序排列、并且每页只有5条数据,视图list.blade.php获取问卷数据

public function getIndex(){
  $surveys=Survey::orderBy('created_at','desc')->paginate(5);
  return View::make('survey.list')->with('surveys',$surveys);//
}
public function getEditUser($id){
  $user=User::find($id);
  return View::make('user.edituser')->with('user',$user);
}

4.视图edituser.blade.php中设计修改密码的书写格式,其中提交方式为post请求方式,返回控制器UserController.php中

<form method="post" action="/adm/user/edit-user/{{$user->id}}">
  <input type="hidden" name="_token" value="{{csrf_token()}}">
  <div class="input_dl">

5.控制器UserController.php获取post请求

1.定义postEditUser方法,进行表单验证,先使$data获取用户新输入数据,$rules 获取数据库应用的属性规则,生成一条表单数据,如果修改成功直接返回修改密码界面,添加失败也返回修改密码界面,并附带报错信息
public function postEditUser($id){
      $data=Input::all();     //获取用户待验证的数据(表单验证$data参数)
      $rules=array(          
          'username'=>'required',
          'email'=>'required|email',   //该数据需要应用的验证规则(表单验证$rules参数)
          'password'=>'required|min:6|confirmed'
      );
    $validator=Validator::make($data,$rules);//表单验证(例如验证密码不能重复,密码不能少于6位)
      if ($validator->fails()){
          $errors= $validator->messages(); //如果验证失败,可以从验证器中获取错误信息
          return Redirect::to('/adm/user/edit-user/'.$id)->with('errors',$errors);
      }
2.获取界面输入的内容将值传给变量$password,数据库user表中upassword属性获取变量$password的数据,并进行哈希加密,其余类似
        $password=Input::get('password');
      $user=User::find($id);
      $user->password=Hash::make($password);
      $user->save();
      return Redirect::to('/adm/user');
  }
}

5.问卷Survey列表中答卷列表获取数据(后台)

1.views/survey/list.blade.php 视图中,将请求(获取问卷信息)匹配到特定路由Route中

@foreach($surveys as $v)
<tr>
  <td width="5%"><a href="/adm/survey">{{$v->id}}</a></td>
</tr>
@endforeach

2.跳转路由地址栏wenjuan2021/adm/survey 到routes.php中,映射到特定SurveyController.php中,控制器处理请求

Route::controller('/adm/survey','SurveyController');//默认访问getIndex方法

3.控制器SurveyController.php获取请求,返回到视图list.blade.php中

getIndex()方法中问卷记录提交时间、倒序排列、并且每页只有5条数据,视图list.blade.php获取问卷数据

public function getIndex(){
  $surveys=Survey::orderBy('created_at','desc')->paginate(5);
  return View::make('survey.list')->with('surveys',$surveys);
}

views/list.balde.php文件分页形式

{{$surveys->links()}}

wenjuan2021/php/vendor/laravel/farmework/src/Illuminate/Pagination/views/slider-3.php

<?php $presenter = new IlluminatePaginationBootstrapPresenter($paginator);
?>
<?php if($paginator->getLastPage() > 1):?>
  <div class="paging">总数:<b><?php echo $paginator->getTotal()?></b>&nbsp;&nbsp;
      <?php echo $presenter->render();?>   //进行数据传送
      <div class="clear"></div>
  </div>
<?php endif; ?>

4.视图list.blade.php获取数据email、ip、问卷检索信息

<td width="14%">{{$v->email}}</td>
<td width="14%">{{$v->ip}}</td>
<td style="color: green;font-weight: bold" align="center" width="10%">@if($v->q1==1)√@endif</td>
<td style="color: green;font-weight: bold" align="center" width="10%">@if($v->q21==1)√@endif</td>
<td style="color: green;font-weight: bold" align="center" width="10%">@if($v->q22==1)√@endif</td>
<td style="color: green;font-weight: bold" align="center" width="10%">@if($v->q23==1)√@endif</td>
<td style="color: green;font-weight: bold" align="center" width="10%">@if($v->q24==1)√@endif</td>
<td style="color: green;font-weight: bold" align="center" width="10%">@if($v->q25==1)√@endif</td>
<td width="15%">{{$v->created_at}}</td>

6.后台注销

1.views/layout/layout.blade.php 视图中,将请求(用户注销)匹配到特定路由Route中

<li class="li_style"><a href="/adm">首页</a></li>
<li class="li_style"><a href="/adm/survey">问卷列表</a></li>
<li class="li_style"><a href="/adm/user">用户管理</a></li>
<li class="li_style"><a href="/logout">注销</a></li>

2.跳转路由地址栏wenjuan2021/logout 到routes.php中,映射到特定UserController.php中,控制器处理请求

Route::get('/logout','UserController@logout');

3.控制器UserController.php获取注销请求,返回到视图login.blade.php中

public function logout(){
  Auth::logout();   //注销用户登录状态
  return Redirect::to('/login');
}

7.满意度调查问卷Index填写(前台)

1.views/index.blade.php 视图中,将请求(获取邮箱信息)匹配到特定路由Route中

<div class="email">
  <label>您的邮箱是</label>
  <input type="text" name="email" />
</div>

2.跳转路由地址栏wenjuan2021/ 到routes.php中,映射到特定SurveyController.php中,控制器处理请求

Route::get('/{email?}', 'SurveyController@survey');

3.控制器SurveyController.php获取请求,返回到视图index.blade.php中

public function survey($email=""){
  return View::make('index')->with('email',$email);
}

4.视图index.blade.php中显示问卷界面需要书写信息

   <div class="ques_one">
      <p>问题1: 您对文献检索的结果是否满意?</p>
      <p>
          <input type="radio" name="q1" />服务态度不佳
      </p>
  </div>

8.满意度调查问卷Index提交(前台)

1.views/index.blade.php 视图中,将请求(获取提交信息)匹配到特定路由Route中

<div class="submit_btn">
  <input type="submit" >后台</a>

2.跳转路由地址栏wenjuan2021/ 到routes.php中,映射到特定SurveyController.php中,控制器处理请求,找到submitsurvey方法

Route::post('/','SurveyController@submitsurvey');

3.控制器SurveyController.php获取请求

1.定义submitsurvey方法,如果提交成功直接返回满意度调查问卷界面,提交失败也返回满意度调查问卷界面,并附带报错信息
public function submitsurvey(){
  $datas=Input::all(); //获取用户待验证的数据(表单验证$data参数)
  $rules=array(
      'email'=>'required|email|unique:records' //该数据需要应用的验证规则(表单验证$rules参数)
  );
  $validtor=Validator::make($datas,$rules); //表单验证(例如验证密码不能重复,密码不能少于6位)
  if($validtor->fails()){
      $msg=$validtor->messages()->first('email');
      return json_encode(array('success'=>false,'msg'=>$msg));
  }
2.数据库获取新输入的表单信息email、ip、问卷检索信息
    $survey=new Survey();
  $survey->email=$datas['email'];
  $survey->ip=$_SERVER['REMOTE_ADDR'];
  $survey->q1=$datas['q1'];
  if ($survey->q1==0){
      $survey->q21=$datas['q21'];
      $survey->q22=$datas['q22'];
      $survey->q23=$datas['q23'];
      $survey->q24=$datas['q24'];
      $survey->q25=$datas['q25'];
  }
  $survey->save();
  return json_encode(array('success'=>true,'msg'=>"成功提交,感谢您的参与"));
}