2016-08-08 9 views
0

私が取り組んでいる小さなプロジェクトには問題があります。私はhtml、php、MySQLなどについて学べるように努力しています。私はMySQLを使ってデータベースを作成しました。私が使用しているログインページが何であるかを知ることができるので、正しいユーザーアカウントと間違ったユーザーアカウントが含まれています。ログインが成功した場合、ウェルカムページにリダイレクトするページを取得することはできないようです。ここに私のコードです。ユーザーの資格情報が入力されたときにリダイレクトするログインページを取得できません

ログインページコード

<?php 
include("config.php"); 
session_start(); 

if($_SERVER["REQUEST_METHOD"] == "POST") { 
    // username and password sent from form 

    $myusername = mysqli_real_escape_string($db,$_POST['username']); 
    $mypassword = mysqli_real_escape_string($db,$_POST['password']); 

    $sql = "SELECT id FROM admin WHERE username = '$myusername' and passcode = '$mypassword'"; 
    $result = mysqli_query($db,$sql); 
    $row = mysqli_fetch_array($result,MYSQLI_ASSOC); 
    $active = $row['active']; 

    $count = mysqli_num_rows($result); 

    // If result matched $myusername and $mypassword, table row must be 1 row 

    if($count == 1) { 
    session_register("myusername"); 
    $_SESSION['username'] = $myusername; 

    header("location: welcome.php"); 
    }else { 
    $error = "Your Login Name or Password is invalid"; 
    } 
} 
?> 
    <html> 

    <head> 
    <title>Login Page</title> 

    <style type = "text/css"> 
    body { 
     font-family:Arial, Helvetica, sans-serif; 
     font-size:14px; 
    } 

    label { 
     font-weight:bold; 
     width:100px; 
     font-size:14px; 
    } 

    .box { 
     border:#666666 solid 1px; 
    } 
    </style> 

    </head> 

    <body bgcolor = "#FFFFFF"> 

    <div align = "center"> 
    <div style = "width:300px; border: solid 1px #333333; " align = "left"> 
     <div style = "background-color:#333333; color:#FFFFFF; padding:3px;"><b>Login</b></div> 

     <div style = "margin:30px"> 

      <form action = "" method = "post"> 
       <label>UserName :</label><input type = "text" name =  "username" class = "box"/><br /><br /> 
       <label>Password :</label><input type = "password" name = "password" class = "box" /><br/><br /> 
       <input type = "submit" value = " Submit "/><br /> 
      </form> 

      <div style = "font-size:11px; color:#cc0000; margin-top:10px"><?php echo $error; ?></div> 

     </div> 

    </div> 

    </div> 

</body> 
</html> 

セッションコード

<?php 
include('config.php'); 
session_start(); 

$user_check = $_SESSION['myusername']; 

$ses_sql = mysqli_query($db,"select username from admin where username = '$user_check' "); 

$row = mysqli_fetch_array($ses_sql,MYSQLI_ASSOC); 

$login_session = $row['username']; 

if(!isset($_SESSION['username'])){ 
    header("location:welcome.php"); 
} 
?> 

リダイレクトされたページ

<?php 
include('session.php'); 
?> 
<html> 

<head> 
    <title>Welcome </title> 
</head> 

<body> 
    <h1>Welcome <?php echo $login_session; ?></h1> 
    <h2><a href = "logout.php">Sign Out</a></h2> 
</body> 

</html> 
<?php 
session_start(); 

if(session_destroy()) { 
    header("Location: login.php"); 
} 
strong text ?> 
+0

** $ _ SESSION ['myusername']; $ row ['username'] **と** $ _ SESSION ['username'] ** –

+0

あなたのsession.phpが間違っています。エラーの場合は、welcome.phpにリダイレクトされるので、リダイレクトループに陥るでしょう。 –

+0

ログインページにエラーがなければ、echo $ errorはエラーを引き起こします。 Do $ error = ""どこかで –

答えて

0
<?php 
session_start(); 
include("config.php"); 


if($_SERVER["REQUEST_METHOD"] == "POST") { 
// username and password sent from form 

$myusername = mysqli_real_escape_string($db,$_POST['username']); 
$mypassword = mysqli_real_escape_string($db,$_POST['password']); 

$sql = "SELECT id FROM admin WHERE username = '$myusername' and passcode = '$mypassword'"; 
$result = mysqli_query($db,$sql); 
$row = mysqli_fetch_array($result,MYSQLI_ASSOC); 
$active = $row['active']; 

$count = mysqli_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 

if($count == 1) { 
    $_SESSION['username'] = $myusername; 
    header("Location: welcome.php"); 
}else { 
    $error = "Your Login Name or Password is invalid"; 
    header("Location: login.php?error=".$error); 
} 
} 
else { 

if (isset($_GET['error'])) { 
    echo $_GET['error']; 
} 

?> 
<html> 

<head> 
    <title>Login Page</title> 

    <style type="text/css"> 
     body { 
      font-family: Arial, Helvetica, sans-serif; 
      font-size: 14px; 
     } 

     label { 
      font-weight: bold; 
      width: 100px; 
      font-size: 14px; 
     } 

     .box { 
      border: #666666 solid 1px; 
     } 
    </style> 

</head> 

<body bgcolor="#FFFFFF"> 

<div align="center"> 
    <div style="width:300px; border: solid 1px #333333; " align="left"> 
     <div style="background-color:#333333; color:#FFFFFF; padding:3px;"><b>Login</b></div> 

     <div style="margin:30px"> 

      <form action="" method="post"> 
       <label>UserName :</label><input type="text" name="username" class="box"/><br/><br/> 
       <label>Password :</label><input type="password" name="password" class="box"/><br/><br/> 
       <input type="submit" value=" Submit "/><br/> 
      </form> 

      <div style="font-size:11px; color:#cc0000; margin-top:10px"><?php echo $error; ?></div> 

     </div> 

    </div> 

</div> 

</body> 
</html> 
<?php 
} 
?> 

