【问题标题】:how to turn a php session into a usable variable如何将 php 会话转换为可用变量
【发布时间】:2016-01-22 10:47:51
【问题描述】:

如果我在数据库中有 2 个表,我已经创建了一个站点。第一个页面有 2 个链接,单击时会将链接的名称发送到 php 会话。然后它会将您带到一个页面,该页面旨在根据已保存在 php 会话中的数据查看其中一个数据库。

我想要实现的是让这些链接打开该文件内的表格,单击链接时将打开该表格。我不想为每个表创建一个新的 .php 文件,因为我希望能够在一个文档上简单地添加和访问这些表,但不能超过一个。

这是我的问题。在那个文件上,它让我从我的数据库中访问我想在变量中访问的表(下面的代码)。下面的代码将解释我需要知道的内容。

这是我查看表中数据的代码

 $servername = "localhost";
    $username = "root";
    $password = "root";
    $dbname = "myDB";


    $conn = new mysqli($servername, $username, $password, $dbname);

    if ($conn->connect_error) {
         die("Connection failed: " . $conn->connect_error);
    } 

    $sql = "SELECT id, firstname, lastname FROM tablenamehere  ORDER BY id DESC LIMIT 500";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {

         while($row = $result->fetch_assoc()) {
             echo "<p>". $row["firstname"]. " " . $row["lastname"] . "</p>";
         }
    } else {
         echo "0 results";
    }

    $conn->close();

> 下面的代码是我想要具有我在页面上单击的链接名称的变量,当单击链接时,该变量会重定向到此页面。我从 php 会话中收集的变量我想出现在 tablenamehere 文本中。

 $sql = "SELECT id, firstname, lastname FROM tablenamehere  ORDER BY id DESC LIMIT 500";
    $result = $conn->query($sql);

我目前拥有的创建 php 会话但尚未连接到链接的代码如下。

<html>
<body>
<a href="test1.php?a=newtable">Register Now!</a>
</body>
</html>
<?php

session_start();
?>

<?php
 if(isset($_GET['a'])){
    $_SESSION['link']=$_GET['a'];
 }

 echo "the veriable is " . $_SESSION['link'] . "<br>";

我只想在这个 php 文件中打开多个表。感谢您的帮助,有任何问题请在下方留言。

【问题讨论】:

  • 只是为了正确理解,您要实现的是通过单击链接而不重定向到另一个页面来显示表格?
  • 不,它会重定向到另一个页面,但在那个重定向的页面上,我不想一次显示多个表格,但出现的表格将取决于单击的链接。但我不想为不同的表设置单独的文件。所以我想使用 php 会话来保存单击的链接的名称该链接的名称是表的名称,我希望该表加载到打开表的文件上。 @uruloke。如果您需要提出更多问题,请随时提出。
  • 只需在其他文件中读取您的会话,您可以像在创建会话的页面上一样再次读取会话。 (记得先做 session_start() 。
  • 恕我直言,更准确地描述我们的步骤流程是个好主意,这样我们就可以了解哪个链接/重定向调用哪个脚本。到目前为止,我们还没有在您的代码中看到重定向,只是用户点击的链接。
  • 链接,超链接:用户点击的。重定向:一个标头header("location: url.."),由脚本发送到自动调用新url的浏览器。

标签: javascript php mysql session


【解决方案1】:

如果我们可以假设您将表名作为参数传递(有点危险),那么您可以这样做

<?php

if(isset($_GET['a'])){
    $_SESSION['link']=$_GET['a'];
}


$sql = "SELECT id, firstname, lastname 
        FROM {$_SESSION['link']}
        ORDER BY id 
        DESC LIMIT 500";

但更好的方法可能是将指标传递给您要使用的表。这样,您就不会在以太中传递真实的表名供人们查看

if(isset($_GET['a'])){
    $_SESSION['link']=$_GET['a'];
}


switch ($_SESSION['link']) {
case : 'a'
    $tbl_name = 'table1';
    break;
case : 'b'
    $tbl_name = 'table2';
    break;
default:
    $tbl_name = 'default_table';
}


$sql = "SELECT id, firstname, lastname 
        FROM $tbl_name 
        ORDER BY id 
        DESC LIMIT 500";

【讨论】:

  • 请向 OP 解释为什么您的其他解决方案可能是更好的方法。
  • 谢谢。在我的网站上,我有一个页面,您是否添加了新表格。带有链接的页面是显示这些表格的页面,我想在一个文档中访问这些表格,但一次只能访问一个表格,这由单击的链接决定。如果这有帮助。
  • 那么我认为这应该对您有所帮助。但我不确定你为什么要像使用 $_GET['a'] 那样使用会话。尽管您需要清理该变量,因为有人可以在该参数中传递任何内容
【解决方案2】:

我的猜测:访问数据库的脚本是test1.php。该链接已经添加了调用参数a (=newtable):

<a href="test1.php?a=newtable">Register Now!</a>

脚本test1.php 可以像设置$_SESSION 参数时一样遵循这个$_GET 参数。修改后的代码如下所示:

$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "myDB";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
     die("Connection failed: " . $conn->connect_error);
} 

// Get and sanitize table name
$tablename = $conn->real_escape_string($_GET['a']);

$sql = "SELECT id, firstname, lastname FROM $tablename ORDER BY id DESC LIMIT 500";
$result = $conn->query($sql);

// ....

注意事项:

  • 在我的示例中,我假设所有表都以相同的方式处理。当然,您可以根据 $tablename 的值来区分代码。
  • 您很可能不需要 $_SESSION 变量。
  • 如果出于任何原因必须使用$_SESSION 变量$_GET['a'] 显然应该被$_SESSION['link'] 覆盖,反之亦然。
  • 出于安全原因,不要忘记清理输入参数$_GET['a']

【讨论】:

  • 我是否必须添加
  • 如果我理解正确,您甚至不需要 $_SESSION 因为每次单击链接时都会发送 $_GET 参数“a”。您只需要确保“a”参数具有正确的值。
  • “a”参数具有正确的值是什么意思。
  • 这些在单独的页面上,仍然没有加载。
  • 我的假设是用户(总是)使用适当的参数“a”单击“立即注册!”之类的链接=table_name”设置。 (可能您也是通过 PHP 脚本生成此链接的。)。
猜你喜欢
  • 2018-09-30
  • 2013-11-22
  • 2010-12-12
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 2013-04-25
相关资源
最近更新 更多