0

假设我在 mySQL 数据库中有很多表。现在在一个名为“A.php”的 PHP 页面中,我使用文本框选择了一个特定的表,并在另一个名为“B.php”的 PHP 页面上查看了查询。假设获取我使用的表的变量是,

$tablename=$_POST['textbox'];

问题是,

$sql="SELECT * FROM $tablename WHERE id= '$id'";

然后,假设我插入了一条记录,现在,我想在另一个名为“C.php”的 PHP 页面中查看我的记录,但我选择了“B.php”中的表作为变量,我有很多表,但我想要在“B.php”中选择那个特定的表。我怎样才能做到这一点?非常需要这个帮助。提前Tnx!

4

2 回答 2

2

您可以将表名存储在用户的会话中,以使其在页面加载时保持不变。

首先,开始会话。这需要添加到 A.php、B.php 和 C.php 的顶部:

session_start();

接下来,将数据存储在会话变量中:

$_SESSION['tablename'] = $_POST['textbox'];

然后,您可以在任何需要访问会话的脚本中使用该值:

$tablename = $_SESSION['tablename'];

请注意,正如评论者所指出的,您的 MySQL 语句对 SQL 注入是开放的。如果必须使用 mysql_* 函数,至少要清理数据:

$tablename = mysql_real_escape_string( $_SESSION['tablename'] );

更好的是禁止用户直接输入表名:相反,允许他们从列表中选择并在内部进行翻译,这样您就可以确保表名有效且格式正确。

有关详细信息,请参阅如何防止 PHP 中的 SQL 注入?

最后,考虑从不推荐使用的 mysql_* 函数转移到mysqliPDO。这些 API 提供了许多功能来帮助您保护数据。

于 2013-06-25T16:45:19.807 回答
1

使用 session 使您的数据在脚本之间保持持久性(推荐)或将值作为 GET 变量传递。但无论你做什么,先熟悉 SQLInjection,因为你的代码就像自找麻烦。

于 2013-06-25T16:40:25.377 回答