[PHP] eigene Function funktioniert nicht

.holger

Lounge-Member
Moin moin,

ich arbeite gerade an einer Seite für eine Band. Diese bekommt ein kleines Handgeschriebenes CMS von mir. u.a. werden so eine Art BB Codes verwendet, dass die Bandmitglieder und auch die Besucher (im Gästebuch etc.) ihre Texte formatieren können.

Um jetzt nicht überall den Code für die Datenbankabfrage wo die Smilies die ersetzt werden und auch die anderen Codes schreiben zu müssen habe ich die in eine extra Datei geschrieben und binde diese ziemlich weit vorne in der index.php (in die der ganze Content includet wird) ein.

in der functions.php stehen u.a. diese beiden functions:
PHP:
function html_links($text) { 
$text = 
preg_replace('"(((f|ht){1}tp://)[a-z0-9-.] [.]{1}[a-z]{1,6}[-a-z0-9@:%_$.! *, .~#;?&//=]*)"i', '<a href="$1">$1</a>', $text); 
$text = 
preg_replace('"([snr>]{1}|^)((www.)[a-z0-9-]{1,255}[.]{1}[a-z]{1,6}[-a-z0 -9@:%_$.!*, .~#;?&//=] )"i', '$1<a href="http://$2">$2</a>', $text); 
$text = 
preg_replace('"(([snr>]){1}|mailto:|^)(([-a-z0-9@:%_$.!*, 
; .~#;?&//=] )@([a-z0-9-.] [.]{1}[a-z]{1,6}))"i', '$2<a href="mailto:$3">$3</a>', $text); 
$text = 
preg_replace('"(((f|ht){1}tp://)([0-9]{1,3}([./sn]|$){1}){4}[ 
-a-z0-9@:%_$ 
.!*, .~#;?&//=]*)"i', '<a href="$1">$1</a>', $text); return ($text); 
} 

function smilie($text){
	
	$smiliecodes = mysql_query("SELECT * FROM $smilies ORDER BY id DESC");
	$text = ereg_replace("\n","<br />",$text);
	while ($codes = mysql_fetch_row($smiliecodes))
	{
	$text = ereg_replace("$codes[2]","<img src='$codes[1]' />",$text);
	}
	return $text;
	
}
(die Variable "$smilies" wird vorher definiert und beinhaltet den Name der Tabelle. Auch die Anbindung an die Datenbank erfolgt schon vorher)

jetzt benutze ich bei der Ausgabe bevor ich mit "echo $text;" den ganzen Kram ausgebe folgendes:

$text = html_links($text);
$text = smilie($text);

Die functions werden einfach nicht ausgeführt, was mach ich nur falsch?
 
die variable $smilies ist demnach also global? dann müsstest du sie in der funktion auch global deklarieren...
ich habe deine funktion gleich noch auf den ressourcenverbrauch hin optimiert:
PHP:
function smilie($text){
    global $smilies;
    $text = nl2br($text);
    $smiliecodes = mysql_query("SELECT * FROM ".$smilies." ORDER BY id DESC");
    while ($codes = mysql_fetch_row($smiliecodes))
    {
        $text = str_replace($codes[2], "<img src='".$codes[1]."' />", $text);
    }
    return $text;
}
 
Zuletzt bearbeitet:
Habs nur kurz überflogen, aber grundsätzlich sollten die Funktionen ausgeführt werden. Ein paar Dinge würd ich jedenfalls ändern, wie preg statt ereg, da schneller, uswusf.
 
Es wäre außerdem sinnvoller den smilie code schon beim eintragen in den entsprechenden HTML-Code umzuwandeln, die Anzeige wird sicherlich um vieles häufiger aufgerufen als das CMS. Bedeutet allerdings das du auch ne Funktion brauchst die den HTML-Code zurück in den BBCode umwandelt (wenn es eine edit funktion für die Einträge gibt.

Das ändert allerdings nichts an deinen Problem. Werden die Funktionen garnicht aufgerufen (einfach als erstes Statement mal nen echo machen)? Oder wo passiert der Fehler (nach jeder Zeile nen echo und gucken wie weit er kommt)?

[edit] zu spät :/ [/edit]
 
Zurück
Oben