ベスト プラクティスは、データベースで 1 対多のリレーションシップを取得することだと思います。これは、簡単に言えば「1 人の歩行者が多くのエリアを持つことができる」ことを意味します。
Sable Foste のコメントが正しいと理解できれば、彼は各領域のユーザー テーブルに 1 つの列を作成するように言っています。これには大規模なデータベース テーブルが必要になります。さらに、各領域を手動で追加する必要があるため、スクリプトを更新するのは非常に面倒です。代わりに、2 つのテーブルを作成することをお勧めします。
テーブル ユーザー
user_id
user_name
テーブルエリア
area_id
area_name
areas
あなたが持っているすべてのオプションを表に記入してください。これで、ユーザーがページに登録したい場合、次のようにすべての領域を取得する SQL クエリを実行できます。
$areas = $database->query("SELECT * FROM areas ORDER BY area_name ASC");
if( $database->num_rows( $areas ) > 0 ) {
foreach( $database->fetch_array($areas) as $area ) {
echo '<input type="radio" name="area[]" value="'.$area['area_id'].'" /> '.$area['area_name'].'<br />';
}
}
$database は、この例のデータベース ラッパーを示しています。mysql_ 関数を使用することもできますが、これらは PHP から廃止されようとしているため、代わりに mysqli_ 関数または PDO データベース層に関するチュートリアルを見つけてみてください。
ご覧のとおり、 fields という名前を付けました。area[]
これにより、登録フォームを送信した後に配列が取得されます。この配列はループ可能で、チェックされたすべてのラジオ ボタンが含まれます。各ラジオ ボタンには次が含まれますarea_id
。
if( isset( $_SERVER['REQUEST_METHOD'] == "POST" )) {
// Make sure you check data here and insert the user in the database first before proceeding
foreach( $_POST['areas'] as $area_id ) {
// Do something with the $area_id
}
}
area_id を user_id に接続するオプションがまだないためです。そのために、接続を保存する別のテーブルを作成します。
テーブル users_to_areas
area_id
user_id
このデータベースでは、新しく登録またはログインしたユーザーの $user_id とともに各 $area_id を保存します。注: ユーザー プロファイルを更新する場合は、以前のレコードをすべて削除し ( DELETE FROM users_to_areas WHERE user_id = $user_id
)、上記と同じループ メソッドを使用して再度挿入することができます。
プロファイルの編集ページで、同じスクリプトを使用してすべてのエリアを再度一覧表示できます。ユーザーがエリアに接続しているかどうかを確認するには、単純なクエリ ( SELECT COUNT(*) FROM users_to_areas WHERE user_id = $user_id AND area_id = $area_id
) を使用できます。num_rows() 関数が 1 を返す場合、チェックボックスはそれ以外の場合は、チェックを外す必要があります。
これがあなたを正しい方向に向かわせることを願っています。幸運を祈ります。