PHP使用者登入模組實現
項目包含的功能指令碼:
login.php//登入
reg.php//註冊使用者
user_add.php//註冊校正指令碼
user_login_check.php//登入校正指令碼
image.php//驗證碼圖片產生指令碼
流程:
設計資料庫:
包含使用者uid,使用者名稱,密碼,暱稱,性別,郵箱,註冊時間
sql語句如下
create table users (uid bigint(20) not null auto_increment primary key unique key,username varchar(100) default null, userpassword varchar(100) default null, nickname varchar(100) default null, sex tinyint(1) default 0,email varchar(100) default null, regtime timestamp(14) default 0);
註冊模組:
reg.php填寫註冊資訊,通過js指令碼判斷所填寫資訊是否合法
如果合法,那麼提交表單,通過user_add.php進行使用者的註冊
user_add.php指令碼實現的功能如下:
判斷輸入的資訊是否合法,這個js可以實現,但是為了瀏覽器安全色這裡用php再實現一遍js的功能
如果合法並且以前沒有註冊過,那麼可以註冊,否則提示錯誤資訊
登入模組:
login.php填寫登入資訊,js判斷輸入資訊是否合法
如果合法提交表單,通過user_login_check.php登入
user_login_check.php實現功能如下:
判斷輸入資訊是否合法,與js功能相同
如果合法並且使用者名稱密碼都對的話儲存session變數,允許使用者登入
驗證碼模組:
防止惡意註冊產生驗證碼,產生的是png格式的5位元字驗證碼
需要用到session變數,伺服器需要安裝gd庫
具體注意事項:
1、JavaScript指令碼
<script language="javascript">
function IsDigit(cCheck)
{
return(('0'<=cCheck)&&(cCheck<='9'));
}
function IsAlpha(cCheck)
{
return((('a'<=cCheck)&&(cCheck<='z'))||(('A'<=cCheck)&&(cCheck<='Z')));
}
function IsValid()
{
var struserName=reg.UserName.value;
for(nIndex=0;nIndex<struserName.length;nIndex++)
{
cCheck=struserName.charAt(nIndex);
if(!(IsDigit(cCheck)||IsAlpha(cCheck)))
{
return false;
}
}
return true;
}
function chkEmail(str)
{
return str.search(/[/w/-]{1,}@[/w/-]{1,}/.[/w/-]{1,}/)==0?true:false;
}
function docheck()///////////////This place has a very important problem.MF can't do as wo expect!
{
if(reg.UserName.value=="")
{
alert("請填寫使用者名稱");
return false;
}
else if(!IsValid())
{
alert("使用者名稱只能使用數字和字母");
return false;
}
else if(reg.UserPassword.value=="")
{
alert("請填寫密碼");
return false;
}
else if(reg.UserPassword.value!=reg.CUserPassword.value)
{
alert("兩次密碼輸入不一樣");
return false;
}
else if (reg.NickName.value=="")
{
alert("請填寫暱稱");
return false;
}
else if (reg.Email.value=="")
{
alert("請填寫郵箱地址");
return false;
}
else if (!chkEmail(reg.Email.value))
{
alert("請填寫有效郵箱地址!");
return false;
}
else return true;
}
</script>
響應js指令碼的方法:<form name="reg" action="user_login_check.php" method="post" target="_self" onSubmit="return docheck()">
在提交表單時候響應(有的瀏覽器在docheck()返回錯誤的時候任然繼續提交表單,這就是為什麼要在表單處理指令碼裡任然繼續使用php進行輸入資訊再次驗證的原因)
登陸時候可以只驗證使用者名稱和密碼
2、資料庫連接
$strSql="";
$database_username="root";
$database_password="ssklzs";
$database_name="userlog";
$s_UserName=$_POST["UserName"];
$s_UserPassword=$_POST["UserPassword"];
$strSql="select * from users where username like '".$s_UserName."' and userpassword like '".$s_UserPassword."'";
//$strSql="insert into users(username,userpassword,nickname,sex,email,regtime)values('".$s_UserName."','".$s_UserPassword."','".$s_NickName."','".$s_Sex."','".$s_Email."',now())";//now()當前系統時間
//串連資料庫
$link=mysql_connect("localhost",$database_username,$database_password) or die("Could not connect MySQL:".mysql_error());
mysql_select_db($database_name,$link) or die("Can not use userlog:".mysql_error());
$result=mysql_query($strSql);
//sql執行完畢
if($row=mysql_fetch_object($result)){···}
else{···}
3、session變數設定
session是不同php指令碼間參數進行傳遞的通道
session變數大致需要兩個,一個用來儲存驗證碼,一個用來記錄登入的使用者
一般情況下php.ini檔案的session.auto_start = 0表示session沒有自動開啟,所以在使用session時候需要將此數值設為1
注意session變數的初始化和登出
4、返回按鈕
echo ("<input type='button' name='btn' value='返回' onClick='window.history.go(-1)' />")