本文提供一個基於 CodeIgniter 3 的會員註冊/登入實作範例,採用 Active Record 模式操作資料庫,架構簡潔,適合初學者參考。專案結構包含控制器、視圖與資料表結構。
controllers/Login.php處理表單驗證、登入驗證、註冊邏輯與 Session 管理。
<?php
class Login extends CI_Controller {
private $pass = '';
public function __construct() {
parent::__construct();
$this->load->helper(array('form', 'url'));
$this->load->library('session');
}
public function index() {
$this->load->view('login');
}
public function formsubmit() {
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
if ($this->form_validation->run() == FALSE) {
$this->load->view('login');
} else {
if (isset($_POST['submit']) && !empty($_POST['submit'])) {
$data = array(
'user' => $_POST['username'],
'pass' => md5($_POST['password'])
);
$newdata = array(
'username' => $data['user'],
'userip' => $_SERVER['REMOTE_ADDR'],
'luptime' => time()
);
if ($_POST['submit'] == 'login') {
$query = $this->db->get_where('uc_user', array('user' => $data['user']), 1, 0);
foreach ($query->result() as $row) {
$pass = $row->pass;
}
if ($pass == $data['pass']) {
$this->session->set_userdata($newdata);
$this->load->view('usercenter', $data);
}
} elseif ($_POST['submit'] == 'register') {
$this->session->set_userdata($newdata);
$this->db->insert('uc_user', $data);
$this->load->view('usercenter', $data);
} else {
$this->session->sess_destroy();
$this->load->view('login');
}
}
}
}
}
views/login.php簡單的登入/註冊表單,使用 CodeIgniter 表單輔助函數輸出。
<html>
<?php echo validation_errors(); ?>
<?php echo form_open('login/formsubmit'); ?>
<table>
<tr>
<td>用戶名</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密碼</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td><input type="submit" name="submit" value="login"></td>
<td><input type="submit" name="submit" value="register"></td>
</tr>
</table>
</form>
</html>
uc_userCREATE TABLE `uc_user` (
`id` int(11) unsigned zerofill NOT NULL AUTO_INCREMENT,
`user` varchar(20) NOT NULL,
`pass` char(32) NOT NULL,
`role` enum('root','normal') NOT NULL DEFAULT 'root',
`del` decimal(1,0) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
md5 加密密碼,實務上請改用 password_hash() 與 password_verify()。