PHP - 动态POST的动态SQL查询

时间:2011-12-30 15:10:07

标签: php mysql

第一次问题,长时间读者:)

我正在从MYSQL数据库中的列动态构建表单。这些专栏 在我的应用程序的其他地方创建/删除等。我的表单运行查询 SQL查看并提取列名和列数。简单!建立表格, 使用PHP for循环构建HTML输入,并回显新表单字段的相关HTML。到目前为止一切都很容易。

现在我希望用户更新这些动态添加的字段,并将数据添加到相关列 - 同一个表 作为现有列。因此,由于输入字段的名称与列相同,因此它们将发布到PHP脚本以进行处理。

问题是,虽然我将实际字段名称插入到SQL INSERT查询中,但我无法弄清楚如何提取POST 来自POST的数据动态并将其添加到查询的VALUEs部分。

这是我的尝试.... 查询在没有添加变量的情况下工作。

它的工作原理如下,第一部分是从早期创建的VIEW中检索列名 - 因为它们与表单中的POST名称相同。然后输出到数组和变量以插入到Query。它看起来像implode函数一样,因为相关的列名在语句中是正确的,但我担心我尝试将列名注入POST变量是不行的。

   $custq = "SELECT * FROM customProperties";
       $result = $database->query($custq);
       $num_rows = mysql_numrows($result);

        while (list($temp) = mysql_fetch_row($result)) {
            $columns[] = $temp;
        }

        $query = '';
        foreach($columns as $key=>$value)
        {
        if(!empty($columns[$key]))
        {
        $values .= "'".'$_POST'."['".$value."'], ";
        }
        }

      $q = "INSERT INTO nodes
          (deviceName, 
          deviceInfo,
          ".implode(", ", $columns).", 
          nodeDateAdded,
          status
          ) 
          VALUES 
                ('" . $_POST['deviceName'] . "', 
                '" . $_POST['deviceInfo'] . "', 
                ".$values."
                CURDATE(),
                '1'
                )"; 

$result = $database->query($q)

非常感谢任何帮助。我会尽可能多地反馈。请注意,相关性是PHP的新功能,所以如果我在这方面都错了,我会很高兴任何提示/建议

此致

斯蒂芬

1 个答案:

答案 0 :(得分:1)

如果您想在不知道输入名称的情况下获取每个 POST输入的值,那么您可以这样做:

//get all form inputs 
foreach($_POST as $name => $value) 
{ 
    echo $name . " " . $value . "<br>"; 
} 

如果您希望获得某些 POST输入的值,您知道输入字段的名称,那么您可以这样做:

if(isset( $_GET["deviceName"]))
{
    $deviceName = $_POST["deviceName"]; 
}

if(isset( $_GET["deviceInfo"]))
{
    $deviceInfo = $_POST["deviceInfo"]; 
}

要连接数据库并插入信息,您必须执行以下操作:

$host = "localhost"; 
$dbuser = "username"; 
$pass = "password"; 
$datab = "databasename";

//Create DB connection
$con=mysqli_connect($host, $dbuser, $pass,$datab);

if (mysqli_connect_errno($con))
{
    echo "ERROR: Failed to connect to the database: " . mysqli_connect_error();
}
else
{
    echo "Connected to Database!";
}

//insert into database
mysqli_query($con, "INSERT INTO nodes (deviceName, deviceInfo) VALUES ('$deviceName', '$deviceInfo')");

(不要忘记在工作之后将mysql_real_escape_string添加到$ _POST行。)