2011-02-16 2 views
0

나는 그 사이에 공백이있는 태그 이름을 사용하는 입력을 가지고있다. 그런 다음 배열로 분해하고 태그 당 한 번 배열을 반복합니다. 태그가 없으면 내 태그 테이블에 추가하고 다시 coupon_tags 테이블에 추가합니다. 존재하는 경우, coupon_tags 테이블 만. 한 번에 하나의 태그를 처리 할 때 내 코드가 작동했지만 다중 태그 처리를 사용하면 코드가 손상되었습니다. 태그의 존재 여부와 상관없이, 내 코드는 항상 존재한다고 말하고, 이는 태그를 포함하는 행의 양에 대해 0이 아닌 결과를 보게된다는 것을 의미합니다.MySQL 테이블에서 문자열 존재 여부 확인

아마 내가 가지고있는 tagName을 포함하는 모든 행을 선택한 다음 행의 수가 1인지 0인지를보기보다는 MySQL 테이블에서 무언가가 존재하는지 테스트하는 쉬운 방법이 있습니다.)?

$splitTags = explode(" ", $tag); 

foreach($splitTags as $i){ 
    echo $splitTags[$i] . "<br/>"; 
    $resTags = mysql_num_rows(mysql_query("SELECT * FROM tags WHERE tagName = '$splitTags[$i]'")); 
//if tag doesn't already exist, create it. either way, append this coupon's id to the list id's related to this tag and add a space 
    if($resTags > 0) 
    { 
     $tagQueRes = mysql_query("SELECT tagID FROM tags WHERE tagName = '$splitTags[$i]'"); 
     $row = mysql_fetch_assoc($tagQueRes); 
     $tagID = $row["tagID"]; 
     echo "Tag Exists" . "<br/>"; 
    } 
    else 
    { 
     $tagID = mysql_num_rows(mysql_query("SELECT * FROM tags")) + 1; 
      mysql_query("INSERT INTO tags (tagName, tagID) VALUES ('$splitTags[$i]','$tagID')"); 
     echo "New Tag Added" . "<br/>"; 
    } 
    mysql_query("INSERT INTO coupon_tags (tagID, couponID) VALUES ('$tagID', '$newID')"); 
} 
+0

당신은 순간에 SQL 인젝션에 취약있어에 발생하기 쉬운 수 있습니다. 그냥 참고하시기 바랍니다. – clifgriffin

답변

1
$splitTags = explode(" ", $tag); 
foreach ($splitTags as $key=>$val) 
{ 
    // replace $splitTags[$i] with $val 
    ... 
} 
0
$splitTags = explode(" ", $tag); 

은 ... 배열을 반환

나는 다음과 같은 코드가 있습니다.

foreach($splitTags as $i){ 

이 줄은 배열의 각 항목을 시작합니다.

이렇게하면 $splitTags[$i]이 잘못되었습니다. 참조 번호는 $i입니다.

P. 주사에 대비하여 자신을 보호하기 위해 이것을 확인하십시오. http://php.net/manual/en/function.mysql-real-escape-string.php

0

더미 값을 선택한 다음 행이 다시 있는지 여부를 확인하여 총 행 수를 계산할 필요가 없는지 확인하십시오. 예 :

$ res = mysql_query (SELECT 1 FROM tags where tagName = 'sometag'); (mysql_num_rows도 ($ 입술) == 0) {//이 삽입 .. 또한

를 할 경우 입력은 사용자로부터 오는 경우 다음, 당신이 당신의 WHERE 절 입력

을 탈출하기

$ res = mysql_query ("SELECT 1 FROM tags where tagName = '". mysql_real_escape_string ($ tags [i]). "'"));

그렇지 않으면 당신은 SQL 주입 공격

관련 문제