如何将php会话转换为可用的变量

时间:2016-01-22 10:47:52

标签: javascript php mysql session

我创建了一个网站,我在数据库上有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();

&GT; 下面的代码是我想要的变量具有我点击链接名称的链接,当点击链接时,该变量被重定向到此页面。我从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文件中打开多个表。感谢您的帮助,如有任何问题,请在下面留言。

2 个答案:

答案 0 :(得分:4)

如果我们可以假设您将表名作为参数传递(有点危险),那么您可以执行此操作

<?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";

答案 1 :(得分:1)

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

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

脚本test1.php可以像设置$_GET参数时那样尊重此$_SESSION参数。您的代码修改将如下所示:

$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']