0

PHP で Web サイトを構築しています。PHP はあまり得意ではありませんが、オンラインで優れたチュートリアルを見つけました。

ドッグウォーカーの登録サイトなので、登録する際に該当するエリアにチェックを入れてほしいのですが、エリアが多くて(100以上)どうしたらいいのかわかりません。それはphpとmysqlを使用しています。(私はJSについて何も知りませんが、チュートを探すことはできません)

エリアのすべての名前をデータベースの 1 つのフィールドに格納する必要がありますか?それともエリアごとに 1 つのフィールドを作成する必要がありますか?

人々がエリアを更新できるようにしてほしい。

次に、検索ボタン付きの選択フォームが必要でした。

どうするのが一番いいのか、言葉で教えてほしいです。

ありがとうございました。

4

2 に答える 2

1

ベスト プラクティスは、データベースで 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 を返す場合、チェックボックスはそれ以外の場合は、チェックを外す必要があります。

これがあなたを正しい方向に向かわせることを願っています。幸運を祈ります。

于 2013-11-07T23:08:22.857 に答える