我有多个选择选项框,可以更改MySQL中的“about_demographics”。
例子:
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,

<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');
  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']."'");
?>

最佳答案

我确信这是因为您在不删除以前的值的情况下添加了预先存在的$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']."'");
?>

关于php - 更新值而不删除其他值,并删除PHP CONCAT列中的现有值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49927095/

10-13 08:56