2017-06-01 52 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();

这样,你可以先比较电子邮件地址和密码,以及做其他比较后根据要求。请让我知道是否有任何其他问题