【问题标题】:Passing variables between two .php pages在两个 .php 页面之间传递变量
【发布时间】:2013-12-14 15:09:23
【问题描述】:

在吸引人的页面上

$storeID= $_REQUEST['store'];
$custID= $_REQUEST['cust'];

我在不同页面上有指向上述页面的链接,如下所示

在第 1 页。

echo "<a class='btn btn-info' rel='nofollow' target='_blank' href='/go-to-store.php?store=" . $KID . "&cust=" . $user_ID . "'>" . "shop" . "</a>";

在第 2 页。

echo "<form action='/go-to-store.php' target='_blank' method='post'>" 
. "<input type='hidden' name='store' value='$postid'>" 
. "<input type='hidden' name='cust' value='$user_ID'>" 
. "<button class='btn btn-mini btn-info' type='submit' style='margin-top:5px;'>" 
. "shop" . "</button>";

这两种方式都是有效的可接受的做事方式吗?我没有理由不向用户展示这些价值观,任何人都没有改变这些价值观的危害或动机。

我正在跟踪我的网站上的问题,并且基本上缩小了任何可能的情况,即有可能导致我遇到的问题的可能性很小。

【问题讨论】:

  • 使用$_SESSION变量
  • 使用 session 或 cookie 来存储变量,不要在 cookie 中存储纯密码。
  • 我的网站是建立在 wordpress 之上的,但是包含信息的文件在外面。如果我在wordpress 中移动cathing 文件,我可以轻松获得custID 而无需发送它...我将这样更改它。抱歉,如果我的问题不够具体。

标签: php parameter-passing


【解决方案1】:

$storeID 看起来包含的数据仅与网站上的一组特定页面相关,但人们可能希望链接到这些页面。它应该构成 URL 的一部分,以便人们可以链接到它。

$custID 看起来包含特定于用户的数据,但应该在整个站点中持续存在(除非用户注销,否则不会更改)。它应该存储在 cookie 中(或存储在服务器上的会话中,该会话与带有 cookie 的浏览器相关联),而不是在每个请求中传递。

【讨论】:

    【解决方案2】:

    使用 cookie 或 session 来存储数据并在您想要的任何页面上使用它们。

    <?php
         session_start();
         $_SESSION['storeID'] = $_REQUEST['store'];
         $_SESSION['custID'] = $_REQUEST['cust'];
    
         // now access session variables from other pages
        echo "Store ID : ". $_SESSION['storeID']."<br />";
        echo "Cust ID". $_SESSION['custID'] 
    
         // to delete variable
         unset($_SESSION['storeID']);
         unset($_SESSION['custID'])
    ?>
    

    使用 cookie

    <?php
    
        // store varible in cookie for one day 
        setcookie("soreID", $_REQUEST['store'], 60*60*24);
        setcookie("custID", $_REQUEST['cust'], 60*60*24);
    
        // retrive data
        echo "Store ID : ". $_COOKIE['storeID']."<br />";
        echo "Cust ID". $_COOKIE['custID']   
    
        // delete cookie 
        setcookie("soreID", $_COOKIE['store'], time()-3600);
        setcookie("custID", $_COOKIE['cust'], time()-3600);
    ?>
    

    【讨论】:

      【解决方案3】:

      选项 1:通过base64 对变量进行编码,这样您的用户就无法在没有解码的情况下看到它们。将变量放入url。

      $storeID= urlencode(base64_encode($_REQUEST['store']));
      $custID= urlencode(base64_encode($_REQUEST['cust']));
      
      // then use following to get data from url:
      
      $storeID= base64_decode(urldecode($_GET['sid']));
      $custID= base64_decode(urldecode($_GET['cid']));
      

      选项 2:使用会话。会话允许您将数据保存到服务器,因此它们不会显示给用户。

      session_start();
      $_SESSION['storeID'] = $_REQUEST['store'];
      $_SESSION['custID'] = $_REQUEST['cust'];
      
      // then use following to get data from sessions:
      
      session_start();
      $storeID= $_SESSION['storeID'];
      $custID= $_SESSION['custID'];
      

      选项 3:使用文本文件。记住;我不推荐此选项,因为它会稍微加载服务器并且不会击败其他选项。 (你也可以使用 dbs)

      编辑:

      session_start();
      if(isset($_POST['store']) && isset($_POST['cust'])){
         $_SESSION['storeID'] = $_POST['store'];
         $_SESSION['custID'] = $_POST['cust'];
      }
      else {
         echo 'please fill are fields.'
      }
      

      【讨论】:

      • 与我现在拥有的相比,这两个肯定是更清洁的选择。但是,我移动变量的两种方式中的任何一种实际上都存在根本性错误吗?我已经测试、测试和测试,并且总是在我的接收页面上捕获正确的值。然而不知何故,这些值中的一个不时注册为空?这可能是什么原因?
      • 问题可能根本不是我的问题,但我只是想确保它不是。
      • 我打赌你没有检查用户是否没有设置这些字段。您还应该指定您正在使用、获取或发布的请求。查看我编辑的代码并尝试一下。
      • 这些值不是由用户设置的,它们总是被设置的。值 storeid 从我的 mysql 数据库中获取它的值,并且需要知道向哪个商店发送客户。用户 ID 由 wordpress 处理,所有未登录用户为 0,登录用户为正唯一整数,用户 ID 用于跟踪去该商店的人。我将测试帖子而不是请求,但只是不明白使用请求会如何搞砸事情。无论如何提示......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多