PHP提交输入Foreach()ID

时间:2016-05-19 01:49:00

标签: php mysql forms

我正在尝试提交一个包含每个用户ID的时间表的表单。到目前为止它看起来像这样:

$sql = "SELECT * FROM dbtable";
    $result = $conn->query($sql);
    $name_info = "SELECT udidId, name FROM udid";
    $name_result = $conn->query($name_info);
    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $udidId = $row["udidId"];
            echo "<label for='hours' class='schedule'><strong>I want <span>".$row["name"]."</span>";
            echo "<input type='text' name='udidId' class='hidden' value='".$row["udidId"]."' />";
            echo " to be <br />allowed out between <input type='text' name='outAllowedStartHour' placeholder='8' value='" . $row["outAllowedStartHour"] . "'> - <input type='text' name='outAllowedEndHour' placeholder='8' value='" . $row["outAllowedEndHour"] . "'><br />allowed in between <div class='padd_left'></div><input type='text' name='inAllowedStartHour' placeholder='8' value='" . $row["inAllowedStartHour"] . "'> - <input type='text' name='inAllowedEndHour' placeholder='8' value='" . $row["inAllowedEndHour"] . "'></strong></label>";
        }
}    


if(isset($_POST["update_schedule"])) {
        foreach($_POST as $key => $value) {
          echo "POST parameter '$key' has '$value' <br />"; 
          while($row = $result->fetch_assoc()) {
              foreach($value as $x => $x_value) {
                echo "Key=" . $x . ", Value=" . $x_value;
                echo "<br>";
                $update_pets = "UPDATE v_spottData SET $x_value = $x_value WHERE udidId = $x";
$conn->execute($update_pets);
              }
            }
        }

但是,只更新数据库中最后一个ID的输入,并且根本不更新输入值。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

  1. Execute不会execute查询,它会执行预准备语句。您需要使用prepare来准备查询。
  2. 准备好的陈述应使用占位符。报价/转义将由司机处理。
  3. 注意列不能绑定/放置。
  4. 您当前的查询正在尝试更新具有相同值的列,这不是正确的。将下面的$updating_column更改为您要更新的任何列。
  5. $columns = array('outAllowedStartHour', 'outAllowedEndHour', 'inAllowedStartHour', 'inAllowedEndHour'); // whitelist columns
    if(in_array($updating_column, $columns)) {
         $update_pets = "UPDATE v_spottData SET `$updating_column` = ? WHERE udidId = ?";
         $stmt = $con->prepare($update_pets);
         $stmt->bind_param("ii", $x_value, $x);
         $stmt->execute();
    } else {
         echo 'Using a Not Allowed Column';
    }
    

    您可以在此处阅读有关预备语句的更多信息,http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

答案 1 :(得分:0)

我觉得很傻,但对于处理这个问题的其他人来说,我的解决方案很简单。

尝试将PHP用于处理文档顶部的表单提交,而不是在底部。一旦我把它移动起来,一切都很好!

感谢大家的帮助,特别是@ chris85!