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 变量正在被提交,并且键名完全匹配。

这是从 Firebug 复制粘贴的数据,在 POST 部分下:

Partsmultipart/form-data
admin_username  jeff
admin_password  51622384
button  Login

phpinfo();post_max_size 根据命令设置为 8M 。

我可能错过了什么?这是在我们以前的服务器上工作的。迁移后,由于此问题,没有人可以登录。

4

4 回答 4

1

action="<?=$_SERVER['PHP_SELF']; ?>"如果您发布到同一页面,表单的操作应该是。

于 2012-08-08T20:58:55.250 回答
1

你的表格看起来不错,但我有几个建议:

  1. 我不明白你为什么需要 enctype="multipart/form-data"。当您希望表单上传文件时使用它。

  2. 既然您使用的是method=POST,为什么不查看$_POST 数组而不是$_REQUEST 数组呢?

  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 有点误导,但经过检查,我意识到连续有两行:

POST login.php 获取 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 回答