2017-04-19 11 views
0

양식을 가지고 있으며 체크 된 모든 행을 다시 검색하려고합니다. 하지만 원하는대로 작동하도록 할 수는 없습니다 .. 하나의 체크 박스 만 작동합니다. 각 값이있는 모든 행을 표시하려고합니다. "Rock"과 "Jazz"를 선택하면 모든 행이 "Rock"또는 "Jazz"로 표시됩니다. 그리고 그 행 부엉이 "록, 전자"도 나타납니다.PHP : 배열의 각 값을 선택하십시오.

다른 문제가 있습니까?

<?php 
if(isset($_POST['submit'])){ 
    if (isset($_POST['genre'])) { 

    $genre_str = implode(",", $_POST['genre']); 

    $sql = $dbcon->prepare('SELECT * FROM user_profile WHERE user_genre LIKE :user_genre'); 
    $sql->bindvalue(':user_genre', "%".$genre_str."%"); 
    $sql->execute(); 

    foreach ($sql as $row){ 
    $row_id = htmlspecialchars($row['id']); 
    $row_genre = $row_post['user_genre']; 
    echo "id: " . $row_id . " = " . $row_genre; 
    echo "<br/>"; 
    } 
    } 

} 
?> 

<form action="" method="post"> 
    <h4 class="text-center">Genre</h4> 
    <div class="checkbox"> 
    <label class="checkbox-inline"><input type="checkbox" name="genre[]" value="Rock">Rock</label> 
    <label class="checkbox-inline"><input type="checkbox" name="genre[]" value="Funk">Funk</label> 
    </div> 

    <div class="checkbox"> 
    <label class="checkbox-inline"><input type="checkbox" name="genre[]" value="Jazz">Jazz</label> 
    <label class="checkbox-inline"><input type="checkbox" name="genre[]" value="Hip-Hop">Hip-Hop</label> 
    </div> 

    <div class="checkbox"> 
    <label class="checkbox-inline"><input type="checkbox" name="genre[]" value="Acoustic">Acoustic</label> 
    <label class="checkbox-inline"><input type="checkbox" name="genre[]" value="Electronic">Electronic</label> 
    </div> 

    <div class="col-md-12"> 
    <input type="submit" name="submit" class="btn btn-block btn-success" value="Search"> 
    </div> 
</form> 
+0

user_genre에 저장된 값의 유형은 무엇입니까? 단일 값 또는 쉼표로 구분 된 목록? –

+0

쉼표로 구분 됨 – user2254488

+0

[읽으십시오.] (http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database-column-really-that-bad) LIKE 가능 와일드 카드 문자 사이의 전체 값을 찾을 것이므로 정확한 값을 user_genre 어딘가에 찾지 않으면 일치하지 않습니다. –

답변

0

find_in_set()을 사용할 수 있습니다.

SELECT * FROM user_profile WHERE find_in_set('jazz', user_genre); 

예 :

SELECT * 
FROM `test` 
WHERE find_in_set('jazz', user_genre) 
AND find_in_set('sufi', user_genre) 

팁 : 선택한 체크 박스의 수에 따라 여러 FIND_IN_SET()를 얻기 위해 루프를 사용할 수 있습니다.

관련 문제