Suche in einer Text-DB

  • Suche in einer Text-DB

    Hallo Leute,

    ich habe mal wieder ein Problem! Ich möchte in einer Text-DB nach Vorkommen einer Zeichenkette suchen. Ich habe es bereits mit der Funktion similar_text versucht, was mir aber nicht das gewünschte Ergebnis liefert.

    Folgende Datensätze habe ich inmeiner DB:
    id1001;;Herr;;Max Mustermann;;abc@testinger.de;;2006_08_10;;Gesperrt;;
    id1002;;Frau;;Maxine Mustermine;;def@testinger.de;;2006_08_11;;Offen;;

    Nun soll nicht nur die genaue Übereinstimmung mit z.B. dem Namen geprüft werden sondern auch das vorkommen von z.B. mann im Datensatz Name.

    Hier mein Snippet:

    Quellcode

    1. <?php // Suche // ?>
    2. <form name="search" method="post" action="test.php">
    3. Suche:&nbsp;&nbsp;
    4. <input type="text" name="suche" style="width:200px; height:22px;" class="textfelder">
    5. <select name="suchspalte" class="textfelder" style="height:22px;">
    6. <option value="" selected></option>
    7. <option value="name">Name</option>
    8. <option value="email">Email-Adresse</option>
    9. </select>
    10. <input type="submit" name="Submit" value="Suchen" class="sendbutton">
    11. </form>
    12. <table width="100%" border="0" cellpadding="2" cellspacing="2">
    13. <?php
    14. $db_unregistrierte_emails = file("test.txt");
    15. while (list ($line_num, $line) = each ($db_unregistrierte_emails))
    16. {
    17. $datenex[$line_num] = explode(";;",$line);
    18. $daten['user_id'][$line_num] = $datenex[$line_num]['0'];
    19. $daten['suffix'][$line_num] = $datenex[$line_num]['1'];
    20. $daten['name'][$line_num] = $datenex[$line_num]['2'];
    21. $daten['email'][$line_num] = $datenex[$line_num]['3'];
    22. $daten['datum'][$line_num] = $datenex[$line_num]['4'];
    23. $daten['status'][$line_num] = $datenex[$line_num]['5'];
    24. }
    25. while(list($key,$value) = each($daten['email']))
    26. {
    27. $suche = strtoupper(trim($suche));
    28. $spalte = strtoupper(trim($daten[$suchspalte][$key]));
    29. similar_text($suche,$spalte,$prozent);
    30. if ($spalte == $suche || $prozent > 30)
    31. {
    32. ?>
    33. <tr>
    34. <td>&nbsp;<?php echo $daten['user_id'][$key]; ?></td>
    35. <td>&nbsp;<?php echo $daten['suffix'][$key]; ?></td>
    36. <td>&nbsp;<?php echo $daten['name'][$key]; ?></td>
    37. <td>&nbsp;<?php echo $daten['email'][$key]; ?></td>
    38. <td>&nbsp;<?php echo $daten['datum'][$key]; ?></td>
    39. <td>&nbsp;<?php echo $daten['status'][$key]; ?></td>
    40. </tr>
    41. <?php
    42. }
    43. }
    44. ?>
    45. </table>
    Alles anzeigen


    Das kann doch eigentlich nicht so das Problem sein!? :oops: Aber ich komme einfach nicht drauf. Könnt ihr mir helfen?

    Gruß KMD
  • hm.. also wenn es spaltenabhängig sein soll, dann würd ich mir vermutlich ne eigene funktion schreiben
    spalte durchlaufen und mit [phpdoc]stripos[/phpdoc] prüfen geht ja ganz flott
    stripos beachtet auch groß- und kleinschreibung

    was auch möglich ist:
    implode() => spaltenarray zu string
    substr_count() => zählt vorkommen eines wortes im string

    wenn dann aber einer "mannmann" heißt und du suchst nach mann hat derjenige schon 2 treffer
  • "KMD" schrieb:

    Gruß KMD
    PHP anfänger! :oops:

    Wir haben alle mal klein Angefangen und mussten lernen...auch wir haben andere foren mit unseren kikifax problemen belästigt :D

    "KMD" schrieb:

    Nach langem googlen binn ich auf eregi gestosen.

    Deine Eigeninitiative finde ich gut...ich denke, du wirst bald ein richtiger PHP-Coder :D
    Lerne nicht Programmiersprachen, lerne Programmieren...

    :D Alles andere ist Syntax :D

    [Blockierte Grafik: http://www.xing.com/img/buttons/10_en_btn.gif]
  • @eLKane,

    es freut mich, endlich mal ein Forum gefunden zu haben, bei dem die mitglider nicht erwarten dass man als Coder gebohren wird 8)

    Weiter So! :D

    Leider habe ich schon das nächste Problem.

    Für die Suche der Zeichenketten habe ich die eregi-Funktion benutzt und nicht die von dOnUt vorgeschlagene stripos (@dOnUt Bitte nicht übel nehmen, aber die stripos-Funktion hat mir ein Script-Fehler ausgegeben). Aber nun zu meinem eigentlichen Problem.
    Ich habe einen Datensatz mit Inhalt "Max Mustermann", wenn ich aber nach "Mustermann Max" oder "Muster Max" suche wird dieser Datensatz nicht gefunden. Wie kann ich das beheben? Ist das viel Action?

    Gruß KMD
  • ohh.. stripos gibts erst seit PHP Version 5
    hier ein code, der nach deinen wünschen arbeiten sollte

    Quellcode

    1. <?php
    2. $string = "asjdh asd asdakshd jaksd kasjdh asdkasdas mustera mann asdasd asd";
    3. $search = "muster mann";
    4. //stripos gibts erst seit PHP5... aus kompatiblitätsgründen, arbeite also nur mit kleinbuchstaben
    5. $string = strtolower($string);
    6. $search = strtolower($search);
    7. //Prüfe das Original (muster mann) und setze true(gefunden) oder false(nicht gefunden)
    8. $abfrage = strpos($string, $search) === false ? false : true;
    9. //Noch wurde die Zeile nicht als Treffer markiert, also suche nach weiteren Infos
    10. //Kann ich nach weiteren Infos suchen? Existieren mehrere Wörter
    11. if($abfrage == false && strpos($search, ' ')) {
    12. //Wir erstellen ein Array (0=>muster, 1=>mann)
    13. $split = explode(' ', $search);
    14. //In dieser Schleife müssen alle Bedingungen zutreffen
    15. foreach($split as $search) {
    16. //1. suche muster
    17. //2. suche mann
    18. //beide bedinungen müssen stmmen
    19. $abfrage = strpos($string, $search) === false ? false : true;
    20. if($abfrage == false)
    21. break; //Wird eine Bedingung nicht erfüllt, dann breche ab
    22. }
    23. }
    24. if($abfrage)
    25. echo 'gefunden';
    26. else
    27. echo 'nicht gefunden';
    28. ?>
    Alles anzeigen