循环更新来自php mysql html的数据

时间:2012-03-10 23:20:59

标签: php mysql arrays multidimensional-array

我创建了以下代码来使用来自php表单的数据更新数据库。 $_POST['variables']是不同的数组。 我遇到的问题是当我回显$updater字段状态并且字段显示值的顺序不正确时。例如,如果我选中复选框3.它将返回结果第一行启用的值。任何建议都会有所帮助

//update data

$priority = $_POST['priority']; // this will be an array
$enable = $_POST['enable'];
$height = $_POST['height'];
$position = $_POST['position'];
$widgetid = $_POST['widgetid'];
$display = $_POST['display'];

$i = -1;
foreach($priority as $priori)
{
    ++$i;
    $row_enable = $enable[$i];
    $row_height = $height[$i];
    $row_prio   = $priority[$i];
    $positio    = $position[$i];
    $disp       = $display[$i];
    $widgeti    = $widgetid[$i];

    if (isset($enable[$i]))
         $enables ="y";
    else
         $enables ="n";

    if (isset($display[$i]))
         $displ = "y"; 
    else 
         $displ = "n";

    //DO THIS FOR THE REST AND THEN YOUR UPDATE QUERY
    $updater = "UPDATE hpoptions SET position='$positio', height='$row_height', status='$enables', display='$displ', priority='$row_prio' WHERE userid='$ud' and widgetid='$widgeti'";

    echo $updater."<br>";

} // ends here 

enter image description here

1 个答案:

答案 0 :(得分:2)

除非您在HTML中强制使用,否则无法保证您的阵列符合所需的顺序。你可能有这样的事情:

<input type="text" name="position[]"> 
<input type="text" name="height[]"> ...
<input type="hidden" name="widgetid[]" value="w1">
  ...
<input type="text" name="position[]">
<input type="text" name="height[]"> ...
<input type="hidden" name="widgetid[]" value="w2">
  ...

您需要为字段名称上编码的数组添加额外的维度。每个字段组都需要一个唯一的ID,我相信您的widgetid就是这样,对吧?所以你可以这样做:

<input type="text" name="data[w1][position]"> 
<input type="text" name="data[w1][height]"> ...
 ...
<input type="text" name="data[w2][position]"> 
<input type="text" name="data[w2][height]"> ...
 ...

请注意,您甚至不再需要名为widgetid的字段,因为ID将在每个字段名称上进行编码。在PHP中,您这样做是为了遍历结果:

foreach($_POST['data'] as $widgetid => $data) {
    // Make sure to check if the values won't make your SQL query vulnerable to injection!
    // http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain
    $widgetid = mysql_real_escape_string($widgetid);
    $position = is_numeric($data['position']) ? $data['position'] : 0;
    // ...
    // Build your update query here
}