多选选项
例如,ID 为“10”的用户可以选择他说的语言。他使用“多选”或“多个复选框”选择每种语言,如下所示:
<input name="lang[]" value="en" type="checkbox" />
<input name="lang[]" value="es" type="checkbox" />
<input name="lang[]" value="jp" type="checkbox" />
我想知道的是,存储这些选项的 db 表是什么样子的,服务器端 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 的上限是天文数字我不喜欢污染我的数据库的想法,所以我猜我做错了什么,所以我想知道专业人士如何处理它。