【问题标题】:loop to update data coming from form php mysql html循环更新来自表单 php mysql html 的数据
【发布时间】:2023-03-15 09:08:01
【问题描述】:

我创建了以下代码,用于使用来自 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 

【问题讨论】:

    标签: php mysql arrays multidimensional-array


    【解决方案1】:

    除非您在 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
    }
    

    【讨论】:

    • 感谢我现在尝试。表单字段是从 mysql 生成的...我不能将它们命名为 w1 w2 等...
    • 使用别名以便命名。
    • 它应该可以工作。在本地服务器上尝试 this code 作为概念证明
    • 他建议这样做。仔细阅读他的回答。
    • @fogsy,您的屏幕截图显示您正在将“w1”和“w2”等值传递给更新查询,位于widgetid 列。
    猜你喜欢
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2012-07-20
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-23
    相关资源
    最近更新 更多