2017-01-27 2 views
1

Hallo Ich möchte Formular mit preg_match_all suchen. Warum es benötigt? Ich habe DB, die zwei Felder 'ID' und 'Text' hat. Ich muss einen Text aus dieser Datenbank mit Regeln wie ..a..., usw. suchen. Ich habe versucht, so viele Möglichkeiten, ich bin ein Newby auf PHP und Programmierung, deshalb kann ich dieses Problem nicht lösen. Bitte hilf mir, es zu lösen. Mein Code ist unten. Ich habe HTML-Formular, das ein Eingabefeld namens 'Betreff' und eine Schaltfläche hat. Wenn ich etwas in Eingabefeld wie a...a.. Array schrieb, muss unten gezeigt werden. Zum Beispiel habe ich Worte bei der DB gespeichert:preg_match_all von Array PHP und Eingabeformular

  1. Apfel
  2. Aprikosen
  3. Avocado
  4. Bananen
  5. Heidelbeeren
  6. Brombeeren

Ich möchte wie mit Maske suchen : ap..../Ergebnis muss sein: apple, apricots Oder: .....berri.../Ergebnis: 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

Was funktioniert nicht? Bitte bearbeiten Sie Ihre Frage und fügen Sie einige Beispiele von 'text' und' $ infotext' mit erwarteten Ergebnissen hinzu. – Toto

+0

Sie haben den Code bearbeitet, gut. Aber die erste Frage ist: "Was funktioniert nicht?" Was sind diese Punkte in der Maske, woher kommen sie? Sind sie relevant? Steht jeder Punkt für einen Charakter? Wenn dies der Fall ist, passt "ap ...." nicht zu "apple" (Ein zusätzlicher Punkt). – Toto

Antwort

2

Wenn ein Punkt in einer Maske für ein beliebiges Symbol steht, haben Sie bereits einen regulären Ausdruck in der Hand. So können Sie verwenden sie in Ihrem DB suchen:

"SELECT * FROM baza WHERE Text REGEXP '$ Hilfetext' LIMIT 100"

Natürlich sollten Sie vorbereitet Benutzer zur Verfügung gestellt Strings haben wie zuvor erwähnt.

+0

Danke, dass Sie diesen Code unterstützt haben –

1

Statt Abrufen unnötiger Ergebnisse. Sie können diese mit Hilfe von Abfrage tun auch

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

(Diese Mitteilung Prepared Statements von SQL-Injection zu verhindern.)

Und dann können Sie dieses Ergebnis in einem Array erhalten.

+0

Dies funktioniert nicht. Ich möchte mit der Textmaske aus der ganzen DB suchen. –

+0

@HayrullaMelibayev überprüfen Sie meine bearbeitete Antwort. Sie erhalten Ihr gewünschtes Ergebnis oder nicht –

+0

dieser Weg ist nicht das, was ich suche. Ich möchte mit Maske den Operator LIKE kann nicht mit Maske suchen. LIKE Operator kann Ergebnis ein Teil der Wörter geben, aber ich möchte so suchen ** a..e .... ** Und resul muss sein: append, Anhang –

0

Dieses Problem ist gelöst. Danke für alle, die mir geholfen haben. Besonders @ andreys-scherbakov. Der gelöste Code ist.

$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); 
    }