2010-04-07 2 views
1

내 사이트의 각 게시물에 대한 태그를 작성하는 방법에 대해 고민하고 있습니다. 태그를 데이터베이스에 추가하는 방법을 모르겠습니다. 1 PHP 무엇인가 포스팅 (예 :게시물 태그 (SO 태그와 같은)를 생성하는 논리에 집착 (PHP)

+---------------------+ +--------------------+ +---------------------+ 
| Tags    | | Posting   | | PostingTags   | 
+---------------------+ +--------------------+ +---------------------+ 
| + TagID    | | + posting_id  | | + posting_id  | 
+---------------------+ +--------------------+ +---------------------+ 
| + TagName   | | + title   | | + tagid    | 
+---------------------+ +--------------------+ +---------------------+ 

태그 테이블 태그 (1 PHP, 2 MySQL은, 3 HTML 예)의 단지 이름입니다 현재 ... 나는 3 개 테이블이 ?, 2 CSS 란?, 3 HTML이란 무엇입니까? postingtags는 게시와 태그 사이의 관계를 보여줍니다.

사용자가 게시글을 입력하면 "게시"테이블에 데이터가 삽입됩니다. 각 게시물에 대해 posting_id를 자동으로 삽입합니다 (posting_id는 기본 키임).

$title = mysqli_real_escape_string($dbc, trim($_POST['title'])); 
    $query4 = "INSERT INTO posting (title) VALUES ('$title')"; 
    mysqli_query($dbc, $query4); 

그러나 각 글마다 어떻게 태그를 삽입합니까? 사용자가 양식을 작성할 때 사용 가능한 모든 태그에 대한 확인란 영역이 있으며 원하는 태그를 모두 선택합니다. (사용자가 아직 원하는 태그를 입력하는 위치를 지정하지 않음)

이렇게하면 각 태그에 확인란이 표시됩니다. 사용자가 각 태그를 체크하면 "postingtag []"배열에 저장됩니다.

<label class="styled">Select Tags:</label> 
    <?php 

$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 
$query5 = "SELECT * FROM tags ORDER BY tagname"; 
$data5 = mysqli_query($dbc, $query5); 
while ($row5 = mysqli_fetch_array($data5)) { 
    echo '<li><input type="checkbox" name="postingtag[]" 
     value="'.$row5['tagname'].'" ">'.$row5['tagname'].'</li>'; 
    } 

?> 

제 질문은 배열 ("postingtag") 태그를 "postingtags"테이블에 어떻게 삽입합니까? 나는 ...

$postingtag = $_POST["postingtag"]; 
foreach($postingtag as $value){ 
$query5 = "INSERT INTO postingtags (posting_id, tagID) 
       VALUES (____, $value)"; 
mysqli_query($dbc, $query5); 
}  

1.In이 쿼리는 어떻게 게시물의 posting_id 값을 얻을해야합니까?

저는 여기 논리에 매달렸습니다. 누군가 다음 단계를 설명하도록 도울 수 있다면, 고맙겠습니다.

태그를 삽입하는 쉬운 방법이 있습니까?

답변

2

PostingTags는 Many-To-Many 매핑 테이블입니다. 귀하가 필요로하는 데이터에 대한 귀하의 평가가 정확하지만, 귀하의 정보 검색에 도움이 될만한 방법이 없습니다.

1.이 쿼리에서 게시물의 posting_id 값을 얻으려면 어떻게해야합니까?
사용자가 태그를 선택할 때 응용 프로그램이 이것을 모르고 있습니까? 태그를 할당하기 전에 실제로 편집중인 게시물을 알아야합니다. 이 태그는 사용자가 태그를 선택하는 완전히 별개의 페이지입니까? 그렇다면 한 페이지에서 다른 페이지로 posting_id를 전달하는 숨겨진 필드를 웹 폼에 만들어야합니다.

그렇지 않으면 게시 테이블에 삽입 할 때 사용한 마지막 기본 키를 결정하는 문제가됩니다. 이를 위해이 같은 mysqli::insert_id를 호출해야합니다

//This is the first snippet of code you posted 
$title = mysqli_real_escape_string($dbc, trim($_POST['title'])); 
$query4 = "INSERT INTO posting (title) VALUES ('$title')"; 
mysqli_query($dbc, $query4); 
$posting_id = $dbc->insert_id; 

내가 여기 논리에 붙어 있어요, 그래서 누군가가 나에게 다음 단계를 설명 할 수 있다면, 나는 그것을 감사하겠습니다!
이해하십니까?

태그를 삽입하는 쉬운 방법이 있습니까?
사용자가 임의의 수의 태그를 게시물에 삽입 할 수 없도록하려는 경우가 아닙니다.

제 질문은 배열 ("postingtag") 태그를 "postingtags"테이블에 어떻게 삽입합니까?
코드가 제대로 작동하지만 준비된 문으로 모든 것을 수행합니다. 준비된 명령문은 SQL 삽입 공격을 방지하므로 쿼리에 들어가는 모든 것을 피할 필요가 없습니다. 또한 일을 훨씬 덜 장황 방법 : 선택한 태그의 값을 저장하는 배열 형식을 사용한다

//This is the last snippet of code you posted 
//Populate postid as specified in the first part of this answer. 
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 
foreach($postingtag as $tag) { 
    $sql = 'INSERT INTO postingtags (posting_id, tagID) VALUES (?, ?);'; 
    $insertStatement = $dbc->prepare($sql); 
    $insertStatement->bind_param('ii', $postid, $tag); 
    $insertStatement->execute(); 
} 
+0

감사합니다. Billy. 네가 한 말하려고 노력할거야. 어떤 문제가 생기면 나는 볼 수있을거야 :) – ggfan

+0

거기에? $ posting_id = $ dbc-> insert_id를 얻었을 때 코드의 마지막 스 니펫에 대해 쓴 것을 사용합니까? – ggfan

+0

@ggfan : 예. bind_param을 호출하면 물음표가 자동으로 올바른 데이터로 바뀝니다. 예를 들어 http://www.php.net/manual/en/mysqli.prepare.php –

-2

, 당신은 JSON으로 그 변환하고 데이터베이스에 저장할 수 있습니다.

이 정보가 도움이되기를 바랍니다.

관련 문제