Seite 1 von 2

Suche nach Beiträgen von Usern mit Namen mit einem Buchstabe

Verfasst: 25.01.2006 14:26
von honk_alert
Die Suche ergibt dann keine Ergebnisse, obwohl die Leute natürlich auch was geschrieben haben...

mfg
honk

Verfasst: 03.02.2006 17:06
von honk_alert
hallo? :-?

Verfasst: 03.02.2006 22:31
von honk_alert
weiß hier denn gar keiner was dazu?

Verfasst: 03.02.2006 22:36
von hagily
Hi!
Beachten
Folgende Tabellen bei dir weden leer sein:
_search_results
_search_wordlist
_search_wordmatch

Deshalb installierst du diesen mod:
http://phpbbhacks.com/download/434

Der stellt diese Tabellen wieder her.
Felix

Verfasst: 03.02.2006 22:38
von honk_alert
Kann man diese Tabellen auch in phpmyadmin auffüllen? Und was hat das mit meinem Problem zu tun?

Im übrigen sind die nicht leer...hab grad nachgeschaut...

Verfasst: 03.02.2006 22:57
von cYbercOsmOnauT
Das Problem ist wegen folgender Zeilen im search.php (Normal Zeilen 200-203)

Code: Alles auswählen

				if (preg_match('#^[\*%]+$#', trim($search_author)) || preg_match('#^[^\*]{1,2}$#', str_replace(array('*', '%'), '', trim($search_author))))
				{
					$search_author = '';
				}
Der zweite Teil dieser If-Abfrage prüft, ob die Eingabe des Usernamens 1 oder 2 Zeichen hat, wenn ja, wird der Username (ohne * gezählt) auf '' (also nichts) gesetzt. Dies dient wohl dazu das man z.B. durch eine Suche nach *e* als Usernamen die Performance des Boards in die Knie zwingt weil "unendlich viele" Results herauskommen.

Gruß,
Tekin

Verfasst: 03.02.2006 23:06
von honk_alert
danke für die antwort! wie muss ich das jetzt modifizieren und viel wichtiger, würdest du sagen, dass ich es modifizieren sollte? Wenn nicht, kann ich dann Usernamen mit 1-2 Buchstaben deaktivieren irgendwo?

Verfasst: 04.02.2006 00:00
von cYbercOsmOnauT
Wieviele User mit solchen superkurzen Nicks hast Du denn? Wenn es nur einige sind, ändere ihren Nick zu längeren und schreib ihnen eine EMail.

Im includes/functions_validate.php führe folgende Änderung durch:

SUCHE NACH

Code: Alles auswählen

$username = phpbb_clean_username($username);
DARUNTER FÜGE EIN

Code: Alles auswählen

if ( strlen($username) < 3 )
{
    return array('error' => true, 'error_msg' => $lang['Username_disallowed']);
}
Wenn nun einer einen Usernamen registrieren will, der weniger als 3 Zeichen beinhaltet, bekommt er die Fehlermeldung, dass dieser Username verboten ist.

Grüße,
Tekin

Einen kleinen Hinweis kann ich mir nicht verkneifen (man möge mir verzeihen):

Die Suche nach Usernamen hat nichts mit den Tabellen phpbb_search_results phpbb_search_wordlist phpbb_search_wordmatch zu tun. Den Beweis kann jeder sehen, der sich die search.php einmal ansieht.

Zuerst

Code: Alles auswählen

				$sql = "SELECT user_id
					FROM " . USERS_TABLE . "
					WHERE username LIKE '" . str_replace("\'", "''", $search_author) . "'";
Womit man die user_id's sammelt, die zu dem gesuchten Usernamen (mit Wildcards) passen.
Dann

Code: Alles auswählen

				$sql = "SELECT post_id 
					FROM " . POSTS_TABLE . " 
					WHERE poster_id IN ($matching_userids)";
die Posting_id der Postings die zu den gefundenen user_id's (also Usern) gehören. Am Ende liest das Script "nur noch" entweder die Topic-Titel oder halt einen Teil des Postingtextes aus der DB und gibt diesen aus.

Finito

Verfasst: 04.02.2006 00:10
von honk_alert
Ok,

das ist die eine Möglichkeit - aber wie kann ich die Suche auch für Leute mit einem Benutzernamen zulassen? Wo muss ich dann was ändern? Danke schon mal für deine Mühe!

Verfasst: 04.02.2006 00:15
von cYbercOsmOnauT
Wieviele User mit so kurzen Nicks hast Du denn?

ÄNDERE

Code: Alles auswählen

            if (preg_match('#^[\*%]+$#', trim($search_author)) || preg_match('#^[^\*]{1,2}$#', str_replace(array('*', '%'), '', trim($search_author)))) 
einfach in

Code: Alles auswählen

            if (preg_match('#^[\*%]+$#', trim($search_author)))
Ob Du Dir (und Deinem Board) damit einen Gefallen tust, wage ich zu bezweifeln.

Tekin