php操作數(shù)據(jù)庫之通過步驟做一個用戶注冊
我們做一個最簡單的注冊頁面。注冊頁面中有三個參數(shù):
????1.用戶名
????2.密碼
????3.重復密碼
用戶寫好三個參數(shù)后,點擊提交的時候向connect.php頁面中傳入POST記錄。
我們可以把POST記錄處理后寫入到MySQL數(shù)據(jù)庫中,即完成了用戶注。
代碼如下:
<form action="connect.php" method="post"> 用戶名:<input type="text" name="username"><br /> 密碼:<input type="password" name="password"><br /> 重復密碼:<input type="password" name="repassword"><br /> <input type="submit" value="提交"> </form>
為了更快的表現(xiàn)我們的代碼界面沒有進行美化。以最快的速度帶大家完成用戶注冊。
一、 判斷重復密碼
由于有重復密碼,如果用戶兩次輸入的密碼不一致也就是有沒有進行下一步的任何意義。
在網(wǎng)頁中很多地方還是使用到了重復密碼。因為,害怕的是用戶產生手誤。將密碼填寫出錯。
用戶在輸入密碼的時候可能在左右兩邊多打兩個空格。因此,我們會使用trim將密碼和重復密碼的兩邊去掉空格。
if(trim($_POST['password']) != trim($_POST['repassword'])){ exit('兩次密碼不一致,請返回上一頁'); }
二、 準備好寫入的數(shù)據(jù)
我們需要把用戶的輸入數(shù)據(jù)和隱藏的數(shù)據(jù)都寫入到數(shù)據(jù)庫。
可見數(shù)據(jù)有:
變量 | 說明 |
---|---|
$_POST['username'] | 用戶名 |
$_POST['password'] | 密碼 |
我們需要把用戶名去掉兩邊的空格,這樣避免輸入不必要的這些信息。
在mysql這一章節(jié)我們講過,用戶的密碼不要讓包括公司內部人員可見。保證密碼是不可逆向的。在初級階段大家學習一下MD5即可。以后我們再教大家其他的加密方式。
不可見數(shù)據(jù)有:
變量 | 說明 |
---|---|
$time | 用戶的注冊時間 |
$_SERVER['REMOTE_ADDR'] | 用戶的注冊IP |
????
????1.time返回的unix時間戳
????2.REMOTE_ADDR返回的是IP地址,我們可以用ip2long將其轉為整型存儲。
$username = trim($_POST['username']); $password = md5(trim($_POST['password'])); $time = time(); $ip = ip2long($_SERVER['REMOTE_ADDR']);
三、連接數(shù)據(jù)庫、判斷錯誤、選擇庫和字符集
1.我們使用mysqli_connect連接到數(shù)據(jù)庫服務器。
2.如果有錯誤,使用mysqli_errno得到錯誤號
3.如何時存在錯誤mysqli_error打印出所有的錯誤,并且退出程序執(zhí)行
4.選擇數(shù)據(jù)庫并且設置字符集為utf8.
//連接數(shù)據(jù)庫 $conn = mysqli_connect('localhost','root','liwenkaihaha'); //如果有錯誤,存在錯誤號 if(mysqli_errno($conn)){ echo mysqli_error($conn); exit; } mysqli_select_db($conn,'user'); mysqli_set_charset($conn,'utf8');
四、組合SQL語句
我們需要把得到的信息寫入到數(shù)據(jù)庫里面去,用戶名、密碼、創(chuàng)建時間、IP我們都得到了。
將對應的變量插入到SQL語句中即可。組合出來的SQL語句如下:
$sql = "insert into user(username,password,createtime,createip) values('" . $username . "','" . $password . "','" . $time . "','" . $ip . "')";
而我們的創(chuàng)建表的語句如下:
CREATE TABLE IF NOT EXISTS user ( id int(11) NOT NULL, username varchar(30) NOT NULL, password char(32) NOT NULL, createtime int(11) NOT NULL, createip int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
表的格式(字段對應說明):
id | username | password | createtime | createip |
---|---|---|---|---|
用戶編號 | 用戶名 | 密碼 | 創(chuàng)建時間 | 創(chuàng)建IP |
五、發(fā)送語句,判斷狀態(tài)
mysqli_query我們在上面說過,需要傳入兩個參數(shù):
連接的資源,在這里對應的變量是$conn。
發(fā)送的SQL語句。在上面已經(jīng)準備好了$sql。
SQL語句可以通過mysqli_query發(fā)送給MySQL服務器。發(fā)送成功$result則為true。否則為false。
成功的話,我們就可以提示用戶注冊成功啦。
有些情況下,可能還需要使用到mysqli_insert_id()。在這里把自增的主鍵ID打印出來。
大家記住這個知識點,避免以后需要的時候忘記了。
mysqli_insert_id應用場景:新加的一個行的數(shù)據(jù)。我們需要得到自動增長的ID值,將這個ID值插入到另外一個表里面去時。就需要用到這個函數(shù)。
$result = mysqli_query($conn,$sql); if($result){ echo '注冊成功'; }else{ echo '注冊失敗'; } echo '當前用戶插入的ID為'.mysqli_insert_id($conn);
五、關閉數(shù)據(jù)庫連接
將資源變量傳到到mysqli_close這個函數(shù)里面即可。
mysqli_close($conn);
用戶注冊的基本實現(xiàn)代碼就寫完了。我們上面講的都是代碼片段。
我們整實現(xiàn)的connect.php代碼如下:
<?php if (trim($_POST['password']) != trim($_POST['repassword'])) { exit('兩次密碼不一致,請返回上一頁'); } $username = trim($_POST['username']); $password = md5(trim($_POST['password'])); $time = time(); $ip = $_SERVER['REMOTE_ADDR']; $conn = mysqli_connect('localhost', 'root', 'liwenkaihaha'); //如果有錯誤,存在錯誤號 if (mysqli_errno($conn)) { echo mysqli_error($conn); exit; } mysqli_select_db($conn, 'book'); mysqli_set_charset($conn, 'utf8'); $sql = "insert into user(username,password,createtime,createip) values('" . $username . "','" . $password . "','" . $time . "','" . $ip . "')"; $result = mysqli_query($conn, $sql); if ($result) { echo '成功'; } else { echo '失敗'; } echo '當前用戶插入的ID為' . mysqli_insert_id($conn); mysqli_close($conn); ?>