簡體   English   中英

PHP腳本未在Apache服務器上執行

[英]Php script not executed on Apache server

我有這個登錄系統。 表單顯示出來,但是當以錯誤的憑據按下登錄時,直接進入index.php。 沒有錯誤信息...什么都沒有。 有人知道為什么會這樣嗎?

這是我的代碼:

<?php
session_start();

if(isset($_POST['login'])) {
    include_once("db.php");
    $username = strip_tags($_POST['username']);
    $password = strip_tags($_POST['password']);

    $username = stripslashes($username);
    $password = stripslashes($password);

    $username = mysqli_real_escape_string($db, $username);
    $password = mysqli_real_escape_string($db, $password);

    $password = md5($password);

    $sql = "SELECT * FROM users WHERE username='$username' LIMIT 1";
    $query = mysqli_query($db, $sql);
    $row = mysqli_fetch_array($query);
    $id = $row['id'];
    $db_password = $row['password'];

    if($password == $db_password) {
        $_SESSION['username'] = $username;
        $_SESSION['id'] = $id;
        header("Location: index.php");
    } else {
        echo "You didn't enter the correct details!";
    }

}
?>

<html>
<head>
<title>Login</title>
</head>
<body>
<h1 style="font-family:         Tahoma;">Login</h1>
<form action="index.php" method="post" enctype="multipart/form-data">
    <input placeholder="Username" name="username" type="text" autofocus>
    <input placeholder="Password" name="password" type="password">
    <input name="login" type="submit" value="Login">
</form>

這是您的index.php頁面嗎? 表單操作是index.php,因此它會發布到索引頁面,並且永遠不會在POST上運行您的代碼。 從表單元素中刪除action="index.php" ,以便將其發布到當前腳本中。 我認為這是不同的,因為您在成功登錄后正在執行301重定向。

一些建議是在重定向的標頭函數之后拋出exit() 另外,您可以為表單錯誤設置一個變量,並將其與標記一起放入。 這是更新的腳本:

<?php
session_start();

if(isset($_POST['login'])) {
    include_once("db.php");
    $username = strip_tags($_POST['username']);
    $password = strip_tags($_POST['password']);

    $username = stripslashes($username);
    $password = stripslashes($password);

    $username = mysqli_real_escape_string($db, $username);
    $password = mysqli_real_escape_string($db, $password);

    $password = md5($password);

    $sql = "SELECT * FROM users WHERE username='$username' LIMIT 1";
    $query = mysqli_query($db, $sql);
    $row = mysqli_fetch_array($query);
    $id = $row['id'];
    $db_password = $row['password'];

    if($password == $db_password) {
        $_SESSION['username'] = $username;
        $_SESSION['id'] = $id;
        header("Location: index.php");
        exit();
    } else {
        $error = "You didn't enter the correct details!";
    }

}
?>

<html>
<head>
    <title>Login</title>
</head>
<body>
<h1 style="font-family: Tahoma;">Login</h1>
<?php if (!empty($error)) echo '<div class="login-error">' . $error . '</div>'; ?>
<form method="post" enctype="multipart/form-data">
    <input placeholder="Username" name="username" type="text" autofocus>
    <input placeholder="Password" name="password" type="password">
    <input name="login" type="submit" value="Login">
</form>

希望有幫助!

我還建議通過MySQLi使用PDO驅動程序。 這確實可以幫助防止SQL注入,特別是如果您正在學習和計划將其部署到生產環境中時。

http://php.net/manual/zh/ref.pdo-mysql.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM