Helpdesk
Menschen Wissenschaft Politik Mystery Kriminalfälle Spiritualität Verschwörungen Technologie Ufologie Natur Umfragen Unterhaltung
weitere Rubriken
PhilosophieTräumeOrteEsoterikLiteraturAstronomieHelpdeskGruppenGamingFilmeMusikClashVerbesserungenAllmysteryEnglish
Diskussions-Übersichten
BesuchtTeilgenommenAlleNeueGeschlossenLesenswertSchlüsselwörter
Schiebe oft benutzte Tabs in die Navigationsleiste (zurücksetzen).

PHP custom site search programmieren

65 Beiträge ▪ Schlüsselwörter: PHP, Preg_replace, Search ▪ Abonnieren: Feed E-Mail

PHP custom site search programmieren

05.08.2012 um 15:35
@AnGSt Also nehmen wir mal an dein Platzhalter besteht aus "%bezeichnung%".
Du ersetzt erstmal alle "%" im String durch "[PROZENT]" und dann dein Key im String durch "%Key%".

Und umgekehrt gehst du die Umwandlung dann wieder rückwärts durch. Also erstmal "%Key%" durch Key und anschließend "[PROZENT]" durch "%".

So kann es nicht passieren, dass etwas verfälscht wird, weil die %-Zeichen dann nur noch bei deinen Platzhaltern direkt existent sind. Ausserdem ist es durch das beginnen und beenden durch das %-Zeichen klar eingegrenzt.

Anzeige
melden

PHP custom site search programmieren

05.08.2012 um 16:09
Ist jetzt eher unschön geschrieben, aber so funktionierts etwa :D
<?php // charset=utf-8 header('Content-Type: text/html; charset=utf-8'); $string = "text 100% text match1 text match2 text mat%ch3 text hackversuch: %match1% [PROZENT]match1[PROZENT] text"; $array = array("match1", "match2", "mat%ch3"); echo "Input: ".$string." "; $string = encode($string, $array); echo "Encoded: ".$string." "; $string = decode($string); echo "Decoded: ".$string." "; function encode ($string, $array) { $string = str_replace("[PROZENT]", "%", $string); // anti-hack & debug $string = str_replace("%", "[PROZENT]", $string); foreach ($array as $key) { $key = str_replace("[PROZENT]", "%", $key); // anti-hack & debug $key = str_replace("%", "[PROZENT]", $key); $string = preg_replace('#('.$key.')#i', '%$0%', $string); } return $string; } function decode ($string) { $string = str_replace("%", "", $string); $string = str_replace("[PROZENT]", "%", $string); return $string; } ?>


melden

PHP custom site search programmieren

05.08.2012 um 16:17
Ok, das Key-Debugging funktioniert so nicht, hab aber jetzt keine Zeit mehr.
Hoffe konnte das Prinzip rüber bringen...


melden
AnGSt Diskussionsleiter
ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

PHP custom site search programmieren

05.08.2012 um 17:22
Wo ist da der Unterschied zu der von alliswrong vorgeschlagenen Methode, bzw zu der die ich derweil mache?


melden
AnGSt Diskussionsleiter
ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

PHP custom site search programmieren

06.08.2012 um 19:26
Folgende Routine soll zwecks search suggestions die partiell passenden populären Eingaben vorne an ein array dran bauen und wenn aber der eintrag im array schon existiert, dann soll er ihn nach vorne verschieben. Es geht natürlich nicht:

if (file_exists("popularquerys.txt")) { $popular = json_decode(file_get_contents("popularquerys.txt")); if (!isset($matches)) $matches = array(); foreach ($popular as $item => $count) { if (ereg("^$input", $item) && $input != $item) { $i = array_search($item,$matches); if ($i != false) { unset($matches[$i]); $matches = array_values($matches); } $temp = array($item); $matches = $temp + $matches; } } }

Es wird nur der erste Eintrag aus dem json Datenfile berücksichtigt. Der zweite, obwohl mit den selben Zeichen beginnend, wird nicht in die matches auf genommen:

{"sephirah":3,"sephiroth":2,"andreas":1,"testament":1}

Wer weiß die Lösung?


melden
AnGSt Diskussionsleiter
ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

PHP custom site search programmieren

06.08.2012 um 22:55
@acc

Hast Du da ne Idee? (siehe oben) Ich habe schon das json_decode um den parameter "true" ergänzt, damit als array dekodiert wird, aber es hat nichts gebracht, ausser dass nun nimmer der erste match allein genommen wird sondern der letzte.


melden

PHP custom site search programmieren

06.08.2012 um 23:04
@AnGSt Ich versteh grad nicht was du da vor hast :D

Und wegen meiner Platzhalter-Methode: Es kann nicht passieren, dass sich ein % einschmuggelt, weil im untersuchenden Bereich es Scripts keine mehr drin sind, ausser die von den Platzhalter verwendeten.


melden
AnGSt Diskussionsleiter
ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

PHP custom site search programmieren

06.08.2012 um 23:10
@acc

