-1

对于一些 Web 开发实践,我决定创建一个类似于 Dropbox 的站点,用户可以在其中使用用户名和密码登录,并且假设组合正确,可以访问文件上传器界面以及检索文件的方法。我有一些有用的东西,但我遇到了一个问题。一旦用户提交了他们的用户名和密码,页面就会使用新的 php 代码重新加载(这很好),但是,URL 会稍微更改为显示用户名和密码的位置。有人能告诉我如何防止这种情况发生吗?

这是 index.php 文件:

<?php
  function checkCredentials()
  {
    if($_GET && $_GET["username"]=="kwaugh" && $_GET["password"]=="password")
  {
?>

    <html>
        <head>
                <title>File Storage</title>
                    <style>
                        body{font-size:.85em ;font-family:Arial;}
                    </style>
        </head>

        <body>
            <center>
                <br>Please select the file that you would like to upload:<br><br>
                    <form method="post" enctype="multipart/form-data">
                        <input type="file" name="filename"/>
                        <input type="submit" value="Upload" />
                    </form>
            </center>
        </body>
    </html>
    <?php
        if ($_FILES)
        {
            $name = $_FILES['filename']['name'];
            move_uploaded_file($_FILES['filename']['tmp_name'], $name);
            if(file_exists($name))
            {
                ?>
                <html>
                    <body>
                        <div style="color:red; font-size:2em; font-family:Arial">
                            <center>The file has been successfully uploaded <br />Click <a href="getFiles.php">here</a> to go to your uploaded files</center>
                        </div>
                    </body>
                </html>

                <?php
            }
            else
            {
                    ?>
                    <html>
                        <body>
                            <div style="color:red; font-size:2em; font-family:Arial">
                                <center>Well crap, something went wrong.  The file could not be uploaded :'( </center>
                            </div>
                        </body>
                    </html>

                    <?php
            }
    }
    die();
}
elseif($_GET && $_GET["username"]!=="kwaugh" || $_GET && $_GET["password"]!=="password")
{
    ?>
    <script>
        alert("You have entered an incorrect username/password combination");
    </script>

    <?php
}
}
checkCredentials();
?>
<html>
<head>
    <title>File Storage</title>
</head>

<body> <br /><br />
    <center>
        <img src="elephant.jpg">
        <form name="credentials">
            Please enter your username and password to upload files: <br     />
            Username: <input type="text" name="username"><br />
            Password: <input type="password" name="password"><br />
            <input type="submit" value="Submit" >
        </form>
        <br />Or click <a href="getFiles.php">here</a> to access stored files.
    </center>
</body>
</html>
4

4 回答 4

2

用于POST您的credentials表格。默认情况下,methodisGET会将参数附加到URL. 显然,这意味着检查数组中的变量$_POST而不是$_GET数组。

如果我可以提出另一个建议,我会将应用程序拆分为多个文件。您不应该在同一个脚本中拥有登录和上传界面,否则您将在扩展应用程序时遇到重大问题。

  • 当您添加页面时,几乎不可能知道脚本的哪个部分应该运行以及使用哪些参数并输出什么html
  • 您需要将“状态”传递给页面,以便您在内部知道用户正在尝试做什么 - 将逻辑分布在多个php文件中会使操作更容易。
  • 该文件将增长很多,使您更难理解实际执行的内容,使您更难调试
  • 如果您曾经开始与其他开发人员合作,那么在单独php的文件中分解功能以最大程度地减少编辑文件时的冲突会更加“开发人员友好”

许多 Web 应用程序将被拆分为多个页面(通常在控制器中实现),您将拥有以下内容:

  • Welcome Page(登陆页面,允许登录,允许登录,显示有关您的产品的信息)
  • Authentication Page(验证登录然后重定向到个人资料页面,显示登录表单,验证它,创建新用户等...)
  • Profile Page(对于已登录的用户,显示他的信息)

为此,您可能应该添加一个File Management页面,显示用户拥有的所有文件,允许他添加/删除页面等...

于 2012-12-09T03:53:37.170 回答
1

采用:

<form name="credentials" method="post">

if($_POST && $_POST["username"]=="kwaugh" && $_POST["password"]=="password")
于 2012-12-09T03:53:41.043 回答
1

POST在您的表单和$_POSTPHP 代码中使用。

<form name="credentials" method="post" action="whatever-page.php">

if ($_POST["username"]=="kwaugh" && $_POST["password"]=="password")

于 2012-12-09T03:54:21.307 回答
1

将登录更改<form>为具有 POST 方法

<form method="POST" name="credentials">

此外,请考虑将您的网站拆分为多个 .php 文件 - 您不能将所有内容都放在一个文件中,因为除了最简单的网站之外,它对于所有网站都变得难以管理。

于 2012-12-09T03:55:41.487 回答