<output id="r87xx"></output>
    1. 
      
      <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
        •   

               當(dāng)前位置:首頁>軟件介紹>PHP用戶注冊與登錄 查詢:
               
          PHP用戶注冊與登錄

          前言

           

          網(wǎng)站用戶注冊與登錄是很常用的一個功能,本節(jié)教材就以此來演示一下 PHP 中如何開發(fā)用戶注冊與登錄模塊。

           

          本節(jié)需要用到的重點 PHP 基礎(chǔ)知識:

           

          l PHP 中預(yù)定義 $_POST 和 $_GET 全局變量來接受用戶表單和 URL 參數(shù)信息,關(guān)于 PHP 表單更多信息參見《PHP 表單》。

           

          l PHP 正則表達(dá)式用于判斷用戶的輸入是否符合要求,關(guān)于正則表達(dá)式更多信息參見《PHP 正則表達(dá)式》。

           

          l 用戶登錄檢測通過后以 session 來保持用戶的登錄信息,關(guān)于 session 更多信息參見《PHP Session》或者《PHP Cookie》。

           

          需求分析

           

          主要功能分為用戶注冊、用戶登錄、用戶退出、用戶中心四個部分。

           

          用戶注冊

           

          用戶注冊主要功能有:

           

          1. 注冊信息表單填寫界面javascript腳本初步檢測用戶輸入的注冊信息。

           

          2. 注冊處理模塊檢測注冊信息是否符合要求。

           

          3. 檢測用戶名是否已存在。

           

          4. 將注冊信息寫入數(shù)據(jù)表,注冊成功。

           

          用戶登錄

           

          用戶登錄主要功能有:

           

          1. 登錄表單界面javascript腳本初步檢測用戶輸入的登錄信息。

           

          2. 登錄模塊將用戶輸入信息與數(shù)據(jù)庫數(shù)據(jù)進(jìn)行核對。

           

          3. 登錄信息正確,則提示登錄成功,將用戶設(shè)置為登錄狀態(tài)(session)。

           

          4. 登錄信息不正確,則提示登錄失敗,用戶可以再次嘗試登錄。

           

          用戶退出

           

          用戶退出主要功能有:

           

          1. 無條件注銷 session 。

           

          用戶中心

           

          用戶退出主要功能有:

           

          1. 判斷用戶是否登錄,如果沒有登錄,則轉(zhuǎn)向到登錄界面。

           

          2. 如果登錄是登錄狀態(tài),則讀出用戶相關(guān)信息。

           

          數(shù)據(jù)表設(shè)計

           

          根據(jù)功能需求分析,用于記用戶信息的 user 表需要的字段如下:

           

          字段名

          數(shù)據(jù)類型

          說明

          uid

          mediumint(8)

          主鍵,自動增長

          username

          char(15)

          注冊用戶名

          password

          char(32)

          MD5 加密后的密碼

          email

          varchar(40)

          用戶 Email

          regdate

          int(10)

          用戶注冊時間戳




           

          建表 SQL 參考如下:

           

          CREATE TABLE `user` (

           

          `uid` mediumint(8) unsigned NOT NULL auto_increment,

           

          `username` char(15) NOT NULL default '',

           

          `password` char(32) NOT NULL default '',

           

          `email` varchar(40) NOT NULL default '',

           

          `regdate` int(10) unsigned NOT NULL default '0',

           

          PRIMARY KEY  (`uid`)

           

          ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

           

          頁面布局

           

          各頁面功能如下:

           

          l reg.html:用戶注冊信息填寫表單頁面

           

          l conn.php:數(shù)據(jù)庫連接包含文件

           

          l reg.php:用戶注冊處理程序

           

          l login.html:用戶登錄表單頁面

           

          l login.php:用戶登錄表單頁面

           

          l my.php:用戶中心

           

          注冊頁面

          reg.html 負(fù)責(zé)收集用戶填寫的注冊信息。教程里只列出關(guān)鍵的代碼片段,完整的代碼附在本節(jié)最后。

           

          注冊表單

          <fieldset>

           

          <legend>用戶注冊</legend>

           

          <form name="RegForm" method="post" action="reg.php" onSubmit="return InputCheck(this)">

           

          <p>

           

          <label for="username" >用戶名:</label>

           

          <input id="username" name="username" type="text" />

           

          <span>(必填,3-15字符長度,支持漢字、字母、數(shù)字及_)</span>

           

          <p/>

           

          <p>

           

          <label for="password" >密碼:</label>

           

          <input id="password" name="password" type="password" />

           

          <span>(必填,不得少于6位)</span>

           

          <p/>

           

          <p>

           

          <label for="repass" >重復(fù)密碼:</label>

           

          <input id="repass" name="repass" type="password" />

           

          <p/>

           

          <p>

           

          <label for="email" >電子郵箱:</label>

           

          <input id="email" name="email" type="text" />

           

          <span>(必填)</span>

           

          <p/>

           

          <p>

           

          <input type="submit" name="submit" value="  提交注冊  " />

           

          </p>

           

          </form>

           

          </fieldset>

           

          javascript檢測代碼

          <script language=JavaScript>

           

          <!--

           

          functionInputCheck(RegForm)

           

          {

           

          if (RegForm.username.value == "")

           

          {

           

          alert("用戶名不可為空!");

           

          RegForm.username.focus();

           

          return (false);

           

          }

           

          if (RegForm.password.value == "")

           

          {

           

          alert("必須設(shè)定登錄密碼!");

           

          RegForm.password.focus();

           

          return (false);

           

          }

           

          if (RegForm.repass.value != RegForm.password.value)

           

          {

           

          alert("兩次密碼不一致!");

           

          RegForm.repass.focus();

           

          return (false);

           

          }

           

          if (RegForm.email.value == "")

           

          {

           

          alert("電子郵箱不可為空!");

           

          RegForm.email.focus();

           

          return (false);

           

          }

           

          }

           

          //-->

           

          </script>

           

          CSS 樣式

          <style type="text/css">

           

          html{font-size:12px;}

           

          fieldset{width:520px; margin: 0 auto;}

           

          legend{font-weight:bold; font-size:14px;}

           

          label{float:left; width:70px; margin-left:10px;}

           

          .left{margin-left:80px;}

           

          .input{width:150px;}

           

          span{color: #666666;}

           

          </style>

           

          注冊表單效果圖:

           

           

          數(shù)據(jù)庫連接

          <?php

           

          $conn = @mysql_connect("localhost","root","root123");

           

          if (!$conn){

           

          die("連接數(shù)據(jù)庫失?。?quot; . mysql_error());

           

          }

           

          mysql_select_db("test", $conn);

           

          //字符轉(zhuǎn)換,讀庫

           

          mysql_query("set character set 'gbk'");

           

          //寫庫

           

          mysql_query("set names 'gbk'");

           

          ?>

           

          注冊處理

          reg.php負(fù)責(zé)處理用戶注冊信息。

           

          注冊檢測

          if(!isset($_POST['submit'])){

           

          exit('非法訪問!');

           

          }

           

          $username = $_POST['username'];

           

          $password = $_POST['password'];

           

          $email = $_POST['email'];

           

          //注冊信息判斷

           

          if(!preg_match('/^[wx80-xff]{3,15}$/', $username)){

           

          exit('錯誤:用戶名不符合規(guī)定。<a href="javascript:history.back(-1);">返回</a>');

           

          }

           

          if(strlen($password) < 6){

           

          exit('錯誤:密碼長度不符合規(guī)定。<a href="javascript:history.back(-1);">返回</a>');

           

          }

           

          if(!preg_match('/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/', $email)){

           

          exit('錯誤:電子郵箱格式錯誤。<a href="javascript:history.back(-1);">返回</a>');

           

          }

           

          本段代碼首先檢測是否 POST 提交訪問該頁,接下來根據(jù)注冊要求(用戶名 3-15 字符長度,支持漢字、字母、數(shù)字及_;密碼不得少于 6 位)對用戶提交的注冊信息進(jìn)行檢測。在檢測用戶名和電子郵箱時采用了正則檢測,關(guān)于正則表達(dá)式更所信息請參看《PHP 正則表達(dá)式》。

           

          數(shù)據(jù)庫交互

          //包含數(shù)據(jù)庫連接文件

           

          include('conn.php');

           

          //檢測用戶名是否已經(jīng)存在

           

          $check_query = mysql_query("select uid from user where username='$username' limit 1");

           

          if(mysql_fetch_array($check_query)){

           

          echo '錯誤:用戶名 ',$username,' 已存在。<a href="javascript:history.back(-1);">返回</a>';

           

          exit;

           

          }

           

          //寫入數(shù)據(jù)

           

          $password = MD5($password);

           

          $regdate = time();

           

          $sql = "INSERT INTO user(username,password,email,regdate)VALUES('$username','$password','$email',

           

          $regdate)";

           

          if(mysql_query($sql,$conn)){

           

          exit('用戶注冊成功!點擊此處<a href="login.html">登錄</a>');

           

          } else {

           

          echo '抱歉!添加數(shù)據(jù)失?。?#39;,mysql_error(),'<br />';

           

          echo '點擊此處<a href="javascript:history.back(-1);">返回</a>重試';

           

          }

           

          登錄頁面

          login.html 負(fù)責(zé)收集用戶填寫的登錄信息。

           

          <fieldset>

           

          <legend>用戶登錄</legend>

           

          <form name="LoginForm" method="post" action="login.php" onSubmit="return InputCheck(this)">

           

          <p>

           

          <label for="username" >用戶名:</label>

           

          <input id="username" name="username" type="text" />

           

          <p/>

           

          <p>

           

          <label for="password" >密碼:</label>

           

          <input id="password" name="password" type="password" />

           

          <p/>

           

          <p>

           

          <input type="submit" name="submit" value="  確定  " />

           

          </p>

           

          </form>

           

          </fieldset>

           

          javascript檢測及 CSS 樣式可參考 reg.html,本部分略去,可直接查看最后附錄的完整代碼。

           

          登錄處理

          login.php負(fù)責(zé)處理用戶登錄與退出動作。

           

          //登錄

           

          if(!isset($_POST['submit'])){

           

          exit('非法訪問!');

           

          }

           

          $username = htmlspecialchars($_POST['username']);

           

          $password = MD5($_POST['password']);

           

          //包含數(shù)據(jù)庫連接文件

           

          include('conn.php');

           

          //檢測用戶名及密碼是否正確

           

          $check_query = mysql_query("select uid from user where username='$username' and password='$password' limit 1");

           

          if($result = mysql_fetch_array($check_query)){

           

          //登錄成功

           

          $_SESSION['username'] = $username;

           

          $_SESSION['userid'] = $result['uid'];

           

          echo $username,' 歡迎你!進(jìn)入<a href="my.php">用戶中心</a><br />';

           

          echo '點擊此處<a href="login.php?action=logout">注銷</a>登錄!<br />';

           

          exit;

           

          } else {

           

          exit('登錄失敗!點擊此處<a href="javascript:history.back(-1);">返回</a>重試');

           

          }

           

          該段代碼首先確認(rèn)如果是用戶登錄的話,必須是 POST 動作提交。然后根據(jù)用戶輸入的信息去數(shù)據(jù)庫核對是否正確,如果正確,注冊 session 信息,否則提示登錄失敗,用戶可以重試。

           

          該段代碼需要在頁面開頭啟用session_start() 函數(shù),參見下面退出處理代碼部分。

           

          退出處理

          處理用戶退出的代碼跟處理登錄的代碼都在login.php里。

           

          session_start();

           

          //注銷登錄

           

          if($_GET['action'] == "logout"){

           

          unset($_SESSION['userid']);

           

          unset($_SESSION['username']);

           

          echo '注銷登錄成功!點擊此處<a href="login.html">登錄</a>';

           

          exit;

           

          }

           

          該段代碼在處理用戶登錄的代碼之前,只允許以login.php?action=logout 的方式訪問,其他方式都認(rèn)為是檢測用戶登錄。具體邏輯參看附錄完整代碼。

           

          用戶中心

          my.php是用戶中心,列在教程里作為用戶登錄檢測參考。

           

          <?php

           

          session_start();

           

          //檢測是否登錄,若沒登錄則轉(zhuǎn)向登錄界面

           

          if(!isset($_SESSION['userid'])){

           

          header("Location:login.html");

           

          exit();

           

          }

           

          //包含數(shù)據(jù)庫連接文件

           

          include('conn.php');

           

          $userid = $_SESSION['userid'];

           

          $username = $_SESSION['username'];

           

          $user_query = mysql_query("select * from user where uid=$userid limit 1");

           

          $row = mysql_fetch_array($user_query);

           

          echo '用戶信息:<br />';

           

          echo '用戶ID:',$userid,'<br />';

           

          echo '用戶名:',$username,'<br />';

           

          echo '郵箱:',$row<'email'>,'<br />';

           

          echo '注冊日期:',date("Y-m-d", $row['regdate']),'<br />';

           

          echo '<a href="login.php?action=logout">注銷</a>登錄<br />';

           

          ?>

           

          PHP 附錄 :用戶注冊與登錄完整代碼

           

          以下列出了用戶注冊與登錄的完整代碼,您也可以點擊此處下載本節(jié)教程完整的源代碼壓縮包。

           

          login.html

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

           

          "">

           

          <html xmlns="">

           

          <head>

           

          <meta http-equiv="Content-Type" content="text/html; charset=gbk" />

           

          <title>用戶登錄</title>

           

          <style type="text/css">

           

          html{font-size:12px;}

           

          fieldset{width:520px; margin: 0 auto;}

           

          legend{font-weight:bold; font-size:14px;}

           

          label{float:left; width:70px; margin-left:10px;}

           

          .left{margin-left:80px;}

           

          .input{width:150px;}

           

          span{color: #666666;}

           

          </style>

           

          <script language=JavaScript>

           

          <!--

           

          functionInputCheck(LoginForm)

           

          {

           

          if (LoginForm.username.value == "")

           

          {

           

          alert("請輸入用戶名!");

           

          LoginForm.username.focus();

           

          return (false);

           

          }

           

          if (LoginForm.password.value == "")

           

          {

           

          alert("請輸入密碼!");

           

          LoginForm.password.focus();

           

          return (false);

           

          }

           

          }

           

          //-->

           

          </script>

           

          </head>

           

          <body>

           

          <div>

           

          <fieldset>

           

          <legend>用戶登錄</legend>

           

          <form name="LoginForm" method="post" action="login.php" onSubmit="return InputCheck(this)">

           

          <p>

           

          <label for="username" >用戶名:</label>

           

          <input id="username" name="username" type="text" />

           

          <p/>

           

          <p>

           

          <label for="password" >密碼:</label>

           

          <input id="password" name="password" type="password" />

           

          <p/>

           

          <p>

           

          <input type="submit" name="submit" value="  確定  " />

           

          </p>

           

          </form>

           

          </fieldset>

           

          </div>

           

          </body>

           

          </html>

           

          conn.php

          <?php

           

          /*****************************

           

          *數(shù)據(jù)庫連接

           

          *****************************/

           

          $conn = @mysql_connect("localhost","root","root123");

           

          if (!$conn){

           

          die("連接數(shù)據(jù)庫失?。?quot; . mysql_error());

           

          }

           

          mysql_select_db("test", $conn);

           

          //字符轉(zhuǎn)換,讀庫

           

          mysql_query("set character set 'gbk'");

           

          //寫庫

           

          mysql_query("set names 'gbk'");

           

          ?>

           

          reg.php

          <?php

           

          if(!isset($_POST['submit'])){

           

          exit('非法訪問!');

           

          }

           

          $username = $_POST['username'];

           

          $password = $_POST['password'];

           

          $email = $_POST['email'];

           

          //注冊信息判斷

           

          if(!preg_match('/^[wx80-xff]{3,15}$/', $username)){

           

          exit('錯誤:用戶名不符合規(guī)定。<a href="javascript:history.back(-1);">返回</a>');

           

          }

           

          if(strlen($password) < 6){

           

          exit('錯誤:密碼長度不符合規(guī)定。<a href="javascript:history.back(-1);">返回</a>');

           

          }

           

          if(!preg_match('/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/', $email)){

           

          exit('錯誤:電子郵箱格式錯誤。<a href="javascript:history.back(-1);">返回</a>');

           

          }

           

          //包含數(shù)據(jù)庫連接文件

           

          include('conn.php');

           

          //檢測用戶名是否已經(jīng)存在

           

          $check_query = mysql_query("select uid from user where username='$username' limit 1");

           

          if(mysql_fetch_array($check_query)){

           

          echo '錯誤:用戶名 ',$username,' 已存在。<a href="javascript:history.back(-1);">返回</a>';

           

          exit;

           

          }

           

          //寫入數(shù)據(jù)

           

          $password = MD5($password);

           

          $regdate = time();

           

          $sql = "INSERT INTO user(username,password,email,regdate)VALUES('$username','$password','$email',

           

          $regdate)";

           

          if(mysql_query($sql,$conn)){

           

          exit('用戶注冊成功!點擊此處<a href="login.html">登錄</a>');

           

          } else {

           

          echo '抱歉!添加數(shù)據(jù)失?。?#39;,mysql_error(),'<br />';

           

          echo '點擊此處<a href="javascript:history.back(-1);">返回</a>重試';

           

          }

           

          ?>

           

          login.html

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

           

          "">

           

          <html xmlns="">

           

          <head>

           

          <meta http-equiv="Content-Type" content="text/html; charset=gbk" />

           

          <title>用戶登錄</title>

           

          <style type="text/css">

           

          html{font-size:12px;}

           

          fieldset{width:300px; margin: 0 auto;}

           

          legend{font-weight:bold; font-size:14px;}

           

          .label{float:left; width:70px; margin-left:10px;}

           

          .left{margin-left:80px;}

           

          .input{width:150px;}

           

          span{color: #666666;}

           

          </style>

           

          <script language=JavaScript>

           

          <!--

           

          functionInputCheck(LoginForm)

           

          {

           

          if (LoginForm.username.value == "")

           

          {

           

          alert("請輸入用戶名!");

           

          LoginForm.username.focus();

           

          return (false);

           

          }

           

          if (LoginForm.password.value == "")

           

          {

           

          alert("請輸入密碼!");

           

          LoginForm.password.focus();

           

          return (false);

           

          }

           

          }

           

          //-->

           

          </script>

           

          </head>

           

          <body>

           

          <div>

           

          <fieldset>

           

          <legend>用戶登錄</legend>

           

          <form name="LoginForm" method="post" action="login.php" onSubmit="return InputCheck(this)">

           

          <p>

           

          <label for="username" >用戶名:</label>

           

          <input id="username" name="username" type="text" />

           

          <p/>

           

          <p>

           

          <label for="password" >密碼:</label>

           

          <input id="password" name="password" type="password" />

           

          <p/>

           

          <p>

           

          <input type="submit" name="submit" value="  確定  " />

           

          </p>

           

          </form>

           

          </fieldset>

           

          </div>

           

          </body>

           

          </html>

           

          login.php

          <?php

           

          session_start();

           

          //注銷登錄

           

          if($_GET['action'] == "logout"){

           

          unset($_SESSION['userid']);

           

          unset($_SESSION['username']);

           

          echo '注銷登錄成功!點擊此處<a href="login.html">登錄</a>';

           

          exit;

           

          }

           

          //登錄

           

          if(!isset($_POST['submit'])){

           

          exit('非法訪問!');

           

          }

           

          $username = htmlspecialchars($_POST['username']);

           

          $password = MD5($_POST['password']);

           

          //包含數(shù)據(jù)庫連接文件

           

          include('conn.php');

           

          //檢測用戶名及密碼是否正確

           

          $check_query = mysql_query("select uid from user where username='$username' and password='$password'

           

          limit 1");

           

          if($result = mysql_fetch_array($check_query)){

           

          //登錄成功

           

          $_SESSION['username'] = $username;

           

          $_SESSION['userid'] = $result['uid'];

           

          echo $username,' 歡迎你!進(jìn)入<a href="my.php">用戶中心</a><br />';

           

          echo '點擊此處<a href="login.php?action=logout">注銷</a>登錄!<br />';

           

          exit;

           

          } else {

           

          exit('登錄失?。↑c擊此處<a href="javascript:history.back(-1);">返回</a>重試');

           

          }

           

          ?>

           

          my.php

          <?php

           

          session_start();

           

          //檢測是否登錄,若沒登錄則轉(zhuǎn)向登錄界面

           

          if(!isset($_SESSION['userid'])){

           

          header("Location:login.html");

           

          exit();

           

          }

           

          //包含數(shù)據(jù)庫連接文件

           

          include('conn.php');

           

          $userid = $_SESSION['userid'];

           

          $username = $_SESSION['username'];

           

          $user_query = mysql_query("select * from user where uid=$userid limit 1");

           

          $row = mysql_fetch_array($user_query);

           

          echo '用戶信息:<br />';

           

          echo '用戶ID:',$userid,'<br />';

           

          echo '用戶名:',$username,'<br />';

           

          echo '郵箱:',$row['email'],'<br />';

           

          echo '注冊日期:',date("Y-m-d", $row['regdate']),'<br />';

           

          echo '<a href="login.php?action=logout">注銷</a>登錄<br />';

           

          ?>

           

           



          php基礎(chǔ)知識點總結(jié)PHP從零入門教程
          PHP內(nèi)核解密學(xué)習(xí)PHP的方法與技巧
          PHP7性能翻倍關(guān)鍵大揭秘如何遏制PHP木馬攻擊
          PHP編程教程Ajax完成分頁技巧MySQL讀寫分離由PHP實現(xiàn)
          談PHP生成靜態(tài)頁面PHP訪問MySQL
          PHP常用代碼 基于php的萬年歷接口調(diào)用代碼實例
          PHP培訓(xùn)之高級工程師應(yīng)具備哪些條件 PHP底層的運(yùn)行機(jī)制-PHP從啟動到停止的整個生命周期
          深度探討PHP之性能怎樣才能成為PHP高手
          信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
          • 勁爆價:
            不限功能
            不限用戶
            1998元/年

          • 微信客服

            <output id="r87xx"></output>
          1. 
            
            <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
              • 中文字幕 激情 | 在线观看黄色国产视频 | 亚洲午夜视频在线观看 | 色秘 一区二区三区在线男奴 | 萝莉白虎一线天 | 美女无码电影 | 无码在线免费一区 | 国产ts视频 | 91精品国产综合久久久果冻传媒 | 操B国产 操屄影院 |