0

PHP ファイル:

    <?

print_r($_REQUEST);
$thispage = 'login';
require('db.php');
if($_POST['admin_username'] && $_POST['admin_password']) {
    $query="SELECT * FROM login where name='".mysql_real_escape_string($_POST['admin_username'])."' AND pass = '".mysql_real_escape_string($_POST['admin_password'])."' AND level='admin'";
    echo $query;
    $result = mysql_query($query);
    while ($row = mysql_fetch_array($result)){

    if($row['name'] && $row['pass']) {
        $_SESSION['isAdmin'] = 1;
        $_SESSION['loggedin'] = 1;
        setcookie('isAdmin' , 1, time()+3600, '/', $settings['cookiedomain']);
        setcookie('loggedin' , 1, time()+3600, '/', $settings['cookiedomain']);
        header("Location: index.php");
        exit();}
    else {
        header("Location: login.php?msg=Invalid%20Login");
        exit();
    }
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Admin Area</title>
<link href="style.css" rel='stylesheet' />
<link rel="stylesheet" href="bubble-tooltip.css" media="screen">
<style>
.style1 {color: #171717}
</style>
</head>

<body>
<div id='content' style='width: 500px; border: 1px solid #171717; margin-top: 100px; background-color: #404040;'>
<h1 align="center"><img src="header.jpg" width="333" height="91" /></h1>
<p align="center">Welcome to the Admin Area</p>
<? if($_GET['msg']) { ?>
<center>
<p style='color: #FF9900; font-weight: bold;'><? echo $_GET['msg']; ?></p>
</center>
<? } ?>
<form id="form1" name="form1" method="post" enctype="multipart/form-data" action="">
  <table width="311" border="0" align="center">
    <tr>
      <td width="68"><strong>Username</strong></td>
      <td width="231"><input type="text" name="admin_username" style='background-color: #ffffff; border: 1px solid #1F1F1F; font-size: 11px; color: #1F1F1F; width: 200px;' /></td>
    </tr>
    <tr>
      <td><strong>Password</strong></td>
      <td><input type="password" name="admin_password" style='background-color: #ffffff; border: 1px solid #1F1F1F; font-size: 11px; color: #1F1F1F; width: 200px;'  /></td>
    </tr>
    <tr>
      <td colspan="2"><div align="center">
        <input type="submit" name="button" value="Login" />
      </div></td>
      </tr>
  </table>
</form>
<p align="center">&nbsp;</p>
</div>
<div id='footer'></div>
</body>
</html>

一番上にありprint_r($_REQUEST);、返されるのはArray()だけです。を使用しても同じ結果になりますprint_r($_POST);

Firebug は、間違いなく POST vars が確実に送信されていることを示しており、キー名は完全に一致しています。

これは、POST セクションの下にある Firebug からのデータをコピーして貼り付けたものです。

Partsmultipart/form-data
admin_username  jeff
admin_password  51622384
button  Login

コマンドごとに post_max_size を 8M に設定しphpinfo();ます。

何が欠けている可能性がありますか?これは、以前のサーバーで機能していました。移行後、この問題のおかげで誰もログインできません。

4

4 に答える 4

1

フォームのアクションはaction="<?=$_SERVER['PHP_SELF']; ?>"、同じページに投稿する場合です。

于 2012-08-08T20:58:55.250 に答える
1

あなたのフォームは問題ないように見えますが、いくつかの提案があります。

  1. enctype="multipart/form-data" が必要な理由がわかりません。これは、フォームでファイルをアップロードする場合に使用されます。

  2. method=POST を使用しているので、$_REQUEST 配列の代わりに $_POST 配列を調べてみませんか?

  3. エクスプロイトの可能性を回避するために、HTMLENTITIES を $_SERVER['PHP_SELF'] に適用することを検討することをお勧めします。(アクション= )

  4. <?新しいサーバーは省略形を (を使用するのではなく) 認識します <?php ?>か?

わかりましたので、あなたのフォームに問題はありませんが、私が提案するいくつかの変更を検討することをお勧めします.

于 2012-08-08T20:59:05.093 に答える
0

私はあなたのコードが正常に動作することをテストしました;-

<?php
if(isset($_POST['button']) && !empty($_POST['button']))
{
    echo "<pre>";
    print_r($_REQUEST);
    die;

}
?>
<form id="form1" name="form1" method="post" enctype="multipart/form-data" action="<? echo $_SERVER['PHP_SELF']; ?>">
  <table width="311" border="0" align="center">
    <tr>
      <td width="68"><strong>Username</strong></td>
      <td width="231"><input type="text" name="admin_username" style='background-color: #ffffff; border: 1px solid #1F1F1F; font-size: 11px; color: #1F1F1F; width: 200px;' /></td>
    </tr>
    <tr>
      <td><strong>Password</strong></td>
      <td><input type="password" name="admin_password" style='background-color: #ffffff; border: 1px solid #1F1F1F; font-size: 11px; color: #1F1F1F; width: 200px;'  /></td>
    </tr>
    <tr>
      <td colspan="2"><div align="center">
        <input type="submit" name="button" value="Login" />
      </div></td>
      </tr>
  </table>
</form>

出力:-

Array
(
    [admin_username] => admin
    [admin_password] => Pass@word1
    [button] => Login
)
于 2012-08-08T20:37:34.187 に答える
-1

リダイレクト ループの問題であることが判明しました。

Firebug は少し誤解を招くものでしたが、調べてみると、次の 2 つの行が連続していることに気付きました。

POST login.php GET index.php

実行が成功した後、index.php へのループを試みたことを示します。print_r() コマンドが結果を吐き出した後、なぜ header() コマンドを無視しなかったのか、よくわかりません。通常、ヘッダーは出力前にのみ渡すことができます。

とにかく、index.php には var がチェックされていて、false の場合は login.php に送り返されます。

$HTTP_COOKIE_VARS['isAdmin']

これは前の開発者によって書かれたもので、新しいバージョンの PHP では動作しません。

したがって、私はそれを

$_COOKIE['isAdmin']

お役に立てれば。

PHP のバージョンの変更は、特に継承したコードが標準に達していない場合は、厄介な問題になる可能性があります。

于 2012-08-08T21:27:24.960 に答える