2013-02-28 40 views
0

我有一个代码可以检索窗体中发送的所有输入数据。如果表单只填写了2个字段,则PHP将仅为这2个字段获取值(未提交表单中未更改的字段)。使用可变数目的变量更新PDO/SQL:

然后,我想更新一个SQL表,我已经用我的PHP代码检索了这些字段。这是我迷失的地方。我只需要在SQL中指定我从表单收到的字段,但这是可变的。也许我只获得了1场,也许是我收到的场的7 ...

这里是我的代码:

if (isset($_POST) && !empty($_POST)) { 
echo $internalImage; 

foreach ($_POST as $key => $value) 
    { 
echo "Field Name: ".htmlspecialchars($key)." | Value: ".htmlspecialchars($value)."<br>"; 
    } 
} 

你会怎么建议?

+0

(http://stackoverflow.com/ tags/pdo/info),这个任务有一个完整的解决方案。顺便说一句,任何SQL部分都不应该有任何htmlspecialchars。 – 2013-03-01 07:54:53

回答

0

您可以构建您的查询是这样的:

$values=array(); 

//this will be an array of possible fields that are in your table 
$possible=array('field1', 'field2', 'field3'); 

$i=0; 
$len=count($_POST); 
$query='update table_name set '; 
foreach($_POST as $key => $value){ 
    $k=htmlspecialchars($key); 
    $v=htmlspecialchars($value); 
    if(in_array($k, $possible)){ 
    $query .= $k .' = ?'; //placeholder for a value 
    $values[]=$v; //append values to an array for later use 
    if($i < ($len-1)) $query .= ', '; 
    $i++; 
    } 
} 
$query .= 'where table_id = ?'; 
$values[]=$table_id; //forgot that, append id of a row you are to update. 

,然后准备和执行查询:

$db->prepare($query); 
$db->execute($query, $values); 
在[PDO为维基标签]
+0

实际上,列名称是表单中INPUT字段的名称,因此没有人可以手动更改该名称。并且这些字段的名称与表中列的名称相同... – samyb8 2013-02-28 22:51:46

+1

我相信任何小孩都可以使用Firefox更改表单中某个字段的名称并将其发布。 – Kitet 2013-02-28 22:56:53

+0

我怎么能为多个SET添加'&',除非在'foreach'中没有更多结果。 – samyb8 2013-02-28 22:59:48