2012-06-15 119 views
0

我想通过表单字段循环并动态获取表单字段数据并将其插入到数据库中。我不想为每个表单字段绑定值,而是循环访问数组中的值。它似乎没有按照我拥有的方式工作。有什么建议么?动态插入值

感谢

<?php 
    $FormFields = array(); 
    $Values = array(); 
    global $i; 
    $i = 0; 

    $conn= new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
    foreach($_POST as $key => $value) { 
     $FormFields[++$i] = $key; 
     $Values[$i] = $value; 

     echo $FormFields[$i] . "<br />"; 
     echo $Values[$i] . "<br />"; 

     //loop through all form fields and bind value 
     $sql = "INSERT INTO sectiona ($FormFields[$i]) VALUES (:$i)"; 
     $st = $conn->prepare($sql); 
     $st->bindValue(":$i", $Values[$i]); 
     $st->execute(); 

    } 
    echo "Total Fields: " . $i; 
    $conn = null; 

?> 

编辑:

为什么它为每一个数据输入一个新行? 不应该只是一行吗?

my image

回答

1

你不能做的报价++$i。将该部分查询移出。

$field = $FormFields[++$i]; 
$sql = "INSERT INTO sectiona ($field) VALUES (:$i)"; 
+0

就是这样!谢谢:) – Growler

0

我认为$i正在设置正确。 我做了

echo $i . " - " . $FormFields[$i] . " - " . $Values[$i] . "<br />"; 

线,它给的网址test.php?test=1&something=2&nothing=true适当的输出

1 - test - 1 
2 - something - 2 
3 - nothing - true 

可能变量没有在查询导出正确。尝试:

$sql = "INSERT INTO sectiona ('".$FormFields[$i]."') VALUES (:".$i.")"; 
$st = $conn->prepare($sql); 
$st->bindValue(":".$i, $Values[$i]); 

编辑回答您的编辑: 你是做$sql = "INSERT INTO sectiona ($FormFields[++$i]) VALUES (:$i)"; 你已经在首位$FormFields[++$i] = $key;增加$我。不要再这样做。这就是为什么我编辑它到

$sql = "INSERT INTO sectiona ('".$FormFields[$i]."') VALUES (:".$i.")"; 

在第一个响应。

+0

更新回答您的查询。 – Hrishikesh

+0

我已经改变了它,但它仍然会在每次迭代中创建一个新行。 – Growler

+0

你可以发布你的当前代码吗? – Hrishikesh