多选选项
例如,ID 为“10”的用户可以选择他使用的语言。 他使用“多重选择”或“多个复选框”来选择每种语言,如下所示:
<input name="lang[]" value="en" type="checkbox" />
<input name="lang[]" value="es" type="checkbox" />
<input name="lang[]" value="jp" type="checkbox" />
我想知道的是,存储这些选项的数据库表是什么样的以及服务器端php如何插入/更新它们?
到目前为止我的猜测
我想象的是表格看起来像这样:
CREATE TABLE user_langs (id INT AUTO_INCREMENT PRIMARY KEY, lang VARCHAR, fk_user INT);
在将值插入新用户时,php 会执行一个简单的插入循环:
$stmt = $pdo->prepare('INSERT INTO user_langs (lang,fk_user) VALUES(?,?)');
foreach($_POST['lang'] as $lang){
$stmt->execute(array($lang, $user_id));
}
我遇到的问题是更新,最简单的方法是删除该用户的所有现有条目,然后插入新条目。
$stmt1 = $pdo->prepare('DELETE FROM user_langs WHERE fk_user=?');
$stmt1->execute(array($user_id));
$stmt2 = $pdo->prepare('INSERT INTO user_langs (lang,fk_user) VALUES(?,?)');
foreach($_POST['lang'] as $lang){
$stmt2->execute(array($lang, $user_id));
}
但我认为,如果主 id 被积极使用,这会导致主 id 的增加过快,即使 id 的上限是天文数字,我不喜欢污染数据库的想法,所以我猜我是做错了什么,所以想知道高手是怎么处理的。
最佳答案
您还可以使用某种差异。
算法:
- 用户使用选定的语言发布了表单
- 您选择当前语言
- 使用
array_diff()
两次(新旧之间的差异,以及相反的差异),您将获得 2 个需要删除和添加的语言数组 - 根据 3 中的数组,您执行一次
INSERT
和一次DELETE
查询
关于php - 更新数据库中的多项选择复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5646688/