2014-07-16 1 views
0

나는 체크 된 체크 박스를 기반으로 MySQL 결과를 필터링하려고한다. 내 쿼리는 첫 번째 검사에서 작동하지만 두 번째 필터에서는 아무 것도 반환하지 않습니다. 내 체크 박스 배열은 $ _POST [ 'country']입니다. GetSQLValueString 함수에서 쉼표로 구분 된 값 (- 영국, 프랑스)을 만들기 위해 내포합니다. 여러 선택 항목에 MySQL IN 절을 사용하고 있습니다.체크 박스 기반의 mysql 결과 필터링

가 나는 여러 국가 선택

if (isset($_POST['country_submit']) && $_POST['country'] != '') { 
    mysql_select_db($database_tub, $tub); 
    $query_trade = sprintf(" 
SELECT u.user_id, 
     u.contact_person, 
     u.company, 
     u.country, 
     u.pic_small, 
     u.website, 
     SUM(u.trader_or_bond = %s 
      AND t.user_id IS NOT NULL) AS count 
FROM users u 
LEFT JOIN trading t ON u.user_id = t.user_id 
WHERE u.trader_or_bond = %s AND u.country IN(%s) 
GROUP BY u.user_id 
ORDER BY COUNT(t.user_id) DESC", 
GetSQLValueString('trader', "text"), 
GetSQLValueString('trader', "text"), 
GetSQLValueString(implode(',', $_POST['country']), "text")); 
    $trade = mysql_query($query_trade, $tub) or die(mysql_error()); 
} 
+0

$ _POST [ 'country']는 (숫자가 아닌) 문자열입니까? 그렇다면'u.country IN (% s)'은'u.country IN (United Kingdom, France)'이 될 것이고 이것은 SQL의 오류입니다. 올바른 형식은'u.country IN ("United Kingdom", "France")'(이스케이프 처리됨)입니다. – Bobby

+0

$ Quotes = " '".implode와 같은 작은 따옴표로 둘러싼 국가에서 사용할 수 있습니다. " ','", $ _POST [ 'country']). " '"; GetSQLValueString 함수를 통과하지 못하도록 IN ($ SingleQuotes) 절에 직접 넣어야합니다. – Jeff

+0

빠른 예를 제공하면 어떤 의미인지 알 수 있습니까? – Jeff

답변

0

나는이 마련하지만, MySQL을 주입 플러스 내가 원하는만큼의 깨끗하지 않는 안전 확실하지 않은를 필터링 할 필요가있다.

if (isset($_POST['country_submit']) && $_POST['country'] != '') { 

$SingleQuotes = "'".implode("', '", array_map('mysql_real_escape_string', $_POST['country']))."'"; 
    mysql_select_db($database_tub, $tub); 
    $query_trade = sprintf(" 
SELECT u.user_id, 
     u.contact_person, 
     u.company, 
     u.country, 
     u.pic_small, 
     u.website, 
     SUM(u.trader_or_bond = %s 
      AND t.user_id IS NOT NULL) AS count 
FROM users u 
LEFT JOIN trading t ON u.user_id = t.user_id 
WHERE u.trader_or_bond = %s AND u.country IN($SingleQuotes) 
GROUP BY u.user_id 
ORDER BY COUNT(t.user_id) DESC", 
GetSQLValueString('trader', "text"), 
GetSQLValueString('trader', "text")); 
$trade = mysql_query($query_trade, $tub) or die(mysql_error()); 
} 
관련 문제