2013-12-14 40 views
4

我正在使用登錄功能。PHP - 我如何讓我的用戶登錄?

但是,當我從我的網站更改頁面,我必須再次登錄。

當我更改我的頁面時,如何讓我的用戶登錄?

這裏我的代碼:

<?php 
error_reporting(0); 
if($_POST['login']=="") { 
?> 
    <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>" > 
    <label><a>Utilizador</a><input type="text" name="login" id="s-user"></label> 
    <label><a>Senha</a><input type="text" name="password" id="s-pass"></label> 
     <input type="submit" class="submit" value="Entrar"> 

    </form> 


<?php 
} 
else { 
?> 
<?php 
include("classes/Utilizadores/Cliente.class.php"); 


     if($_REQUEST['login']!="") { 
      if($_REQUEST['password']!="") { 

          $clientes = new Cliente(); 
          if($clientes->verificarCliente($_REQUEST['login'], $_REQUEST['password'])) { 
           echo "<br>"; 
          } else { 
           echo "<br><a>Login ou senha errados, caso não tenha, <a href='criarconta.php'> registre-se</a>, <a>ou</a> <a href='index.php'>volte a tentar.</a></a><br>"; 
          } 
          $clientes->endCliente(); 

      } else { 
       echo "ERRO: Deve introduzir a sua password...<br>"; 
      } 
     } else { 
      echo "ERRO: Deve introduzir o seu login...<br>"; 
     } 

} 
?> 

我的功能代碼:

function verificarCliente($login, $password) { 
    $sql = "SELECT * FROM users WHERE login LIKE '$login' AND password LIKE '$password'"; 
    if(($rs=$this->bd->executarSQL($sql))){ 
     if(mysql_fetch_row($rs)==false) { 
      return false; 
     } else { 

           echo "<br><b> <a>Bem-Vindo <font size=2>" .mysql_result($rs,0,"login")."</font></b></a><br><br><br>";  

      return true; 

     } 
    } 
    else { 
     return false; 
    } 
} 
+3

您可以使用['sessions']要記錄的其他頁面( http://www.php.net/manual/en/features.sessions。另外,如果你要使用會話,記得在你的所有頁面裏都有'session_start();'。 –

+1

你怎麼知道這麼多的PHP,並從來沒有聽說過會議? – samayo

+0

我正在學習如何使用類,這段代碼來自我的老師,並且正在構建一個基於此代碼的項目。我的困難是在功能中使用會話。因爲我聽說過會話,並且我在最後一個項目中使用了會話(沒有函數和類),但是我不知道如何在函數中使用會話。 – user2744048

回答

2

首先,我強烈建議不要使用LIKE運算符,而是使用=運算符。另外我會推薦使用參數化quires。此外,我會建議哈希你​​的用戶密碼,醃他們也是一個非常好的主意。

給這些頁面一個閱讀。這裏有很好的信息:

How can I prevent SQL injection in PHP?

Secure hash and salt for PHP passwords

crackstation.net多語言和一個很好的解釋提供了一個免費的圖書館。

但你需要跟蹤的登錄用戶:

function verificarCliente($login, $password) { 

     $sql = "SELECT * FROM users WHERE login = '$login' AND password = '$password'"; 
     if(($rs=$this->bd->executarSQL($sql))){ 
      if(mysql_fetch_row($rs)==false) { 
       return false; 
      } else { 
       session_start(); 
       $the_username = // grab the username from your results set 
       $_SESSION['username'] = $the_username; 

       // put other things in the session if you like 
       echo "<br><b> <a>Bem-Vindo <font size=2>" .mysql_result($rs,0,"login")."</font></b></a><br><br><br>";  

       return true; 

      } 
     } 
     else { 
      return false; 
     } 
    } 

現在就需要用戶在

session_start(); 
if (!isset($_SESSION['username']) || empty($_SESSION['username'])) { 
     // redirect to your login page 
     exit(); 
} 

$username = $_SESSION['username']; 
// serve the page normally. 
4

使用$_SESSION變量。 http://www.php.net/manual/en/reserved.variables.session.php。他們幫助您存儲可以從網站的任何其他部分訪問它們的變量。

在登錄成功:

1)查詢像姓氏,姓名,性別,生日等

2)將它們保存在變量,如FIRST_NAME $,$姓氏等

基本信息

3)分配這些變量這樣的會議:

$first_name = $_SESSION['first_name']; 
$birthday = $_SESSION['birthday']; 

在註銷,只需銷燬與session_destroy會話()。

因此$_SESSION['first_name']將成爲用戶的第一個名稱,可以在代碼的任何位置進行操作。

編輯:我引用php.net而不是W3學校,因爲很多人似乎並不喜歡它。

+1

會話不存儲在客戶端。會話數據存儲在服務器上。會話ID在客戶端以cookie的形式存儲,並在每個請求中發送給服務器。 –

+2

不推薦w3schools作爲學習php的參考。該網站是不是很準確 – samayo

+0

感謝您的信息@azizpunjani。編輯我的答案。 –

相關問題