1

このエラーを修正する方法がわかりません。ユーザーが間違った入力を入力すると、ユーザーのログイン時に空白のページが表示されます。データベースに存在しない情報を入力した場合。助けてください :)

login.php

<?php 
 include ("base.php");
 include ("passwordchecker.php");
 include ("functions.php");

    $error = "";

    function postInput($htmlName)
    {
        if(isset($_POST[$htmlName]))
        {
            return $_POST[$htmlName];
        }
        return null;
    }

    //check if the user is already login.
            if(isset($_SESSION['userid']))
            {
                //check the database for existing user.
                $usercheck = $mysqli->prepare("SELECT * FROM user WHERE userid = ?");
                $usercheck->bind_param("i",$_SESSION['userid']);
                $usercheck->execute();
                $usercheck->store_result();
                $results = $usercheck->num_rows;
                if($results == 1)
                {
                    redirect("languages.php");
                }
            }

    $loginusername = postInput('username');
    $loginpassword = postInput('password');



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

        if($loginusername == "" || $loginpassword == "")
        {
            $error = "Please Enter your user name and password";

        }
        else
        {
                //user isnt logged in
                if($stmt = $mysqli->prepare("SELECT userid, password FROM user WHERE username = ? LIMIT 1"))
                {
                    $stmt->bind_param("s",$loginusername);
                    $stmt->execute();
                    $stmt->bind_result($userid,$correctHash);
                    $stmt->fetch();
                    if(ValidatePassword($loginpassword,$correctHash))
                    {
                        $_SESSION['userid'] = $userid;
                        redirect('languages.php');
                    }
                    die();
                    $stmt->close();
                }
                else
                {
                    $error = "You dont exist in Database."
                }
        }
    }



?>

passwordchecker.php

<?php
    function HashPassword($password)
    {
        $salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
        $hash = hash("sha256", $salt . $password);
        $final = $salt . $hash;
        return $final;
    }

    function ValidatePassword($password, $correcthash)
    {
        $salt = substr($correcthash, 0, 64);
        $validhash = substr($correcthash, 64, 64);

        $testhash = hash("sha256", $salt . $password);

        return $testhash == $validhash;
    }
?>

関数.php

<?php
    function redirect($page)
    {
        header("Location: " . $page);
        exit();
    }
?>

base.php

 <?php
        session_start();

        $dbhost = "localhost";
        $dbname = "login";
        $dbuser = "root";
        $dbpass = "DirectedStudies2012";

    $mysqli = new mysqli($dbhost,$dbuser,$dbpass,$dbname);
?>
4

3 に答える 3

2

次の条件にelseを追加する必要があります

            if(ValidatePassword($loginpassword,$correctHash))
            {
                $_SESSION['userid'] = $userid;
                redirect('languages.php');
            }

すなわち

            if(ValidatePassword($loginpassword,$correctHash))
            {
                $_SESSION['userid'] = $userid;
                redirect('languages.php');
            } else {
                redirect('backtoyourloginscreen.php');
            }

PS:$ error="あなたはデータベースに存在しません。" セミコロンがありません;)

于 2012-05-21T13:31:48.867 に答える
0

ステートメントheader("Location: ".your page)の代わりに使用してみてください。die()

于 2012-05-21T13:37:16.050 に答える
0

コードをすばやくスキャンすると、$error 変数を追跡しているように見えますが、実際には出力していません。エコーしてクライアントに送信してみてください。

echo $error;
于 2012-05-21T13:24:11.530 に答える