2017-12-10 15 views
0

私はこのログインシステムを持っています。誤った資格でログインした場合、フォームは表示されますが、直接index.phpに直接表示されます。エラーメッセージはありません...何もありません。誰がなぜこれが起こっているのか知っていますか?ApacheサーバでPHPスクリプトが実行されていません

HERESに私のコード:

<?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> 

+0

フォームアクションは 'index.php'に設定されています。 'login.php'またはログインスクリプトの名前が何であれ – fubar

答えて

0

は、このフォームあなたの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/en/ref.pdo-mysql.php

関連する問題