更新值而不删除其他值,并删除php concat列中的现有值

jjhzyzn0  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(307)

我有多个选择框,它改变了mysql中的“关于人口统计”。
例子:
about_demographics 我有价值观: g01,g02,g03, 如果我试图通过选择框来更新这些值 g02,g03,g05, 并取消选择 g01, 那么价值就是 g01,g02,g03,g02,g03,g05, 我期望的是:
about_demographics 我有价值观: g01,g02,g03, 如果我试图通过选择框来更新这些值 g02,g03,g05, 并取消选择 g01, 那么价值就是 g02,g03,g05, ```

ix0qys7i

ix0qys7i1#

我很确定这是因为你在附加 $first_part_all 变量而不删除以前的值。您应该能够通过使用implode()修复这个问题并消除对循环的需要

<select name="work[]" multiple>
  <option value="g01">1</option>
  <option value="g02">2</option>
  <option value="g03">3</option>
  <option value="g04">4</option>
  <option value="g05">5</option>
</select>

<?php
$db->Query("UPDATE user_about SET about_demographics = CONCAT(about_demographics, 
  '".implode(",",$_POST['work'])."') WHERE id = '".$data['id']."'");
?>

编辑:这个替代方案仍然需要一个循环,但它会清除你的 $first_part_all 变量,只需对现有代码进行少量更改即可产生预期结果:

<select name="work[]" multiple>
  <option value="g01">1</option>
  <option value="g02">2</option>
  <option value="g03">3</option>
  <option value="g04">4</option>
  <option value="g05">5</option>
</select>

<?php
  $work_array = array('g01', 'g02', 'g03', 'g04', 'g05');
  $first_part_all = '';
  foreach ($work_array as $a_work) {
    if (in_array($a_work, $_POST['work'])) {
      $first_part_all.=$a_work.",";
    }
  }

  $db->Query("UPDATE user_about SET about_demographics = CONCAT(about_demographics, 
  '$first_part_all') WHERE id = '".$data['id']."'");
?>

相关问题