【问题标题】:PHP Pass variable to next pagePHP 将变量传递到下一页
【发布时间】:2010-10-26 16:34:44
【问题描述】:

看起来很简单,但我找不到好方法。

说在第一页我创建了一个变量

$myVariable = "Some text";

该页面的表单操作是“Page2.php”。那么在 Page2.php 中,我如何才能访问该变量?我知道我可以通过会话来做到这一点,但我认为这对于一个简单的字符串来说太多了,我只需要传递一个简单的字符串(文件名)。

我怎样才能做到这一点?

谢谢!

【问题讨论】:

标签: php variables session


【解决方案1】:

例如,您可以通过在 url 中包含变量来调用您想要的页面:

header("Location: ../signup.php?newpwd=passwordupdated");

在您的 signup.php 页面上,您将拥有

if (isset($_GET['newpwd']) && $_GET['newpwd'] == "passwordupdated") {
        //code here
    }

【讨论】:

    【解决方案2】:

    It works. 发送数据抛出 URL,不带表单。

    $upit = "SELECT * FROM usluga";
    
                $data = $mysql->query($upit);
    
                while ($row = mysqli_fetch_object($data)) 
                {
                    echo "<a href='"."index.php?tretmanId=$row->tretman_id"."'>$row->naziv</a>";
                    echo "<br><br>";
                }
    

    你可以用“$_GET['name from URL']”在目标页面上获取这个值,像这样

    $TrermanIdFromUrl = $_GET['tretmanId'];
    

    【讨论】:

      【解决方案3】:

      HTML / HTTP 是无状态的,换句话说,您在前一页所做/所见,与当前页面完全无关。 除了如果您使用会话、cookie 或 GET / POST 变量之类的东西。会话和 cookie 非常易于使用,会话比 cookie 安全得多。更安全,但并非完全安全。

      会话:

      //On page 1
      $_SESSION['varname'] = $var_value;
      
      //On page 2
      $var_value = $_SESSION['varname'];
      

      请记住在尝试访问 $_SESSION 数组之前以及在任何输出发送到浏览器之前在这两个页面上运行 session_start(); 语句。

      Cookie:

      //One page 1
      $_COOKIE['varname'] = $var_value;
      
      //On page 2
      $var_value = $_COOKIE['varname'];
      

      会话和 cookie 之间的最大区别在于,如果您使用会话,变量的值将存储在服务器上,如果您使用 cookie,则存储在客户端。我想不出使用 cookie 代替会话的任何充分理由,除非您希望数据在会话之间持久存在,但即便如此,最好将其存储在数据库中,并根据用户名或 id 检索它。

      GET 和 POST

      您可以将链接中的变量添加到下一页:

      <a href="page2.php?varname=<?php echo $var_value ?>">Page2</a>
      

      这将创建一个 GET 变量。

      另一种方法是在提交到第二页的表单中包含一个隐藏字段:

      <form method="get" action="page2.php">
          <input type="hidden" name="varname" value="var_value">
          <input type="submit">
      </form>
      

      然后在第二页:

      //Using GET
      $var_value = $_GET['varname'];
      
      //Using POST
      $var_value = $_POST['varname'];
      
      //Using GET, POST or COOKIE.
      $var_value = $_REQUEST['varname'];
      

      如果您想通过邮寄方式进行,只需将表单的方法更改为post。两者同样不安全,尽管 GET 更容易被破解。

      当我第一次开始使用 PHP 编码时,每个新请求都是一个全新的脚本实例,除了会话数据之外。不过一旦习惯了,就很简单了。

      【讨论】:

      • 感谢帮助,问题是我在第一页中有一堆变量,所以我所做的是创建一个包含所有这些变量的数组并使用会话将其发送到下一页。
      • Schweet :) 很高兴我能帮上忙。
      • Nitpick:PHP 中的会话通常也由 cookie 处理。会话 cookie 不是持久性 cookie,通常只保存会话 id。但它仍然是一个 cookie。
      • 详细说明我自己的评论。原因是,正如您所说,HTTP 是无状态的。因此 PHP 仍然需要一种方法来识别会话。这是通过在客户端上存储一个带有会话 ID 的 cookie 来完成的。如果客户端禁用 cookie,PHP 有时会利用 $_GET 变量将会话 ID 附加到页面之间的链接。但这通常被认为是不安全的,因此大多数网络服务器(php.ini)通常都被禁用。
      • @fireeyedboy PHP 会话也可以使用 GET 和 POST 变量传播。归根结底,会话通过只传输一条数据来简化从一页到下一页的变量传递:会话 id。然后使用该会话 ID 检索先前保存的数据。
      【解决方案4】:

      试试这个代码

      使用隐藏字段我们可以将 php 变量传递到另一个页面

      page1.php

      <?php $myVariable = "Some text";?>
      <form method="post" action="page2.php">
       <input type="hidden" name="text" value="<?php echo $myVariable; ?>">
       <button type="submit">Submit</button>
      </form>
      

      将 php 变量传递给隐藏字段值,以便您可以将此变量访问到另一个页面

      page2.php

      <?php
       $text=$_POST['text'];
       echo $text;
      ?>
      

      【讨论】:

        【解决方案5】:
        **page 1**
        <form action="exapmple.php?variable_name=$value" method="POST"> 
            <button>
                <input  type="hidden" name="x">
            </button>
        </form>`
        

        第 2 页

        if(isset($_POST['x'])) {
            $new_value=$_GET['variable_name'];
        }
        

        【讨论】:

          【解决方案6】:

          php传值的三种方式

          • 邮寄
          • 通过获取
          • 通过使会话变量

          这三种方法用于不同的目的。例如,如果我们想在下一页接收我们的值,那么我们可以使用 'post' ($_POST) 方法:-

          $a=$_POST['field-name'];
          

          如果我们需要不止一页上的变量值,我们可以使用会话变量:-

          $a=$_SESSION['field-name];
          

          在使用这个语法创建 SESSION 变量之前,我们首先必须在我们的 php 页面的最开始添加这个标签

          session_start(); 
          

          GET 方法通常用于在同一页面上打印数据,该页面用于获取用户输入。它的语法如下:

          $a=$_GET['field-name'];
          

          POST 方法通常比 GET 更安全,因为当我们使用 Get 方法时,它可以在 URL 栏中显示数据。如果数据是密码等更敏感的数据,那么它可能是 inggeris。

          【讨论】:

            【解决方案7】:

            感谢以上回答。以下是我的做法,希望对关注的人有所帮助。我希望将注册号从一个页面传递到另一个页面,因此 regNameregValue

            创建您的第一个页面,将其命名为 set_reg.php

            <?php
            
            session_start();
            
            $_SESSION['regName'] = $regValue;
            
            ?>
            
            <form method="get" action="get_reg.php">
                <input type="text" name="regName" value="">
                <input type="submit">
            </form>
            

            创建您的第二个页面,将其命名为 get_reg.php

            <?php
            
            session_start();
            
            $regValue = $_GET['regName'];
            
            echo "Your registration is: ".$regValue.".";
            
            ?>
            
            <p><a href="set_reg.php">Back to set_reg.php</a>
            

            虽然不如上面的答案全面,但出于我的目的,这以简单的方式说明了各种元素之间的关系。

            【讨论】:

            • 您的示例也可以在没有会话的情况下工作,实际上并没有通过会话机制(在 get_reg.php 中)获取数据。您正在通过 Jrgns 解释的带有 get 方法的表单发送 regName。因此可以通过 $_GET 数组在 get_reg.php 页面访问该变量。
            【解决方案8】:

            在请求中传递数据

            您可以将其作为隐藏字段嵌入到表单中,也可以将其添加到表单操作 URL

             echo '<input type="hidden" name="myVariable" value="'.
                 htmlentities($myVariable).'">';
            

            echo '<form method="POST" action="Page2.php?myVariable='.
                urlencode($myVariable).'">";
            

            请注意,这也说明了在传递数据时使用htmlentitiesurlencode

            在会话中传递数据

            如果数据不需要传递到客户端,那么会话可能更合适。只需在每一页的开头调用session_start(),即可获取数据并将数据设置到$_SESSION 数组中。

            安全

            由于您声明您的值实际上是一个文件名,因此您需要了解安全后果。如果文件名是从客户端到达的,则假定用户篡改了该值。检查它的有效性!当用户将路径传递给重要的系统文件或他们控制的文件时会发生什么?您的脚本能否用于“探测”服务器以查找存在或不存在的文件?

            由于您显然刚刚开始,因此值得提醒的是,这适用于以 $_GET、$_POST 或 $_COOKIE 形式到达的任何数据 - 假设您最大的敌人制作了这些数组的内容,并相应地编码!

            【讨论】:

              【解决方案9】:

              会话将是唯一的好方法,您也可以使用 GET/POST,但这可能不安全。

              【讨论】:

              • 请考虑使用示例代码和参考资料链接改进答案
              猜你喜欢
              • 1970-01-01
              • 2013-09-14
              • 1970-01-01
              • 2023-03-30
              • 2013-05-01
              • 2012-05-16
              • 1970-01-01
              • 2012-11-26
              相关资源
              最近更新 更多