複数選択オプション
たとえば、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));
}
私が得ている問題はUPDATESにあります。最も簡単な方法は、このユーザーの既存のエントリをすべて削除し、新しいエントリを挿入することです。
$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の上限が天文学的なものであっても、データベースを汚染するという考えは好きではないので、何か間違ったことをしていると思います。 、だから私はプロがそれをどのように扱うのか知りたいです。