【问题标题】:Update/insert only a column of database table in PHP在 PHP 中仅更新/插入一列数据库表
【发布时间】:2020-05-30 00:32:20
【问题描述】:

我的 WordPress 表名为 wp_fes_vendors,共有 12 列。

在这 12 列中,我只想更新列名 requests 的数据

我为此列获取的数据来自存储在$_POST['getval'] 中的后端自定义表单

这是我尝试过的代码

 if (!empty(isset($_POST['getval'])))
    {       
            global $wpdb;
            $table_name=$wpdb->prefix.'fes_vendors';

            $data_array = array(

            'requests' => $_POST['getval']


            );

            $data_where = array('requests' => $_POST['getval']);

            $wpdb->update($table_name,$data_array,$data_where);


    }

HTML

<form id="myForm" name="myform" action="" method="POST" style="padding:20px;">
  <label> Select if this Vendor wishes to receive customer requests or not: </label>
  <select name="getval" id="brandSel" size="1">
      <option selected="selected" disbaled value="">-- Select status --</option>
      <option value="1">Enable</option>
      <option value="0">Disable</option>
  </select>

  <?php submit_button('submit'); ?>
</form>

我尝试了几次,但数据没有被保存/更新。 这是db的图片

【问题讨论】:

    标签: php database wordpress


    【解决方案1】:

    你的情况没有意义。

    假设用户选择了enable -> $_POST['getval'] = 1;

    您的查询将是:

    更新 {table} SET 请求 = 1 WHERE 请求 = 1

    • 由于请求列中没有任何记录的值为 1,因此该条件永远不会存在,也不会发生更新。
    • 即使存在“requests = 1”的行,更新也不会真正改变它们,因为它们的值已经是 1。
    • 同样适用于用户选择“禁用”(0)的情况

    我认为您应该将您的条件更新到特定行。 您可以通过将隐藏输入添加到您希望更新的特定行的表单来实现。并将您的条件更新为:

    "id" => $_POST['row_id']
    

    【讨论】:

    • 在这种情况下我需要选择一个特定的行,这是你想说的吗?
    • 是的,您可以使用标识该行的字段来执行此操作。 OR 您仍然可以更新多行,但您需要依赖于标识它们的值。通常是“id”列。
    • 它按照您提到的方式工作,但是在 html 表单中,没有显示保存在 db 中的数据。我的意思是,一旦该列中的数据更新,在表单部分中需要显示所选数据。为了获取 id,我使用了 $data_where = array('id' => $_GET['id']);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    相关资源
    最近更新 更多