2017-01-27 3 views
1

안녕하세요, preg_match_all을 사용하여 양식을 검색하고 싶습니다. 왜 필요한가요? DB에 'id'와 'text'라는 두 개의 필드가 있습니다. ..a..., a..a.. 등등과 같은 규칙으로이 DB의 일부 텍스트를 검색해야합니다. PHP에서 프로그래밍을하는 많은 방법을 시도했기 때문에이 문제를 해결할 수 없습니다. 내가 해결하도록 도와주세요. 내 코드는 다음과 같습니다. 나는 '제목'이라는 입력 필드 하나와 버튼 하나가있는 HTML 양식을 가지고있다. a...a.. 어레이와 같이 입력란에 뭔가를 쓸 때 아래에 나와야합니다. 나는 단어를 DB에 저장 한 예를 들어 :preg_match_all 배열 PHP와 입력 양식

  1. 사과
  2. 살구
  3. 아보카도
  4. 바나나
  5. 블루 베리
  6. 블랙 베리

내가 좋아하는 마스크를 사용하여 검색 할 : ap..../결과는이어야합니다., apricots 또는 : .....berri.../결과 : blueberries, 대신 가져 오는 불필요한 결과 blackberries

 $infotext = $_GET['subject']; //this is string from input form 
     $query = "SELECT * FROM baza LIMIT 100"; 
     $result = mysqli_query($conn, $query); 
     while($row = mysqli_fetch_assoc($result)) 
     { 
      $search = preg_match_all("/$infotext/", $row['text']); } 
      mysqli_free_result($result); 

     print_r($search); 
+0

효과가 없습니까? 질문을 편집하고 'text'및 '$ infotext'의 예를 예상 결과와 함께 추가하십시오. – Toto

+0

좋은 코드를 편집했습니다. 그러나 첫 번째 질문은 "작동하지 않는 것은 무엇입니까?" 또한, 마스크에서 이러한 점들은 무엇입니까? 관련성이 있습니까? 각 도트는 문자를 의미합니까? 그렇다면'ap ....'는'apple' (1 점 추가)과 일치하지 않습니다. – Toto

답변

2

마스크의 점이 임의의 기호를 나타내는 경우 이미 정규식이 있습니다. 그래서 당신은 당신의 DB에서 검색하는 데 사용할 수 있습니다

"BAZA SELECT * FROM WHERE 텍스트 정규 표현식 '$ 정보 텍스트'LIMIT 100"이전에 언급 한 바와 같이 준비 사용자가 제공 한 문자열을해야 물론

.

+0

이 코드가 작동하도록 도와 주셔서 감사합니다. –

1

. 당신은 (.이 준비된 문을 사용하여 SQL 주입을 방지하기 위해 마십시오을 )

를 사용하여이 쿼리 또한

"SELECT * FROM baza WHERE text LIKE '%'.$infotext.'%' LIMIT 100". 

을 수행 할 수 있습니다 그리고 당신은 배열이 결과를 얻을 수 있습니다.

while($row = mysqli_fetch_assoc($result)) 
    { 
     $search[] = $row['text']; 
    } 
    mysqli_free_result($result); 

    print_r($search); 
+0

이것은 작동하지 않습니다. 전체 DB에서 텍스트 마스크를 사용하여 검색하고 싶습니다. –

+0

@HayrullaMelibayev 내 편집 된 답변을 확인하십시오. 당신은 당신이 원하는 결과를 얻고있다 또는 –

+0

이 방법은 내가 바라는 것이 아니다. LIKE가 마스크로 찾을 수없는 연산자를 마스크를 사용하여 검색하려고합니다. LIKE 연산자는 단어의 일부분을 결과로 표시 할 수 있지만 이렇게 검색하고 싶습니다. ** a..e .... ** 그리고 반드시 다음과 같아야합니다. append, appendix, –

0

이 문제는 해결되었습니다. 도와 줘서 고맙다. 특별히 @ andreys-scherbakov. 해결 된 코드는입니다.

$query = "SELECT * FROM baza WHERE text REGEXP '$infotext'"; 
    $result = mysqli_query($link, $query); 

    if ($result = mysqli_query($link, $query)) { 
     while ($row = mysqli_fetch_assoc($result)) { 
      print_r($row['text'].'<br/>'); 
     } 
     mysqli_free_result($result); 
    }