【问题标题】:Passing a password to next php page将密码传递到下一个 php 页面
【发布时间】:2012-11-27 11:11:30
【问题描述】:

想知道我是否能得到一些快速的帮助! 创建一个简单的网站,出于管理员目的,我需要能够访问一个页面,我可以在其中上传和删除 phpmyadmin 数据库中的内容。 我遇到的问题是能够将密码从输入的html页面发送到检查它的下一页。所以理想情况下,我将从“admin.html”开始,其中有一个密码文本框。然后下一页是“adminmenu.php”。只有当密码与数据库的用户匹配时,才能访问 adminmenu.php。 (请记住,密码不像其他许多类似的问题那样存储在表格中)

这是我在 admin.html(密码框)上的表单

<form name="input" action="adminmenu.php" onsubmit="return validateForm()" method="post">
Password: <input type="text" name="password">
<input type="submit" value="Submit">
</form>

所以密码不是作为下一页的“密码”发送的吗?

在那之后我真的不知道如何检查它。这就像我不确定的猜测:

$handle = mysql_connect("localhost", "uMoviesRoot","password") or die ('Error:' .mysql_error())
mysql_select_db("movies");

感谢大家的帮助!

【问题讨论】:

  • 注意! PHP 的未来版本将弃用和删除mysql_ 系列函数。看起来你还在学习 PHP,所以现在是 switch to PDOmysqli伟大时间。

标签: php database passwords phpmyadmin


【解决方案1】:

编辑:

好的,我想我明白你想要什么了。你有 admin.html:

<!doctype html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Blah</title>
    </head>

    <body>
        <form action="adminhandle.php" method="POST">
            Password: <input type="password" name="pass" />
            <input type="submit" name="submit" value="Log on" />
        </form>
    </body>

</html>

adminhandle.php:

<?php
session_start();

$handle = mysql_connect("localhost", "uMoviesRoot", "$_POST['pass']") or die ('Error:' .mysql_error())
mysql_select_db("movies");

if ($handle) $_SESSION['logged_in'] = true;
?>

adminmenu.php:

<?php
session_start();

if ($_SESSION['logged_in']) {
    // show menu or whatever
} else {
    echo "Password failed!";
}
?> 

退后一步,获取一个很好的学习资源。我推荐Larry Ullman's book

【讨论】:

  • 虽然您可以将其缩短为表单和最后一页,但我觉得这样拆分会帮助您了解发生了什么。
  • 所以我可以创建另一个单独的 php 文件 adminhandle.php 来确定密码是否正确?但是从那里它怎么知道去adminmenu.php?再次感谢您的帮助,因为我很新
  • 非虚拟机。我知道了。我将保留它作为 2 个文件跳过中间一个,但是关于我如何仅在会话登录时显示菜单的任何提示?就像把我的代码放在 if haha​​ 下一样简单吗?
【解决方案2】:

密码发送为

$_POST['password']

不是“密码”或“$密码”。

所以如果你想用它来连接mysql_connect,你需要这样做

mysql_connect("localhost", "uMoviesRoot", $_POST['password'])

但是您需要为您访问的每个新页面“保留”密码。您可以将其存储在会话中,但如果它位于共享托管服务器上,则不是一个好主意。

【讨论】:

  • 感谢您的回复,您是说在我的 .html 页面上我还需要将密码作为 $_POST["password"] 发送吗?
  • 不,他是说在 adminmenu.php 中使用它
  • wait nvm 它是作为 post durr 发送的,但是当我将其更改为 $_POST["password"] 时,它仍然可以让我输入任何我想要的密码!
  • 如果您要求对 $_POST['password'] 进行验证,那么您确实需要进一步阅读 PHP 和常用的管理员验证方法。在任何情况下,如果您输入“whatever you want”,mysql_connect 应该拒绝无效密码 - 除非您在不验证密码的情况下接受来自 localhost 的所有连接?
  • 你这是什么意思?您期望会发生什么以及实际上会发生什么?
【解决方案3】:

有一些方法可以在一些 PHP 脚本之间传输数据。

最简单的方法是使用 Sessions。

一开始你必须做一个

session_start();

然后您可以使用 $_SESSION 数组,这是用户特定的。

所以至少你有:

<?php session_start(); $_SESSION["password"] = $_POST["password"]; mysql_connect(..., $_SESSION["password"]);...?>

但要注意安全! 如果您将密码或任何其他传输到 MySQL 的字符串直接访问并且不解析它以进行 SQL 注入,则会存在许多安全风险!

【讨论】:

  • 这是一个经典的表单处理场景。虽然会话可以工作,但在这种情况下并不合适。
  • 标题建议将信息传递给下一个 php 脚本......好吧,他的意思是从 html 传递到 php。至少他会保存下一页的密码(我不认为它只是一页)所以使用会话将是最好的选择)
  • 抱歉,您走对了。如果您编辑此答案,我可以投赞成票
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 1970-01-01
相关资源
最近更新 更多