3

私は自分の映画コレクションの MySQL データベースを持っており、データベースを検索および編集するための小さな Web サイトに取り組んでいます。プロジェクト全体は、最も簡単な方法でそれを成し遂げようとするというよりも、学ぶことです。そのため、プレーンテキストファイルだけですべてをゼロから作成しており、主に PHP を使用しています。

そこで、映画に関する情報を編集できるページが必要です。新しい情報を追加するのは簡単ですが、情報を削除するのはどうでしょうか。ジャンル用のチェックボックスがいくつかあります。フォームが表示されると、現在映画に関連しているジャンルがチェックされます。ボックスのチェックを外すと、その映画からそのジャンルが削除されます。これを行う唯一の方法は、フォームが開いたときに値の初期配列を作成し、フォームが送信されたときに POST 配列を取得することです。次に、最初の配列のジャンルを削除しますが、2 番目の配列は削除しません。これはややこしいように思えますが、これを行うにはもっとエレガントな方法が必要だと思います。これはかなり標準的なことのように思えるので、これを行う良い方法があるのではないでしょうか?

4

3 に答える 3

1

私が考えることができる最善の方法は、ジャンルと映画の間に多対多の関係を持つことです(つまり、映画には複数のジャンルがあり、1 つのジャンルが多くの映画に登場する可能性があります)。

これには、さらに 2 つのテーブルを追加する必要があります。1 つはジャンルを定義するためのもので、もう 1 つはそれらを映画に関連付けるためのものです。

genres
---------
id | name

少しトリッキーな部分は次のとおりです。

genres-movies
-------------------
movie_id | genre_id

movie_idはテーブルからの実際の ID で、 はmoviesテーブルgenre_idからの実際の IDgenresです。

たとえば、ID が 1 のジャンルは でScience Fiction、ID が 42 の映画は(私がそこで何をしHitchhiker's Guide to the Galaxyたか見てください) です。 SF。どちらも一意ではなく、どちらも複数回出現する可能性があるため、次のことが可能であることに注意してください。42 | 1genres-moviesmovie_idgenre_id

movie_id | genre_id
---------+---------
1        | 2
1        | 3
2        | 2
3        | 1

映画のすべてのジャンルを検索するには:

SELECT `genre_id` FROM `genres-movies` WHERE `movie_id` = <ID>;

結局のところ、あなたの質問に。このアプローチでは、複数のクエリが必要で、映画からすべてのジャンルを削除してから、選択したジャンルをそれぞれ追加する必要があります。選択されていないチェックボックスはサーバーに送信されないため、これを行う必要があります(疑似コード)

DELETE FROM `genres-movies` WHERE `movie_id` = <ID>; --Remove all genres

foreach ($genres_from_checkboxes as $genre) {
    INSERT INTO `genres-movies` (`movie_id`, `genre_id`) VALUES (:movie_id, :genre_id)
}

ノート!ユーザーから取得したデータを使用して、常にクエリをサニタイズします(または、準備を整えることをお勧めします!!! )。

ふぅ!それは長かったです、あなたが何かを学んだことを願っています:)

于 2013-06-03T20:35:26.513 に答える
1

php ifステートメントを使用して、データベース列の値をチェックし、チェック済みを表示できます

<input name="column" type="radio" value="1" <?php if($table['column'] = 1) echo "checked" ?>>
<input name="column" type="radio" value="0" <?php if($table['column'] = 0) echo "checked" ?>>

または、チェックボックスを使用している場合

<input name="column" type="checkbox" value="1" <?php if($table['column'] = 1){ echo "checked" }elseif($table['column'] = ){ echo "" } ?>>

私はそれがあなたのために働くことを願っています

于 2019-04-25T11:16:01.970 に答える