【问题标题】:Passing Information Between PHP Pages在 PHP 页面之间传递信息
【发布时间】:2009-03-07 18:51:52
【问题描述】:

如何在 PHP 页面之间传递信息?

例如,我有一个 PHP 脚本来处理来自表单的登录输入,然后有一个单独的 PHP 脚本来处理用户的进一步输入。但是,我希望第二个 PHP 文件接收来自登录表单的输入。本质上,我不希望相同的脚本为登录运行两次。

【问题讨论】:

    标签: php forms


    【解决方案1】:

    您正在寻找 POST 和 GET 变量,这是在 HTML 表单的方法参数中完成的:

    login.php

    <form name="myform" action="secondpage.php" method="post">
        <div>Username: <input type="text" name="username" value="" /></div>
        <div>Password: <input type="password" name="password" value="" /></div>
    </form>
    

    然后在另一个页面中:

    secondpage.php

    $username = isset($_POST['username']) ? $_POST['username'] : '';
    $password = isset($_POST['password']) ? $_POST['password'] : '';
    if ($username != '') {       
        // do your validations here
    }
    

    说明

    当您使用 GET 方法时,参数在 URL 中可见,因此假设我们更改 login.php 中的 method="GET",您最终会得到类似 secondpage.php?username=jsmith&password= 1234.然后您可以使用$_GET['username'] 获取值。

    使用 POST 可以发送更大量的数据(有一个vague limit 到 URL 的大小)并且它在 URL 中不可见。您应该注意,它仍然以明文形式发送,因此并不意味着它是安全的。

    POST 和 GET 是为了不同的目的而制作的。应该使用 GET 来提取您将来可能想要再次提取的信息,这些信息对于这一刻并不特殊。设置 mypage.php?product=123 很有用,因为您可能希望将此 URL 发送给朋友。当您要修改数据状态时应使用 POST:更新产品、创建新用户、删除文章等。这是你希望发生一次的事情。

    结构

    最后,我只是想补充一点,通常您不一定要使用另一个 PHP 脚本来避免某些代码运行或不运行。因此,在不了解您项目的具体细节的情况下,我仍然可以说您可能想要做类似的事情以从相同的代码(例如表单的 HTML)中受益。

    请注意这是简化的代码。

    login.php

    <?php
    
        $error = false;
        $username = isset($_POST['username']) ? $_POST['username'] : '';
        $password = isset($_POST['password']) ? $_POST['password'] : '';
        // if, and only if something was posted... so not on first display
        if ($username != '') {       
            // do your validations here
            if ($properlyLogged) {
                session_start();
                $_SESSION['loggedAt'] = time();
                header('Location: http://localhost/secondpage.php');
                exit();
            } else {
                $error = true;
            }
        }
    
    ?>
    
    <?php if($error): ?>Login failed. Please try again.<?php endif; ?>
    <form name="myform" action="login.php" method="post">
        <div>Username: <input type="text" name="username" value="<?php echo($username) ?>" /></div>
        <div>Password: <input type="password" name="password" value="" /></div>
    </form>
    

    secondpage.php

    <?php
        session_start();
        if (!isset($_SESSION['loggedAt'])) {
            // if not properly logged in, return user to login
            header('Location: http://localhost/login.php');
            exit();
        }
    ?>
    You are now logged in!
    

    希望这就是你要找的东西!

    【讨论】:

      【解决方案2】:

      您可以使用 GET 或 POST 方法在页面之间传递信息。 GET 会将您希望作为查询字符串传递的信息附加到 url,例如:

      loginprocess.php?id=JSmith&pword=HelloThere(不完全推荐用于私人信息)

      另一种方法是通过 POST 发送信息,使其对查询字符串隐藏。

      更多例子可以看这里:http://www.tizag.com/phpT/postget.php

      【讨论】:

        【解决方案3】:

        如果数据不是那么大,您可以使用通过 URL 传递的数据(GET 变量)将用户重定向到第二页。否则,只需在同一页面中运行 seconds 方法,并使用函数对可以包含的数据进行最终解析,如上述用户建议的那样。

        【讨论】:

          【解决方案4】:

          只是对之前所写内容的一个小补充:GET(参数化 URL)的限制是完整的 URL,这意味着 1024 个字符。如果你需要更多,你必须使用 post。

          【讨论】:

          • 好吧,正如我在回答中所写(请参阅链接),它比这更模糊,但确实有一个限制。它仅取决于使用的网络服务器和使用的浏览器。 IE 似乎停止在 2048 个字符处。 Apache 在 4000。而且你不应该使用 GET 来发布,它不是为此而设计的。 :-)
          • 因为今天你不知道你的代理是什么(比以前更多,因为用户也在通过移动浏览..)我会小心超过 1024,据我所知请记住,是 RFC,但我想确切的数字并不那么重要..
          【解决方案5】:

          您可以利用 PHP 会话在 PHP 脚本之间共享数据。下面的基本示例,阅读更多here

          login.php:

          <?php
          
          // initializes the session //
          session_start();
          
          // save user name and password to session //
          $_SESSION["username"] = 'someuser';
          $_SESSION["password"] = 'somepassword';
          $_sESSION["valid"] = true;
          
          ?>
          

          secondpage.php:

          <?php
          
          // start session handler //
          session_start();
          
          // check for a valid session //
          if (!isset($_SESSION["valid"])) header("Location: login.php\n\n");
          
          // continue page code here //
          
          ?>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-02-01
            • 2016-07-24
            • 2013-12-15
            • 2014-04-22
            • 1970-01-01
            • 2019-01-02
            • 1970-01-01
            相关资源
            最近更新 更多