網頁的編寫用PHP最方便。用php做了最簡單的使用者登入、建立的程式。
一、 MySQL的設計
MySQL設計了兩個表:members和sex。兩張表的建立語句分別是:
create table members (id int(4) NOT NULL auto_increment, username varchar(65) NOT NULL default '', password varchar(65) NOT NULL default '', PRIMARY KEY (id));
後有增加了幾個欄位:
alter table members add firstname varchar(65); alter table members add lastname varchar(65); alter table members add email varchar(65); alter table members add age varchar(65); alter table members add sex_id int; alter table members modify sex_id int(4); alter table members modify age int(4);
第二張表的建立語句:
create table sex (sex_id int primary key not null, sex varchar(20));
兩張表的結構如下:
mysql> desc members; +-----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+----------------+ | id | int(4) | NO | PRI | NULL | auto_increment | | username | varchar(65) | NO | | | | | password | varchar(65) | NO | | | | | firstname | varchar(65) | YES | | NULL | | | lastname | varchar(65) | YES | | NULL | | | email | varchar(65) | YES | | NULL | | | age | int(4) | YES | | NULL | | | sex_id | int(4) | YES | | NULL | | +-----------+-------------+------+-----+---------+----------------+ 8 rows in set (0.00 sec) mysql> desc sex; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | sex_id | int(11) | NO | PRI | NULL | | | sex | varchar(20) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
二、php頁面的編寫
1 index.html
Index.html是使用者的登入頁面主要是html的編寫:
<form name="form1" method="post" action="login.php"> 使用者登入<br> Username: <input name="username" type="text" id="username"><br> Password: <input name="password" type="password" id="password"><br> <input name="submit" type="submit" value="Login"> </form> <form name="form2" method="post" action="reg.html"> 使用者註冊<br> <input name="reg" type="submit" value="Reg"> </form>
具體的頁面如下:
2 使用者登入login.php
使用者填寫了使用者名稱和密碼後的登入和認證程式如下:
<?php include('conn.php'); $username = $_POST['username']; $password = $_POST['password']; $sql = "select * from members where username = '$username' and password = MD5('$password')"; $user_query = mysql_query($sql,$conn) or die('mysql query error'); $rows=mysql_num_rows($user_query); //print_r(mysql_fetch_row($user_query)); if($_GET['action'] == "logout"){ session_start(); unset($_SESSION['username']); //session_unset('username'); //session_destroy('username'); echo '登出登入成功!'; echo $_SESSION['username'],$username; exit; } if ($rows == 1){ session_start(); $_SESSION['username'] = $username; echo $username,' 歡迎你!進入 <a href="my.php">使用者中心</a><br />'; echo '點選此處 <a href="login.php?action=logout">登出</a> 登>錄!<br />'; exit; } else { echo '使用者名稱密碼錯誤,點選此處 <a href="index.html">login</a> 登入!<br />'; } ?>
登入後的頁面如下:
3 mysql的連線程式
在2中有一段conn.php,是與mysql的連線程式。具體內容如下:
<?php $mysrv="localhost"; //資料庫伺服器名稱 $myuser="root"; // 連線資料庫使用者名稱 $mypwd=""; // 連線資料庫密碼 $mydb='hengwei'; $conn = mysql_connect($mysrv,$myuser,$mypwd) or die("資料庫連結錯 誤".mysql_error()); mysql_select_db($mydb,$conn) or die("資料庫訪問錯誤".mysql_error()); ?>
4 使用者頁面my.php
使用者登入後,可以顯示自己的個人主頁,其具體內容如下:
<?php session_start(); //檢測是否登入,若沒登入則轉向登入介面 if(!isset($_SESSION['username'])){ echo '您還沒有登入,請登入','<br>','<a href="index.html">login</a> 登入<br />'; exit(); } $username = $_SESSION['username']; include('conn.php'); $regsql = "select * from members join sex on username='$username' and members.sex_id=sex.sex_id"; $user_query = mysql_query($regsql,$conn) or die('mysql query error'); while($row = mysql_fetch_array($user_query)){ echo '使用者名稱:',$row[username],'<br />'; echo '名:',$row[firstname],'<br />'; echo '姓:',$row[lastname],'<br />'; echo '年齡:',$row[age],'<br />'; echo 'Email:',$row[email],'<br />'; echo '性別:',$row[sex],'<br />'; } echo '<a href="login.php?action=logout">登出</a> 登入<br />'; ?>
頁面顯示如下內容:
5 使用者註冊頁面
使用者的註冊頁面和登入頁面類似,是html的,具體內容如下:
<form name = "reg1" method = "post" action = "reg.php"> 使用者註冊<br> Username: <input name="reguser" type="text" id="reguser"><br> Password: <input name="regpwd" type="password" id="regpwd"><br> First Name: <input name="regfn" type="text" id="regfn"><br> Last Name: <input name="regln" type="text" id="regln"><br> Email: <input name="regemail" type="text" id="regemail"><br> Age: <input name="regage" type="text" id="regage"><br> Sex <input name="regsex" type="text" id="regsex"><br> <input name="OK" type="submit" value="OK"> </form>
頁面顯示如下:
6 使用者註冊程式
使用者註冊程式內容如下:
<?php include('conn.php'); $reguser = $_POST['reguser']; $regpwd = $_POST['regpwd']; $regfn = $_POST['regfn']; $regln = $_POST['regln']; $regemail = $_POST['regemail']; $regage = $_POST['regage']; $regsex = $_POST['regsex']; $regsql = "insert into members (username,password,firstname,lastname,email,age,sex_id) values ('$reguser',MD5('$regpwd'),'$regfn','$regln','$regemail','$regage',(select sex_id from sex where sex='$regsex'))"; $user_query = mysql_query($regsql,$conn) or die('mysql query error'); echo $reguser,"註冊成功","<br>"; echo '返回登入頁面<a href="index.html">login</a>'; mysql_close($conn); ?>
具體的頁面顯示如下:
三、總結
用php+mysql實現使用者認證的程式相當比較簡單。但程式中需要主要session的控制。在需要保持session或unset session時,都需要session_start()。
總共6個程式組成了這個登入的邏輯:
[root@hwwaf02 au]# ll total 24 -rw-r--r--. 1 root root 323 Jun 23 00:17 conn.php -rw-r--r--. 1 root root 385 Jun 20 14:09 index.html -rw-r--r--. 1 root root 963 Jun 23 00:13 login.php -rw-r--r--. 1 root root 857 Jun 22 23:38 my.php -rw-r--r--. 1 root root 543 Jun 22 23:16 reg.html -rw-r--r--. 1 root root 630 Jun 22 23:42 reg.php