2012-03-04 72 views
0

我正在嘗試爲客戶端構建一個小部件,它允許它們在不登錄到phpMyAdmin的情況下創建一個新表,但是我失敗了。如何創建名稱基於表單輸入的表?

我無法弄清楚如何採取一些文本,該客戶端將在第1頁輸入,並用它在頁面創建的表名2.

幫助?

--------------------------------------------------------- 
PAGE 1 
--------------------------------------------------------- 

<html> 
<h2>Create Table</h2> 
</br> 
<form action="/create_reg.php" method="post"> 
Table Name:<input type="text" name="title" /> 
</br> 

<input type="submit" value="Create Table" /> 

</form> 
</html> 

--------------------------------------------------------- 
PAGE 2 
--------------------------------------------------------- 

<?php 

$con = mysql_connect("localhost","database","password"); 
if (!$con) 
{ 
die('Could not connect: ' . mysql_error()); 
    } 

//CREATE TABLE 
mysql_select_db("database", $con); 

$sql = "CREATE TABLE ??????? 
(
line1 varchar(19), 
line2 varchar(19) 
)"; 

if (!mysql_query($sql,$con)) 
{ 
    die('Error: ' . mysql_error()); 
    } 
echo "You have successfully created the table."; 

mysql_query($sql,$con); 

mysql_close($con); 

?> 

回答

0

補充一點:

if(isset($_POST['title'])==FALSE){ die('No Title Found.'); } 
$name = mysql_real_escape_string($_POST['title']); 
$sql = "CREATE TABLE $name 
(
    line1 varchar(19), 
    line2 varchar(19) 
)"; 
+0

巨大的SQL注入漏洞! – 2012-03-04 02:27:14

+0

@ConradShultz我修好了!多數民衆贊成在我發佈2小時睡覺哈哈。我很習慣準備好的程序。 – MichaelH 2012-03-04 04:01:35

+0

這真的很好,謝謝。 – user1247567 2012-03-04 04:15:40

0
$sql = "CREATE TABLE " . $_POST['title'] . " 

當然,這是非常不安全的,請務必標題值提取到一個變量,並檢查它是否是一個有效的表名。

+0

謝謝,你知道一個關於檢查表名的好帖子嗎? – user1247567 2012-03-04 04:26:12

+0

我會將所有特殊字符和空白字符去掉,使其小寫並確保名稱長度爲5-15個字符。 – Wesley 2012-03-04 04:35:46

0

表名稱現在將是$_POST['title']

所以您的查詢應該是:

$sql = "CREATE TABLE " . mysql_real_escape_string($_POST['title']) . " 
(
line1 varchar(19), 
line2 varchar(19) 
)"; 

讓你的用戶創建表一般不認爲是一個好主意,因爲它們可能會使得它的一個爛攤子。如果每次只是將它們作爲行存儲在單個表中,那麼它們是相同的字段。

+0

可能的重複[如何防止SQL注入動態表名?](http://stackoverflow.com/questions/5811834/how-to-prevent-sql-injection-with-dynamic-tablenames) – mario 2012-03-04 21:18:25

相關問題