如何创建名称基于表单输入的表?

问题描述:

我正在尝试为客户端构建一个小部件,它允许它们在不登录到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); 

?> 

补充一点:

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

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

当然,这是非常不安全的,请务必标题值提取到一个变量,并检查它是否是一个有效的表名。

+0

谢谢,你知道一个关于检查表名的好帖子吗? – user1247567 2012-03-04 04:26:12

+0

我会将所有特殊字符和空白字符去掉,使其小写并确保名称长度为5-15个字符。 – Wesley 2012-03-04 04:35:46

表名称现在将是$_POST['title']

所以您的查询应该是:

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

让你的用户创建表一般不认为是一个好主意,因为它们可能会使得它的一个烂摊子。如果每次只是将它们作为行存储在单个表中,那么它们是相同的字段。

+0

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