2012-04-15 20 views
0

私はSQLログインシステムを作る過程にあります。私は、ユーザー名とパスワードを確認して戻すIFのような単純なものから始めたいと思いましたあなたは右上に挨拶をしてメインの索引に行きます。
私はこれをすべて行いました。私の見ているところからはうまくいくはずですが、ログインフォームを送信すると、サーバはHTTP Error 500 (Internal Server Error)を投げます。 IRCの友人が解決策を見つけることができなかったので、私はここで助けを得ることができたと思っていました。ログインシステムは、2つのファイルを包含し、その内容は以下のとおりです。

のindex.php:
PHP単純なログインシステム - 500エラー

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html lang="en"> 
<head> 
    <title>Kinz</title> 
    <?php session_start(); ?> 
    <link rel="stylesheet" href="stylesheet.css"> 
    <meta name="description" content="Kinz's personal website." /> 
    <meta name="keywords" content="kinz,php,login,fruity,css" /> 
    <meta name="author" content="Kinz" /> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
</head> 
<body> 
    <div id="mainbar"> 
     <label class="menubar">Home</label> 

     <?php if ($_SESSION['loggedin'] == false || isset($_SESSION['loggedin']) == false) { ?> 
     <form id="loginform" action="auth.php?login=true" method="POST"> 
      <input type="submit" class="login" id="login" name="loginSubmit" value="Login"> 
      <input type="password" class="login" id="password" name="password" value="Password"> 
      <input type="text" class="login" id="username" name="username" value="Username"> 
     </form> <?php } elseif ($_SESSION['loggedin'] == true) { ?> 
      <label id="loginWelcome">Welcome, <?php echo $_SESSION['user']; ?>!</label> <?php } else { echo "Error."; } ?> 
    </div> 
    <div id="content"> 
     Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
    </div> 
</body> 
</html> 

auth.php:私はすべてのエラーを見つけることができませんでした

<?php session_start(); 
$user = preg_replace("/[^a-zA-Z1-9]/", '', $_POST['username']); 
$pass = preg_replace("/[^a-zA-Z1-9]/", '', $_POST['password']); 
$hpass = md5($pass); 

if (isset($_POST['loginSubmit']) && $_GET['login'] == "true") { 
    if ($user == "Admin" && $pass == "Password123") { 
     $_SESSION['loggedin'] = true; 
     $_SESSION['user'] = $user; 
     header("Location: index.php"); exit(); 
    } else { 
      print("<h1><b>Login failure.</b></h1>"); sleep(10); 
      header("Location: index.php"); exit(); 
      } 

    if (!$_SESSION['loggedin']) { 
     header("Location: index.php"); exit(); 
    } else { 
      header("Location: index.php"); exit(); 
    } 
} ?> 

私のコード、私は誰かが願っています。どんな助けもありがとうございます。

答えて

1

私が気づいた最初の事はsession_start()は、スクリプトの最初の行にはないということです。 session_start()は常に実行する必要がありますの出力を送信する前に!

また、なぜこの:if文

if (!$_SESSION['loggedin']) { 
    header("Location: index.php"); 
    exit(); 
} else { 
    header("Location: index.php"); 
    exit(); 
}/* THIS BIT */ else { 
    header("Location: index.php"); 
    exit(); 
}/* TO HERE */ 

あなたは1に2倍 "他" を持つことはできません。

+0

もう一度ありがとうございますが、今は何もしていないようです。ロードしてからインデックスページをリロードするだけで時間がかかります。 – Kinz

+0

あなたの変更を確認できるように、あなたの投稿のコードを更新してください。 – Jeffrey

+0

更新され、よりインデントされました。 – Kinz

0

まず、コードを少しきれいに書く必要があります。読むのは簡単です。ルートディレクトリに.htaccessファイルがありますか?または他のディレクトリのいずれかにありますか?それは隠しファイルです、もしそうなら、そのファイルの内容をここに投稿してください。

+0

私のコーディングスタイルは面倒ですが、孤独な '}'は私にはうんざりです.htaccessファイルはありません。 – Kinz

3

コードをインデントすると、}が見つからないことがあります。

<?php 
session_start(); 
$user = preg_replace("/[^a-zA-Z1-9]/", '', $_POST['username']); 
$pass = preg_replace("/[^a-zA-Z1-9]/", '', $_POST['password']); 
$hpass = md5($pass); 
if (isset($_POST['loginSubmit']) && $_GET['login'] == "true") { 
    if ($user == "Admin" && $pass == "Password123") { 
     $_SESSION['loggedin'] = true; 
     $_SESSION['user'] = $user; 
     header("Location: index.php"); 
     exit(); 
    } else { 
     print("<h1><b>Login failure.</b></h1>"); 
     sleep(10); 
     header("Location: index.php"); 
     exit(); 
    } 
    if (!$_SESSION['loggedin']) { 
     header("Location: index.php"); 
     exit(); 
    } else { 
     header("Location: index.php"); 
     exit(); 
    } // < Here's a missing } - Can't place two else-blocks after each other 
} else { 
    header("Location: index.php"); 
    exit(); 
} 
?> 
+0

ありがとうございますが、エラーはまだ残っています – Kinz

+1

@Kinz実際には、 'else'ブロックは互いに後に置くことができないので、'} 'はブロックを上に移動する必要があります。 **開発中にコードを正しくインデントすることの重要性**を理解できますか? –

+0

はい。私は将来しようとします。 – Kinz

1

session_start()を試して、ページ上部のインデックスファイルに移動してください。 (ページヘッダーを呼び出します)

オンサイドトピック。あなたのif-elseの使用方法は何ですか?それらはすべて同じページにリダイレクトされます。たぶんこれはテストのためのもので、メッセージを表示するための変数などを定義していないのでしょうか?

更新。私は何とかArtaexeの答えを忘れてしまったので、この投稿は役に立ちません。

関連する問題