2013-06-25 47 views
0

假設我在mySQL數據庫中有很多表。現在在名爲「A.php」的PHP頁面中,我選擇了一個使用文本框的特定表格,並在名爲「B.php」的另一個PHP頁面上查看了該查詢。假設變量獲得我所使用的表,在另一個php文件中選擇相同的表格

$tablename=$_POST['textbox']; 

並且查詢,

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

然後,假設我插入一條記錄&現在,我要查看我的紀錄,另一個PHP頁面命名爲「C.php」,但我選擇了「B.php」中的表作爲變量&我有很多表,但我想要在「B.php」中選擇該特定表。我怎樣才能做到這一點?非常需要這個幫助。 Tnx提前!

+6

歡迎來到SQL注入世界... –

+0

可能比直接SQL注入更糟糕:該文本框需要插入一個「mysql.user」。 –

回答

1

使用會話保持跨腳本的數據持久性(推薦)或將值作爲GET變量傳遞。但是不管你會做什麼,首先要熟悉SQLInjection,因爲你的代碼就像尋求麻煩一樣。

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']); 

更重要的是將直接進入一個表名不允許用戶:不是,讓他們從列表中選擇並在內部做翻譯以便您可以確保表格名稱有效且格式良好。

欲瞭解更多信息,請參閱How to prevent SQL injection in PHP?

最後,考慮棄用的mysql_移開*功能爲mysqliPDO。這些API提供了許多功能來幫助您保護數據。

相關問題