2017-06-01 104 views
0

即時寫一個登錄系統,用戶輸入他的電子郵件和密碼,腳本檢查它是否在數據庫中,然後檢查密碼。我的問題,它只檢查第一個值,其他將被忽略。如何通過數據庫完成循環,然後如果不成功則轉到其他部分?php mysqli stmnt檢查用戶登錄

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 
session_start(); 
$host = htmlspecialchars($_SERVER["HTTP_HOST"]); 
$uri = rtrim(dirname(htmlspecialchars($_SERVER["PHP_SELF"])), "/\\"); 
require_once "db_daten_aktuell.php"; 

if (isset($_POST['email']) && ($_POST['passwort'])) 
    { 
    if ($stmt = $mysqli->prepare("SELECT vorname, email, password FROM gast")) 
     { 
     $stmt->execute(); 
     $stmt->bind_result($vorname, $email, $password); 
     while ($stmt->fetch()) 
      { 
      if ($_POST['email'] == $email) 
       { 
        if ($_POST['passwort'] == $password){ 
         $_SESSION["name"] = $vorname; 
         $_SESSION["login"] = "ok"; 
         $extra = "willkommen.php"; 

        } 

       } 
       else 
       { 
       $extra = "start.php?f=1"; 
       } 

      $stmt->close(); 
      } 

     $mysqli->close(); 
     } 
    } 

header("Location: http://$host$uri/$extra"); 

?> 
+0

Mysql支持查詢中的WHERE語句。閱讀手冊。 –

+0

爲什麼不使用'''where'''並在那裏只比較需要的電子郵件ID和密碼? – mi6crazyheart

+0

因爲我還不知道 – chim

回答

1

嘗試將此部分

if ($stmt = $mysqli->prepare("SELECT vorname, email, password FROM gast")) 
    { 
    $stmt->execute(); 

改變

if ($stmt= $mysqli->prepare("SELECT vorname, email, password FROM gast WHERE email=? AND password=?")); $stmt->bind_param("ss", $_POST['email'] ,$_POST['passwort']); $stmt->execute();

這樣,你可以先比較電子郵件地址和密碼,以及做其他比較後根據要求。請讓我知道是否有任何其他問題