摘要
1) view: application/views/register.php
2) create db
3) 自動讀入 db 設定
4) 更新 application/views/register.php
5) 針對 /user/registering 修正
6) 新增 model
7) 修改 controller
8) 實作 insert
9) 後續問題
------------------------------------------------------------------------
1) view: application/views/register.php
1) view: application/views/register.php
2) create db
3) 自動讀入 db 設定
4) 更新 application/views/register.php
5) 針對 /user/registering 修正
6) 新增 model
7) 修改 controller
8) 實作 insert
9) 後續問題
------------------------------------------------------------------------
1) view: application/views/register.php
code https://gist.github.com/3879719
2) create db
2.1) wamp 中、以 phpmyadmin 下 SQL 指令
CREATE TABLE `user` (
`UserID` bigint(20) NOT NULL AUTO_INCREMENT,
`Account` varchar(100) NOT NULL,
`Password` varchar(100) NOT NULL,
PRIMARY KEY (`UserID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE `article` (
`ArticleID` bigint(20) NOT NULL AUTO_INCREMENT,
`Author` bigint(20) NOT NULL,
`Title` varchar(200) NOT NULL,
`Content` text NOT NULL,
`Views` bigint(20) NOT NULL,
PRIMARY KEY (`ArticleID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
2.2) 至 /application/config/database.php 修改相對應的值
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '1234';
$db['default']['database'] = 'CITestdb';
3) 自動讀入 db 設定
/application/config/autoload.php
修改 $autoload['libraries'] = array();
-> $autoload['libraries'] = array('database');
不然會有錯誤像是: Fatal error: Call to a member function select() on a non-object
不然會有錯誤像是: Fatal error: Call to a member function select() on a non-object
4) 更新 application/views/register.php
code https://gist.github.com/3879847
新增送出表單
<form action="<?=site_url("/user/registering")?>" method="post" >
site_url 跟 base_url 有點像,但是他是包含到 index.php 的部份,所以 site_url("/user/registering") 實際上是 http://localhost/CITest/index.php/user/registering 的意思。
5) 針對 /user/registering 修正
applicaiton/controllers/user.php, 新增
public function registering() {
$account = $this->input->post("account");
$password= $this->input->post("password");
$passwordrt= $this->input->post("passwordrt");
}
6) 新增 model
application/models/usermodel.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class UserModel extends CI_Model {
function __construct() {
parent::__construct();
}
function insert($account,$password) {
$this->db->insert("user",
Array(
"account" => $account,
"password" => $password
));
}
}
7) 修改 controller
applicaiton/controllers/user.php
function registering() 新增
$this->load->model("UserModel");
$this->UserModel->insert($account,$password); //完成新增動作
如果沒有先載入 UserModel 的話,$this->UserModel 是不會存在的
------------------------------------------------------------------------------------------
* 註冊篇: 實戰發文系統(註冊)
8) 實作 insert
application/models/usermodel.php
定義這個 Model 具有 insert 這個函式,其中有 $account / $password 這兩個參數,而我們會負責將這兩個資料插入 user 資料表。
$this->db 是 CI 幫 Model 內建的變數,負責專門處理資料庫操作,在 CI 裡面他稱之為 Active Record。CI 的 Active Record 透過 insert 這樣的指令,讓使用者能確實指定他希望用哪些欄位輸入哪些資料,而 Active Record 就會確保當使用者輸入惡意字元時,能夠正確被進行 escape 處理,而不會造成安全性問題。
操作樣板:$this->db->insert("資料表名稱",欄位與資料)
9) 後續問題
1.如果密碼或帳號是空白,應該告知使用者密碼或帳號不得為空白。
如果 retype password 與 password 欄位資料不一致,應該告知使用者確認密碼並不正確。告知時應顯示表單,請使用者繼續填寫。
2.新增資料時如果這個帳號已經存在,應該視為錯誤,告知使用者此帳號已存在,並請使用者重新選擇帳號。
3.如果新增正常時,應該告訴使用者他已註冊成功,並提示到登入頁面。
1-1.
public function registering(){
$account = $this->input->post("account");
$password= $this->input->post("password");
$passwordrt= $this->input->post("passwordrt");
if( trim($password) =="" || trim($account) =="" ){
$this->load->view('register',Array(
"errorMessage" => "Account or Password shouldn't be empty,please check!" ,
"account" => $account
));
return false;
}
if( $password != $passwordrt ){
//如果不一致,我們讀取 register view,
//但將 $account 跟錯誤訊息帶入作為處理
$this->load->view('register',Array(
"errorMessage" => "Password doesn't match re-type password,please check yout input!" ,
"account" => $account
));
return false;
}
$this->load->model("UserModel");
$this->UserModel->insert(trim($account),trim($password)); //完成新增動作
}
因為我們要重新產生 view 並且要有錯誤訊息,所以需要透過變數告訴 view 要產生什麼訊息,所以我們一定是透過一個指明 key-value 的 Array 進行變數傳遞。
1-2. 修改 view 作為對應顯示
application/views/register.php
code https://gist.github.com/3884988
重點1) 如果有錯誤訊息的話,就顯示錯誤訊息,alert-error 是 bootstrap 用來顯示錯誤訊息的標籤。
<?php if (isset($errorMessage)){?>
<div class="alert alert-error">
<?=$errorMessage?>
</div>
<?php }?>
重點2) 保存 account,避免使用者重新輸入欄位
<?php if(isset($account)){ ?>
<input type="text" name="account"
value="<?=htmlspecialchars($account)?>" />
<?php }else{ ?>
<input type="text" name="account" />
<?php } ?>
htmlspecialchars: 特別為 $account 的內容進行 html 字元過濾
2-1. application/models/usermodel.php
code https://gist.github.com/3885055
function checkUserExist($account){
$this->db->select("COUNT(*) AS users");
$this->db->from("user");
$this->db->where("account", $account);
$query = $this->db->get();
return $query->row()->users > 0 ;
}
// = "select count(*) from user where account = '".$account."';"
$this->db->select 決定選擇欄位
$this->db->from 決定存取資料表
$this->db->where 決定存取條件
$this->db->get() 負責執行查詢,並將查詢結果回傳。
$query->row() 則是將查詢資料的第一筆取出,
在這裡我們透過第一筆資料的 users 資料判斷他是不是存在。
2-2. 整合回 application/controller/user.php 裡
code https://gist.github.com/3885073
3-1. 在 user/registering 最後加上完成的 view
$this->load->view('register_success',Array(
"account" => $account
));
3-2. application/views/register_success.php
沒有留言 :
張貼留言