Ok, ich versuche es zu erklären: eine json Reihe mit den häufigsten sucheingaben, so wie das Beispiel mit den geschweiften Klammern oben, soll als Array namens $popular eingelesen werden. Dann gibt es ein zweites Array namens $matches, das schon ein paar Elemente (vorgeschlagene Suchbegriffe) enthält. Es soll nun an den Anfang des $matches Arrays jeder Eintrag aus dem $popular Array gefügt werden, der zum string $input passt. Jetzt klar?


melden

PHP custom site search programmieren

06.08.2012 um 23:14
@AnGSt

Ah, ok. Aber das ist so wirklich umständlich. Ich würd dir vorschlagen da lieber mit MySQL zu arbeiten.


melden
AnGSt Diskussionsleiter
ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

PHP custom site search programmieren

06.08.2012 um 23:17
@acc

Urks, wegen einem simplen Autocomplete, dass sich auch nur auf meine eigene Website bezieht, werde ich kein mysql anwerfen. Für dich ist das einfacher, für mich nicht. Zudem auch die Suchbegriffe keine weiteren Informationen beinhalten als bloß deren rang oder häufigkeit. Thats all.


melden

PHP custom site search programmieren

06.08.2012 um 23:26
@AnGSt

Schon, aber es ist weitaus leichter handhabbar und wesentlich schneller als das Lesen und Schreiben von Textdateien. Zudem kannst du dir dann auch sehr einfach ein Gästebuch oder dergleichen schreiben. Wenn man sich mal mit SQL auseinandergesetzt hat ist das gar nicht so schwer. JSON würd ich nur für die Client-Server-Kommunikation von Java bzw JavaScript-Applikationen empfehlen, wegen der relativ umständlichen Konvertiererei.

Und ein Autocompleeter hat eigentlich auch nichts im PHP-Script verloren, sondern gehört in eine JavaScript-Funktion. Dazu nimmt man sich dann am Besten jQuery, um sich eine eigene Ajax-Funktion zu sparen. Damit geht das sehr komfortabel.

http://api.jquery.com/jQuery.getJSON/


melden
AnGSt Diskussionsleiter
ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

PHP custom site search programmieren

06.08.2012 um 23:31
jQuery ist cool, ich habe heute meinen Autocompleter als Plugin implementiert. Das PHP macht nichts anderes als nur auf der Serverseite die Begriffe raus zu suchen. Freilich könnte man das durch sql erseztzen, aber wie gesagt. Für ein Gästebuch würde ich schon mysql anwerfen. GB ist schon was anderes, mit mehr möglichkeiten. Ich habe schon mysql programmiert. Im Moment gehts mir wirklich blos um diese doofe php routine. :|

@acc


melden

PHP custom site search programmieren

06.08.2012 um 23:38
@AnGSt

Hm, ok, aber zum genauen analysieren und testen habe ich jetzt gerade keinen Kopf mehr, sorry. So auf Anhieb hätte ich nur noch eine kleine Anmerkung: die Funktion ereg() ist veraltet und langsamer als preg_match()
Warnung

Diese Funktion ist seit PHP 5.3.0 DEPRECATED (veraltet). Sich auf diese Funktion zu verlassen ist in keiner Weise empfehlenswert.



melden
AnGSt Diskussionsleiter
ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

PHP custom site search programmieren

07.08.2012 um 00:02
@acc

hab's ersetzt. das war's natürlich nicht: ;)


melden
AnGSt Diskussionsleiter
ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

PHP custom site search programmieren

07.08.2012 um 08:46
nachdem dieses hier:

if (file_exists("popularquerys.txt")) { $popular = json_decode(file_get_contents("popularquerys.txt"), true); foreach ($popular as $item => $count) { if (preg_match($pattern, $item) && $input != $item) { $i = array_search($item,$matches); if ($i !== false) array_splice($matches,$i,1); $temp = array($item); array_push($temp, $matches); $matches = $temp; } } }

auch nicht ging, habe ich entnervt mein ganzes programm umgestellt und brauche diese routine nimmer in der form.


melden
---- ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

PHP custom site search programmieren

08.10.2012 um 18:41
@AnGSt

Wie wärs mit SQLite?


melden
AnGSt Diskussionsleiter
ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

PHP custom site search programmieren

08.10.2012 um 20:05
Ich weiss nicht was das ist. Mein Webspace Provider unterstützt nur mysql glaub ich. Das thema hier ist auch schon alt und die Lösung überflüssig geworden.

@----


melden
---- ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

PHP custom site search programmieren

08.10.2012 um 20:06
Die Datenbank bei SQLite besteht aus einer einfachen Datei.


melden
AnGSt Diskussionsleiter
ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

PHP custom site search programmieren

08.10.2012 um 22:49
@----

ist das langsamer oder schneller? ;)


melden
---- ehemaliges Mitglied

Link kopieren
Lesezeichen setzen

PHP custom site search programmieren

08.10.2012 um 22:56
Keine Ahnung. Habs nie genutzt. Wollte es nur als Alternative nennen wenn dir eine MySQL DB übertrieben scheint.

Gemäß der Grafik hier schneidet SQLite recht schlecht ab was Geschwindigkeit angeht. Ist allerdings kaum überraschend.

image721


Anzeige

melden