これは多くの理由がある場合もありますセッションコード

<?php 
session_start(); 
include('config.php'); 


$user_check = $_SESSION['myusername']; 

$ses_sql = mysqli_query($db,"select username from admin where username = '$user_check' "); 

$row = mysqli_fetch_array($ses_sql,MYSQLI_ASSOC); 

$login_session = $row['username']; 

?> 

リダイレクトされたページ

<?php 
include('session.php'); 
?> 
<html> 
<head> 
<title>Welcome </title> 
</head> 

<body> 
<h1>Welcome <?php echo $login_session; ?></h1> 
<h2><a href = "logout.php">Sign Out</a></h2> 
</body> 

</html> 
<?php 
session_start(); 

if(session_destroy()) { 
header("Location: login.php"); 
} 
?> 
+0

あなたのソリューションコーダーを試しましたが、ログイン資格情報を入力しようとするとどこにでもリダイレクトされません。間違ったユーザー名とパスワードを入力するとエラーが表示されますが、リダイレクトされません。 –

+0

header( "location:welcome.php")をlogin.phpと同じものに変更するだけです( "location:welcome.php")。私は私のansを更新しました – coder

+0

うん、それはトリックでした。ありがとう! –

0

ああ...あなたには、いくつかのHTML要素の後にヘッダーを設定することはできません。 PHPでリダイレクトしたいのであれば、基本的に何かがロードされる前にそれを設定する必要があります。あなたはまだいくつかのjavascriptを使ってリダイレクトすることができます。

<script>window.location="index.html";</script> 

これを実行するとインデックスに戻ることができます。

私は助けてくれることを願っています。私は19歳で、あなたと同じトラックで芽を出しました!楽しむ!

+0

ちょっとだけ助けてください... ヘッダーを設定すると、サーバーサイドでApache(PHPスクリプト実行中)が処理されます。あなたのクライアントがリクエストを待っているだけなので、リダイレクトされているかどうかわからないのですが... しかし、javascriptを使用すると、スクリプトを開く前にそのページを視覚化できるようになりますあなたはこの1ページに何を印刷するか注意してください。 –

0
Try it, I think this is useful for you, 

header('Location: http://www.example.com/welcome.php'); 

session_start()の位置を変更しようとしました。設定の一番上。

+0

彼はどのように彼が彼の問題を解決するのを助けていますか? – coder

+0

彼はユーザー名のセッションを作成し、ログイン後にwelcome.phpページを表示したい場合は、header()関数を使用します。だから私は彼にそれを勧めました、彼はヘッダー機能の全体のパスを追加していません。彼が完全な機能を追加した場合、それは動作している可能性があります。 –

0

です。最も可能性が高いのは、ヘッダーの発行後にスクリプトが終了しないことです。 header()は単にページにヘッダーを追加するだけで、それ以上の実行は停止しないことに注意してください。したがって、ログインページはあなたのログインを認識し、リダイレクトヘッダーを発行しますが、実行が続行され、ログインフォームが再度レンダリングされ、リダイレクトが停止します。

提案:header()コールの後にexit;と入力してください。

ヘッダーが消える前に何らかの出力がある可能性があります。私。誤ってテキストを作成してheader(...)を呼び出すと、ヘッダーは何も行いません。この問題はPHPによって検出される可能性があります。そのような場合には警告が表示されます。エラーと警告が有効になっていることを確認してください。error_reportingE_ALLに、display_errorsがiniファイルのonになっていることを確認してください。これは、開発中に多くの問題を見るのに役立ちます。

この場合、何が問題になるのかを理解するために、いくつかのデバッグツールが役立ちます。すぐに使いやすい順に:

  1. ブラウザの開発ツール。ブラウザのページを右クリックして、Inspectを選択します。ブラウザ開発ツールを開きます。特に、[ネットワーク要求]タブに興味があります。それに切り替えて、ログインフォームを再送信してください。要求がタブに表示されます。それを調べる:そこにヘッダーがありましたか?メソッドPOSTは意図した通りでしたか?レスポンスボディは何ですか?

  2. プロキシのデバッグ。例えば。 Windowsの場合はFiddler、OSXの場合はCharlesです。 これは、ブラウザによって行われたすべてのリクエストを表示するのに役立つソフトウェアです。ワークフローに複数のリダイレクトがある場合、ブラウザの[ネットワーク]タブには最後のリクエスト以外は表示されません。プロキシはすべてのURLを保存し、ケースがどのように進化したかを調べることができます。

  3. PHPデバッガ - Xdebugをインストールしてアクティブにして、IDEを使用します(使用しますか?)。 PHPコードをステップバイステップで実行し、アルゴリズムが正しく機能するかどうかを確認するのに役立ちます。

関連する問題