iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 30
0
Modern Web

後端的鉗形攻勢系列 第 30

[Day. 29] Codeigniter 底底底底底霸個

現在來測試一下我們寫出來的網頁~

Bug1

發現註冊之後只會看到"success"的訊息
於是我們要修改程式碼
讓使用者在註冊之後可以被引導到welcome頁面
新增以下在controller/user.php的register()內:

$this->welcome();

記得是在註冊之後唷~

這樣就可以成功重新導向歡迎頁面了

咦?
https://ithelp.ithome.com.tw/upload/images/20201014/20126335U1i6QyNSZ9.png
https://ithelp.ithome.com.tw/upload/images/20201014/20126335mIO1ULNJot.png
瀏覽器報錯了
是甚麼問題呢?
哦原來是因為前幾天,我們有設定session暫存username,而註冊完並沒有存session,所以瀏覽器讀不到username

了解bug產生的原因後,隨即前往修復
一樣到controller/user.php的register()新增一行:

$this->session->set_userdata($sess_data = array('username' =>  $data['username']));

測試一下:
先隨便找個帳號註冊
https://ithelp.ithome.com.tw/upload/images/20201014/20126335HYaf17NzoP.png
測試成功~

Bug2

其實也不太算
透過剛剛的註冊測試會發現
之前我們的register主要獲取view傳來的使用者資料是在model中
這不太符合我們的MVC分工開發模式
所以我們把這件事拉回controller中執行。
controller/user.php中的register():

$data = array(
        		'username' => $this->input->post('username'),
		        'password' => $this->input->post('password'),
		        'name' => $this->input->post('name'),
		        'gender' => $this->input->post('gender'),
		        'about' => $this->input->post('about'),
        	);
$this->user_model->register($data);

等我們的controller拿到data之後,再傳給model
model/user_model.php中的register():

public function register($data)
        { 
        	$this->db->insert('user', $data);
        }

Bug3

如果剛剛註冊測試時,就算用了之前已經註冊的帳號(test之類的)
我們的網頁還是會讓你註冊通過,而導致database中
username叫test的有好幾個
為了避免這個使用者名稱重複的情況發生
我們在controller多一些判斷

  1. 首先我們拿到view傳來的data,並從其中拿username給Model做搜尋
  2. Model回傳是否有一樣username的data。如果有就報錯給使用者並讓使用者重新註冊

首先,我們再user_model.php新增一個函式回傳相同username的資料個數:

public function checkreg($data)
        {
                return  $this->db->where('username',$data['username'])
                                        ->get('user')
                                        ->num_rows();
        }

接著到controller/user.php底下修改register():

public function register()
    {
    	$data = array(
        		'username' => $this->input->post('username'),
		        'password' => $this->input->post('password'),
		        'name' => $this->input->post('name'),
		        'gender' => $this->input->post('gender'),
		        'about' => $this->input->post('about'),
        	);
    	$check = $this->user_model->checkreg($data);
    	if($check == 0){
    		$this->user_model->register($data);
			$this->session->set_userdata($sess_data = array('username' =>  $data['username']));
	        $this->welcome();
    	}
    	else{
    		echo "使用者名稱已被註冊";
    		echo "<button><a href=".base_url()."index.php/register style='text-decoration:none; color:black'>返回</button>";
    	}
        
    }

然後把welcome.php的login success改成:

<h1>Welcome <?php echo $_SESSION['username'] ?></h1>

大功告成~~

接著來測試看看吧~
我們利用剛剛註冊的tttt來試試看~
https://ithelp.ithome.com.tw/upload/images/20201014/20126335PDWxwv94iK.png
這樣就成功預防相同username註冊帳號的情況囉~~


上一篇
[Day. 28] Codeigniter 登出
下一篇
[Day. 30] 總結&完賽心得
系列文
後端的鉗形攻勢31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言