【问题标题】:PHP PDO - Update in mysql only posted value (html form)PHP PDO - 仅在 mysql 中更新发布值(html 表单)
【发布时间】:2015-09-15 05:19:24
【问题描述】:

我有一个 html 表单,其中包含一些禁用字段,具体取决于用户拥有的授权类型。当我按下提交时,脚本应该知道哪些表单字段已发布,哪些未发布,然后仅更新数据库中的相关字段。

例如:

我可以修改BirthdayBirth placesex,但NameSurname 被禁用,因此不会通过html 表单发布。因此只需更新BirthdayBirthPlaceSex 其中id = $idperson。但如果我得到许可,我也会发布NameSurname。因此我也应该更新这些值。

有没有使用 PDO 的快速方法?还是我必须创建一长串 if/else?

对不起我的英语不好

【问题讨论】:

  • 你应该可以循环遍历$_POST来创建一个查询字符串+绑定数组。
  • 另外,您也可以使用类似的方法创建一个可以构建这些的类。

标签: php forms pdo


【解决方案1】:

做到这一点的最好和最简单的方法,

  • 先收集post数据并设置check id
  • 使用 id 从表中获取所有数据
  • 循环您的帖子数据并检查收集的详细信息
  • 如果收集的详细信息值和发布值更改,则更新收集的详细信息变量
  • 使用新收集的数组更新所有字段

查看以下代码了解更多

function collect() {
   if(isset($_POST['id'])) {
      // validate id and get all details from table
      $details = getDetails($_POST['id']);
      foreach($_POST as $key=>$value) {
        // loop your post data and check with collected details if value changed update in collected details 
         if(array_key_exists($key, $details)) {
            $details[$key] = ($details[$key] != $_POST[$key]) ? $_POST[$Key] : $details[$key];
         }
      }
   } else {
      echo "id not found to update";
   }
}

function getDetails($id) {
   $query = "SELECT * FROM table_name WHERE id=:id";
   $stmt = $conn->prepare($query);
   $stmt->bindParam(':id', $id);
   $stmt->execute();
   return $stmt->fetch(PDO::FETCH_ASSOC);
}


function update($details) {
   $query = "UPDATE table_name SET field_1=:field_1, field_2=:field_2, all_field=:all_field WHERE id=:id";
   $stmt = $conn->prepare();
   $stmt->bindParam(':field_1', $details['field_1']);
   ...
   $stmt->bindParam(':id', $details[$id]);
   return $stmt->execute();
}

希望这段代码对您有所帮助,祝您编码愉快。

【讨论】:

    猜你喜欢
    • 2018-06-29
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2017-07-30
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多