2017-01-27 6 views
1

こんにちは、preg_match_allを使ってフォームを検索したいと思います。 なぜ必要なのですか? 私は2つのフィールド 'id'と 'text'を持つDBを持っています。私は..a...a..a..などのようなルールでこのDBからテキストを検索する必要があります。 私はこの問題を解決できないので、私はPHPとプログラミングで多くの方法を試しました。私がそれを解決するのを助けてください。 私のコードは以下の通りです。 私はHTMLフォームを持っています。これは、「件名」という名前の入力フィールドとボタンが1つあります。 a...a..のような入力フィールドに何かを書いたとき、以下のように表示する必要があります。私は言葉DBに保存されている例 :preg_match_all from array phpと入力フォーム

  1. リンゴ
  2. アプリコット
  3. アボカド
  4. バナナ
  5. ブルーベリー
  6. ブラックベリー

は、私のようなマスクを使用して検索します:ap.... /結果:appleapricots または:.....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テキストREGEXP 『$情報テキスト』 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 .... ** そして、resulは以下のようにする必要があります: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); 
    }