2010-08-09 7 views
0

좋아요. 사용자가 게시물에 태그를 추가 할 때부터 사용자가 다음 예제와 같이 입력 할 때부터 html을 제거하기 위해 strip_tags을 사용하고 있습니다.PHP 및 MySQL 문제

나는 데이터베이스에 입력 된 5 개의 빈 값을 얻었는데, 나는 그 밖의 모든 것이 좋기를 원하지 않는다. 어떻게 내가 이걸 막을 수 있니?

,,,,,,,, ,, ,,,,a,d, <html> , ruby-on-rails , ad, <html>

은 내가 쉼표가 데이터베이스에 입력되지 않은 데이터베이스 주에 입력 한 다음 얻을.

, , , a, d, , ruby-on-rails, ad, 

여기 내 코드입니다.

$tags = preg_split('/,/', strip_tags($_POST['tag']), -1, PREG_SPLIT_NO_EMPTY); 
$tags = array_map('trim', $tags); 
$tags = str_replace(' ', '-', $tags); 

는 단지 다음은 데이터베이스에 입력해야합니다.

a,d,ruby-on-rails,ad 

다음은 제 삽입 예입니다.

for ($x = 0; $x < count($tags); $x++){ 
    $query1 = "INSERT INTO tags (tag) VALUES ('" . mysqli_real_escape_string($mysqli, strtolower($tags[$x])) . "')"; 
} 
+1

데이터베이스에 무엇을 기대합니까? –

+0

@Peter Bailey 그냥 'a, d, ruby-on-rails, 광고'는 데이터베이스에 입력해야합니다. – myTIME

+0

INSERT 문을 게시하십시오. – Joseph

답변

0

문자열을 데이터베이스에 삽입하기 전에 문자열이 비어 있는지 확인하지 않는 이유는 무엇입니까?

for ($x = 0; $x < count($tags); $x++){ 
    if ($tags[$x] != '') { 
     $query1 = "INSERT INTO tags (tag) VALUES ('" . mysqli_real_escape_string($mysqli, strtolower($tags[$x])) . "')"; 
    } 
} 
1

값이 empty()인지 확인해야합니다. 그렇다면 데이터베이스 삽입 쿼리에서 해당 쿼리를 생략하거나 "null"로 표시하십시오.

데이터베이스 테이블 디자인이나 데이터베이스를 처리해야하는 코드를 보지 않고도 우리가 더 효과적으로 당신을 도울 수 있다고 말하기는 어렵습니다.

$tags = array_filter($tags, function ($v) { return !empty($v);}); 

for ($x = 0; $x < count($tags); $x++){ 
    $query1 = "INSERT INTO tags (tag) VALUES ('" . mysqli_real_escape_string($mysqli, strtolower($tags[$x])) . "')"; 
} 

배열에서 빈 값을 제거해야 : 여기에 INSERT 쿼리에서 새 정보로 업데이트

, 당신은 빈 (검증되지 않은 출원 중 구문 오류)를 적용 할 방법입니다 , 나는 단순한 실수를 저 지르지 않았다.

편집

여기에 하나를 할 수있는 옵션이 있지만 참이다. 이미 루프를 사용하고 있으므로 루프 내부에 if를 추가하면됩니다. array_filter를 사용하면 배열에서 빈 값을 제거해야합니다.

함수 정의를 이동했습니다. 위가 효과가있다.

+0

내 코드에 어떻게 추가할까요? – myTIME

+0

나는 그 (것)들을 데이타베이스로 전혀 입력하게 싶지 않다. – myTIME

+0

DB 스키마에 따라 이것이 불가능할 수도 있습니다. 게시하는 경우 귀하의 상황에 대해 가능할 수 있는지 알려줄 수 있습니다. 일반적인 데이터베이스 설계 (정상적인 경우)가 주어지면 DB에 입력해야합니다. 그러나 다시 한번, 구조를 보지 않고서는 이것을 말하는 것이 불가능합니다. –

0

나는 당신이 쪼갠 것을 돋보이게해야한다고 생각합니다. 이 쿼리에 관해서

아마 그런 다음 더이

$input = ",,,,,,,, ,, ,,,,a,d, <html> , ruby-on-rails , ad, <html>"; 

$tags = preg_split("/(?:\s*,\s*)+/", trim(strip_tags($input), ', ')); 
$tags = array_map('mysqli_real_escape_string', str_replace(' ', '-', $tags)); 

처럼 뭔가를 할 것, MySQL의의 여러 삽입 구문

$query1 = "INSERT INTO tags (tag) VALUES ('" . implode("'),('", $tags) . "');"; 

을 활용하지만 당신은 조사 할 수 있습니다 duplicate insert handling.