我有多个选择选项框,用于更改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']."'");
?>