2013-03-30 8 views
0

나는 table_music 이라는 MySQL 데이터베이스를 가지고 있습니다. 아티스트, 노래, 여기 저장하고 있습니다 ... 이것은 페이지에있는 양식에서 업데이트 할 내용입니다.배열 업데이트 및 삽입

지금 나뿐만 아니라이 양식에 장르를 추가 할, 그래서 테이블이 여기에 song_genre 내가 song_genre_id, song_id, 내 양식에 genre_id

내가 그럼 내 table_music 에서 노래의 제목을 나열했다라고했다 작곡가, 길이, 연도 등을 업데이트 할 수있는 필드가 있습니다. 또한 알파벳순으로 모든 장르가 정렬 된 song_genre 테이블의 장르라는 확인란 목록이 있습니다. 나중에 다른 장르를 추가하고 싶을 수도 있기 때문에 다른 테이블에 이들을 넣었습니다.

그러나 이러한 검사 된 장르를 song_genre 테이블에 삽입하는 방법을 모르겠습니다. 이전에 배열을 사용한 적이 없으므로 여기에서 길을 잃어 버렸습니다.

처음에 나는 UPDATE으로 나의 table_music을 원하고있다. 그럼 INSERT INTO 내 새 테이블 (song_genre)을 입력하면 여기에 장르와 song_id이 표시됩니다.

나는 그것이 옳은 방법이라고 생각합니다. 그래서 장르를 나중에 변경하거나, 장르를 추가하거나 제거 할 수 있습니다.

나는 다음과 같은 시도 :하지만 작동하지 않습니다

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()); 

}

+0

어떤 오류가 발생합니까? –

답변

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 injection에 민감있어 있지만. escape 입력 또는 prepared statements으로 전환해야합니다.

0

우선 테이블 구조에 관한 한, genre_id 및 genre_name (및 필요한 다른 모든 데이터)을 저장하는 장르에 대한 테이블이 있어야합니다. 그런 다음 별도의 테이블을 만들어 조회를 수행하십시오. 이 표에는 두 필드에 고유 색인이있는 song_id, genre_id가 있습니다.

두 번째로 공개 양식에서 데이터를 캡처하고 데이터베이스에 삽입 할 때 먼저 SQL 주입 등을 방지하기 위해 데이터를 제거해야합니다. 예를 들어 특정 데이터 값이 숫자 일 수 있다는 것을 알고 있다면 데이터를 사용하기 전에 intval() 함수를 사용하여이를 적용하십시오.

아직 읽지 않은 경우 mysql_* functions in new code을 사용하지 않는 것에 대해 읽어보십시오. 더 이상 유지 관리되지 않으며 officially deprecated 입니다. instead, and use PDO 또는 MySQLi에 대해 자세히 알아보십시오. this article을 사용하면 어느 것을 사용할 지 결정하는 데 도움이됩니다.PDO를 선택한 경우 여기에 좋은 자습서가 있습니다

+0

약간의 질문입니다. 고유 한 필드가있는 song_id와 genre_id를 가진 두 번째 테이블을 만들면 조금 질문합니다. 때로는 노래가 2 개 또는 그 이상의 장르로 올 수 있습니다. 재즈와 블루스, 팝과 악기가 둘 다있을 수 있습니다. 그래서, 독특한 것이 작동하지 않을 것 같아요? – Brad

+0

내 genre_id 및 genre_name이있는 표가 이미 있습니다. 저것은 모든 모양을 나의 모양으로두고 알파벳순으로 분류했다. 그래서 저는 음악, 아티스트, 작곡가, 레이블 등으로 큰 테이블 위에 있습니다. genre_id 및 genre_name이있는 다른 테이블. 그럼 하나, 어디 song_id 및 genre_id의 연결을해야한다고 생각. 이것은 제가 song_genre라고 부르는 것입니다. 또한 song_genre_id라는 파일 하나가 있습니다. – Brad