[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注册帐号的情况罗~~


<<:  [Day29] grid 项目对齐属性

>>:  [DAY 29] 章节3-9: 一切都是假象-辛普森悖论(Simpson’s paradox)(统计谬误)

KingRoot

Download free KingRoot App for your Smartphone tha...

<Day27> 永丰金iLeader — 查询帐务

● 这章会示范如何透过永丰iLeader查询交易帐务 接续前一章,我们这章来查询股票买卖的交易纪录 ...

Two Sum 演算法初阶题,Ruby 30 天刷题修行篇第九话

大家好,我是阿飞,今天的题目是演算法初阶题目 Two Sum,让我们一起来看看: 题目来源 Code...

单元测试-概念

督促自己每天学习的方法就是在健康情况允许的情况下,每天至少丢一篇正在学习中的文章 单元测试是甚麽 1...

JavaScript Array | 与其他程序语言很不同的阵列(上)

JavaScript Array (阵列) 阵列 (array) 是一个有序的序列,阵列中可以储存不...