iT邦幫忙

DAY 20
3

[鐵鷹練成]CodeIgniter + Bootstrap系列 第 17

[鐵鷹練成]CI之留言版[驗證碼]

  • 分享至 

  • xImage
  •  

剛從台北回來趕文XD
為什麼要介紹驗證碼呢??
因為防灌水機器人,不想上線就被灌水文灌爆,
也要有點防禦措施,

controllers/gbook.php 增加一個方法,還有修改兩個方法

    function __construct() {
        parent::__construct();
        $this->load->model('gbook_sql');
        //載入CI的session 存放驗證碼的數字
        $this->load->library('session');
        $this->load->helper('url');
    }
   //驗證碼   
function Keycik()
    {
      $img_height = 30;  // 圖形高度
      $img_width = 60;   // 圖形寬度
      $mass = 0;        // 雜點的數量,數字愈大愈不容易辨識
      $num="";              // rand後所存的地方
      $num_max = 4;      // 產生6個驗證碼
      for( $i=0; $i<$num_max; $i++ ){
          $num .= rand(0,9);
      } 
     //把驗證碼存進session      
      $this->session->set_userdata('Checknum',$num);
      // 創造圖片,定義圖形和文字顏色
      Header("Content-type: image/PNG");
      srand((double)microtime()*1000000);
      $im = imagecreate($img_width,$img_height);
      $black = ImageColorAllocate($im, 250,250,250);         // (0,0,0)文字為黑色
      $gray = ImageColorAllocate($im, 0,0,0); // (200,200,200)背景是灰色
      imagefill($im,0,0,$gray);
      // 在圖形產上黑點,起干擾作用;
      for( $i=0; $i<$mass; $i++ ){
         imagesetpixel($im, rand(0,$img_width), rand(0,$img_height), $black);
      }
      // 將數字隨機顯示在圖形上,文字的位置都按一定波動範圍隨機生成
      $strx=rand(3,8);
      for( $i=0; $i<$num_max; $i++ ){
         $strpos=rand(1,8);
         imagestring($im,5,$strx,$strpos, substr($num,$i,1), $black);
         $strx+=rand(8,14);
      }
         ImagePNG($im);
         ImageDestroy($im); 
      }

    //新增留言(修改)
    function AddGbook(){
        $chck = $this->input->post('chck');
        $checknum = $this->session->userdata('Checknum');
        if($chck == $checknum){
        $all = $this->input->post();
        $this->gbook_sql->add($all,'gbook');
        redirect(site_url().'gbook/index');
        }else{
            redirect(site_url().'gbook/index');
        }
    }

在views/gbook裡面多一個圖片指向剛剛的方法和一個輸入框

<?php
/*---------------------------------------*/
//........ 此頁面請放在view資料夾底下.......//
/*---------------------------------------*/
$link = 'http://localhost/test/';
?>

<html xmlns="http://www.w3.org/1999/xhtml">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>公佈欄</title>
<!--以下是 Bootstrap 的文件包-->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="<?=$link;?>css/bootstrap-responsive.min.css" rel="stylesheet">
<link href="<?=$link;?>css/bootstrap.min.css" rel="stylesheet" media="screen">
<script src="<?=$link;?>js/jquery.js"></script>
<script src="<?=$link;?>js/bootstrap.min.js"></script>
<style>
#heig{
     height:10px;
}
#color{
     background-color: #E5E5E5;
}
</style>


<!--"container"為固定置中,請參考 http://kkbruce.tw/Bootstrap/Scaffolding 佈局篇-->
<div class="container">
  <p align="center"><h2 align="center"><strong>留言板</strong></h2></p>
  <form id="form1" name="form1" method="post" action="<?=$link;?>index1.php/gbook/AddGbook" class="form-inline">
    <table width="1200" border="1"  class="table table-bordered table-condensed">
      <tr>
        <td id="color"><div id="heig"><strong>留言人:</strong>
            <input type="text" name="user" id="user" />
            <input name="time" type="hidden" id="time" value="<?=date('Y/m/d');?>" />
            <strong>驗證碼:</strong>
            <label>
              <input type="text" name="chck" id="chck" />
            </label>
            <img src="<?=$link;?>index1.php/gbook/Keycik"/></div>
        </td>
        <td id="color"><div align="center">
          <button class="btn" type="submit">留言</button>
        </div></td>
      </tr>
      <tr>
        <td colspan="2"><label>
          <div align="center">
            <textarea name="content" id="content" rows="3" class="span10"></textarea>
          </div>
        </label></td>
      </tr>
    </table>
  </form>
  <?php foreach($query->result_array() as $row):?>
  <table width="1200" border="1" class="table table-bordered table-condensed">
    <tr>
      <td id="color"><strong>
        <?=$row['user'];?>
      在  <?=$row['time'];?>  留言說:</strong></td>
    </tr>
    <tr>
      <td><?=$row['content'];?></td>
    </tr>
  </table>
  <?php endforeach; ?>
  <p> </p>
</div>

如果有出現這個錯誤
In order to use the Session class you are required to set an encryption key in your config file.
請在你的 config/config.php 裡面的這行 '亂打'存檔在試試看
$config['encryption_key'] = ' ';

完成圖片


待續....


上一篇
[鐵鷹練成]CI之留言板[controllers+model]
下一篇
[鐵鷹練成]CI之留言版[排序+資料總數]
系列文
[鐵鷹練成]CodeIgniter + Bootstrap31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
鐵殼心
iT邦高手 1 級 ‧ 2013-10-05 21:47:52

沙發
拍手

謝謝

我要留言

立即登入留言