0

table_music Here I store artist, song,...という名前の MySQL データベースがあります。これは、ページにあるフォームから更新するものです。

このフォームにもジャンルを追加したいので、Here I have というテーブルを作りましsong_genre た。song_genre_idsong_idgenre_id

私のフォームでは、私の曲のタイトルをリストしtable_music ます。次に、作曲者、長さ、年などを更新できるフィールドがあります。song_genreまた、すべてのジャンルがアルファベット順に並べられた、表の「ジャンル」というチェックボックス リストもあります。後でジャンルを追加したいかもしれないので、これらは別のテーブルに持っています。

song_genreしかし、これらのチェックされたジャンルをテーブルに挿入する方法がわかりません。これまで配列を使用したことがないので、ここで迷っています。

UPDATE最初に私がしたいのですが、table_musicそれはうまく機能しています。INSERT INTO次に、新しいテーブル ( )を作成したいsong_genreので、ここでジャンルと を取得song_idします。

それが正しい方法だと思うので、後でジャンルを変更したり、必要に応じて 1 つのジャンルを追加または削除したりできます。

私は次のことを試しました:しかし、うまくいかないようです:

foreach(echo $row_rs_genres['genre_id'] as $checked_value)
{
   $query = "INSERT INTO song_genre (genre_id, song_id) VALUES ('$checked_value',    $_POST['song_id'])"; 
   $result = mysql_query($query) or die ("Unable to execute query: " . mysql_error());

}

4

2 に答える 2

1

以下を削除しechoます。

foreach($row_rs_genres['genre_id'] as $checked_value)

$_POSTそして、中かっこで囲む必要があります。

"INSERT INTO song_genre (genre_id, song_id) VALUES ('$checked_value', {$_POST['song_id']})"

または、文字列から抜け出します。

"INSERT INTO song_genre (genre_id, song_id) VALUES ('" . $checked_value . "', " . $_POST['song_id'] . ")"

ここではSQL インジェクションの影響を受けやすいですが。入力をエスケープするか、準備済みステートメントに切り替える必要があります。

于 2013-03-30T17:59:21.630 に答える
0

まず第一に、テーブル構造に関しては、genre_id と Genre_name (および必要なその他のデータ) だけを格納するジャンルのテーブルが必要です。次に、ルックアップを行う別のテーブルを作成します。このテーブルには、song_id、genre_id だけがあり、両方のフィールドに一意のインデックスがあります。

次に、パブリック フォームからデータを取得してデータベースに挿入する場合は、SQL インジェクションなどを防ぐために、最初にデータをスクラブしていることを確認してください。たとえば、特定のデータ値が数値のみであることがわかっている場合は、データを使用する前に intval() 関数を使用して強制します。

まだお読みでない場合は、新しいコードで mysql_* 関数を使用しないことについてお読みください。それらはもはや保守されておらず、公式に非推奨です代わりにPDOまたはMySQLiについて学び、使用してください。この記事は、どちらを使用するかを決定するのに役立ちます。PDO を選択する場合は、ここに良いチュートリアルがあります

于 2013-03-30T18:02:41.023 に答える