1

こんにちはユーザーが間違ったユーザー名またはパスワードを作成すると、ログインページにリダイレクトされますが、スクリプトヘッダー機能が機能していません。

これはloging.phpページです

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
                    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script type="text/javascript" src="http://jzaefferer.github.com/jquery-validation/jquery.validate.js"></script>
<style type="text/css">
* { font-family: Verdana; font-size: 96%; }
label { width: 10em; float: left; }
label.error { float: none; color: red; padding-left: .5em; vertical-align: top; }
p { clear: both; }
.submit { margin-left: 12em; }
em { font-weight: bold; padding-right: 1em; vertical-align: top; }
</style>
  <script>
  $(document).ready(function(){
    $("#commentForm").validate();
  });
  </script>

</head>
<body>


 <form class="cmxform" enctype="multipart/form-data" id="commentForm" method="post" action="buy.php">
 <fieldset>
   <legend>A simple comment form with submit validation and default messages</legend>
   <p>
     <label for="cname">Name</label>
     <em>*</em><input id="name" name="name" size="25" class="required" minlength="2" />
   </p>
   <p>
     <label for="cemail">Password</label>
     <em>*</em><input id="password" type="password" name="password" size="25"  class="required" />
   </p>
   <p>&nbsp;</p>
  <p>&nbsp;</p>
   <p>
     <input class="submit" type="submit" value="login"/>
   </p>
 </fieldset>
 </form>
</body>
</html>

これは、ログを記録した後のbuy.phpページです。このページに移動します

<?php
session_start();

$Name = $_POST['name'];
$Pass = $_POST['password'];

//STEP 1 Connect To Database
$host= "localhost";
$dbname= "register";
$user = "root";
$pass = "";

try {  
  # MySQL with PDO_MYSQL  
  $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);  
  //$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); 
  $STH = $DBH->query("SELECT username, password from tbl_users");
  $STH->execute();

  //STEP 2 Declare Variables

$Query = $DBH->query("SELECT * FROM tbl_users WHERE username='$Name' AND password='$Pass'");
$Query->execute();
$Query->setFetchMode(PDO::FETCH_NUM); 

$NumRows = $Query->fetch();
$_SESSION['name'] = $Name;
$_SESSION['password'] = $Pass;

//STEP 3 Check to See If User Entered All Of The Information

if(empty($_SESSION['name']) || empty($_SESSION['password']))
{
die("could not connect");
}

if($Name && $Pass == "")
{
die("Please enter  a name and password!");
}

if($Name == "")
{
die("Please enter your name!" . "</br>");
}

if($Pass == "")
{
die("Please enter a password!");
echo "</br>";
}

//STEP 4 Check Username And Password With The MySQL Database

if($NumRows != 0)
{

$STH->setFetchMode(PDO::FETCH_ASSOC); 
while($Row = $STH->fetch())
{
$dname = $Row['username'];
$dpass = $Row['password'];

}

}
else
{
die("Incorrect Username or Password!");

 if( $_SESSION['name']!= $dname || $_SESSION['password'] != $dpass) 
 {
    header("location: login.php");
  } 
  else 
  {
     header("location: http://www.google.com");
  }

}

if($Name == $dname && $Pass == $dpass)
{
// If The User Makes It Here Then That Means He Logged In Successfully
echo "Hello " . $Name . "!";
}
}  

catch(PDOException $e) {  
    echo "I'm sorry, Dave. I'm afraid I can't do that.";  
    $e->getMessage(); 
} 
?>
<html>
<body>
<p>Here is where you can put information for the user to see when he logs on. (Anything inside these html tags!)</p>
</body>
</html>
4

5 に答える 5

1

使用する場合:

die("Incorrect Username or Password!");

テキストを出力します:Incorrect Username or Password!ヘッダーを使用する場合は、呼び出す前に何も出力してはなりません。

ドキュメントから:

実際の出力が送信される前に、通常の HTML タグ、ファイル内の空白行、または PHP から header() を呼び出す必要があることに注意してください。include 関数、require 関数、または別のファイル アクセス関数を含むコードを読み取り、header() が呼び出される前に出力されるスペースまたは空の行があることは、非常に一般的なエラーです。単一の PHP/HTML ファイルを使用する場合にも、同じ問題が存在します。

編集

実際dieには と同等でexitあるため、その行にヒットすると、残りのスクリプトは実行されません。したがって、header() の呼び出しは行われません。

于 2013-02-20T13:15:04.753 に答える
0

die("ユーザー名またはパスワードが正しくありません!"); 次のテキストが出力されます: ユーザー名またはパスワードが正しくありません! また、ヘッダーを使用する場合は、呼び出す前に何も出力してはなりません。ヘッダーを使用するときは常にヘッダー関数の前に使用しないことを忘れないでください

于 2013-02-20T13:22:54.177 に答える
0

トピック外ですが、この行を変更する必要があります。これらの変数を投稿から直接取得しているようで、これは安全ではありません。

// wrong
$Query = $DBH->query("SELECT * FROM tbl_users 
    WHERE username='$Name' AND password='$Pass'");
$Query->execute();

// true
$Query = $DBH->query("SELECT * FROM tbl_users 
    WHERE username = :username AND password = :password");
$Query->execute(array(':username' => $Name, ':password' => $Pass));

詳細については、http: //php.net/manual/en/pdostatement.execute.phpを参照してください。

于 2013-02-20T13:25:11.683 に答える
0

タグの前にスペースがないか確認し<?php、ある場合は削除します

変化 :

if($Name && $Pass == "")

に :

if($Name=="" && $Pass == "")

于 2013-02-20T13:17:30.560 に答える
0

ヘッダーを使用する前に何も出力することはできません。ヘッダーは既に送信されているというエラーが発生します。ユーザーが間違ったユーザー名またはパスワードを入力すると、URL に ?error=true のようなフラグを付けてリダイレクトし、ログインが無効であるというエラー メッセージを表示する JavaScript コードをトリガーします。

于 2013-02-20T13:17:48.080 に答える