Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „BBCodes werden nur beim ersten durchlauf ersetzt“

Stelo

Noch nicht viel geschrieben

Heyho,

ich arbeite gerade an einem kleinen Forum
Aus einem Tut hab ich folgendem Code um die BBCodes zu ersetzen:
PHP:
<?php

$text = preg_replace("/\[B\](.*)\[\/B\]/Usi", "<b>\\1</b>", $text);
$text = preg_replace("/\[I\](.*)\[\/I\]/Usi", "<i>\\1</i>", $text);
$text = preg_replace("/\[U\](.*)\[\/U\]/Usi", "<u>\\1</u>", $text);
$text = preg_replace("/\[COLOR=(.*)\](.*)\[\/COLOR\]/Usi", "<font color=\"\\1\">\\2</font>", $text);

$text = preg_replace_callback("/\[URL=(.*)\](.*)\[\/URL\]/Usi", 'linkLenght', $text);
$text = preg_replace_callback('#(( |^)(((ftp|http|https|)://)|www.)\S+)#mi', 'linkLenght', $text);


// Prüft die Linklänge und passt sie gegebenenfalls an
    // wird für preg_replace_callback definiert
    function linkLenght($treffer)
    {
        // $treffer[1] ist die URL
        $url = trim($treffer[1]);
        // $treffer[2] ist der Ausgabename
        // wurde kein Name angegeben, wird die URL als Name gewählt
        if(strlen(trim($treffer[2]))!=0)
            $linkname = $treffer[2];
        else
            $linkname = $treffer[1];
        // legt eine maximale Länge von 50 Zeichen fest
        // Ausnahme bei [img]-Tags
        if(strlen($linkname)>50 AND !substr_count(strtolower($linkname), '[img]') AND !substr_count(strtolower($linkname), '[/img]'))
            $linkname = substr($linkname, 0, 45-3)."...".substr($linkname, -5);
        // Rückgabelink
        $ergebnis = "<a href=\"".$url."\" target=\"_blank\">".$linkname."</a>";
        return $ergebnis;
    }

    



$text = preg_replace_callback("/\[img\](.*)\[\/img\]/Usi", 'picSize', $text);
// Prüft die Bildausmaße und passt sie gegebenenfalls an
    // wird für preg_replace_callback definiert
    function picSize($treffer)
    {
    // falls keine gültige Adresse angegeben wurde, wird die Fehlermeldung unterdrückt
        $size = @getimagesize($treffer[1]);
    if ($size[0] > 400) {
        $width = 400;
        // Höhe berechnen
        $height = ($size[1]/$size[0])*$width;
           return " <img src=\"".$treffer[1]."\" width=\"".$width."\" height=\"".$height."\" border=\"0\"> ";
    }
    else
        return " <img src=\"".$treffer[1]."\" border=\"0\"> ";
    }
    

        $text = str_replace(':)',"<img src=\"http://luxurystables.lu.funpic.de/images/1.gif\">", $text);
        $text = str_replace('=)',"<img src=\"http://luxurystables.lu.funpic.de/images/3.gif\"> ", $text);
        $text = str_replace('=)',"<img src=\"http://luxurystables.lu.funpic.de/images/3.gif\">", $text);
        $text = str_replace(':P',"<img src=\"http://luxurystables.lu.funpic.de/images/4.gif\">", $text);
        $text = str_replace(';)',"<img src=\"http://luxurystables.lu.funpic.de/images/5.gif\">", $text);
        $text = str_replace(':D',"<img src=\"http://luxurystables.lu.funpic.de/images/6.gif\">", $text);
        $textr = str_replace(':(',"<img src=\"http://luxurystables.lu.funpic.de/images/7.gif\">", $text);
       
        return $text;

?>

Wenn ich nun die Posts aus der Datenbank auslese und es gibt nur einen Post funktioniert alles.
Gibt es nun 2 Posts, dann kommt folgende Fehlermeldung:
Fatal error: Cannot redeclare linklenght() (previously declared in /var/www/web46/files/members/pageersetzen.php:14) in /var/www/web46/files/members/pageersetzen.php on line 31
Obwohl es in keinem der Posts einen Link gibt, der gekürtzt werden müsste.

Hat jemand eine Idee woran das liegt und vllt. eine Lösung? Wäre echt toll ...

Danke schön schon mal! :)
 

mp17

Aktives Mitglied

AW: BBCodes werden nur beim ersten durchlauf ersetzt

weil du eine funtion oder ähmliches 2x mit dem gleichen namen deklarierst...
jetzt wäre mal wichtig, die pageersetzen.php in der zeile 31 sich anzuschauen, da sollte der fehler liegen.
ich denke du hasst ein objekt 2x deklariert, oder mehrmals, um für jeden post neu den bb code umzuwandeln...
aber egal, zeig erstma die datei
 

Stelo

Noch nicht viel geschrieben

AW: BBCodes werden nur beim ersten durchlauf ersetzt

Naja, welche Datei willst du dafür denn sehen? Ich include die pageersetzen.php einfach.

Aber ich glaub was du meinst, denn ich include die Datei ja in der whileschleife, d.h. mehrmals, aber anders geht das ja auch nicht. Wenn ich die Datei schon am Anfang include, dann gibt es die Variable $text ja noch gar nicht.

PHP:
<?php

/**
 * @author Steff
 * @copyright 2007
 */


$threadid=$_GET['threadid'];

	
//Thread-Titel auslesen
	$sqlthread = "SELECT * FROM posts WHERE threadid = '$threadid'";
	$ergebnisthread = mysql_query($sqlthread) OR die(mysql_error() );
	$rowthread = mysql_fetch_assoc($ergebnisthread); 
		$threadtitle = $rowthread['betreff'];

	
eval ("dooutput(\"".gettemplate("post_header")."\");");

//Hits+1
$sqlhits = "UPDATE threads SET hits=hits+1 WHERE id='$threadid'";
mysql_query($sqlhits);
		

		//Alle Posts auslesen
		$sqlpost = "SELECT * FROM posts WHERE threadid = '$threadid' ORDER BY datum ASC";
		$resultpost = mysql_query($sqlpost) OR die(mysql_error());
		while ($rowpost = mysql_fetch_assoc($resultpost)) {
			$postid = $rowpost['id'];
			$posttitle = $rowpost['betreff'];
			$date = $rowpost['datum'];
			$datum = date("d.m.y - H:i", $date);
			$autor = $rowpost['autor'];
			$nachricht = $rowpost['nachricht'];
			
			$sqlautor = "SELECT * FROM mitglieder WHERE id='$autor'";
				$rowautor = mysql_fetch_assoc(mysql_query($sqlautor));
			$rechte = $rowautor['rechte'];
			$autor = $rowautor['nick'];				
			$bild = $rowautor['bild'];
			$posts = $rowautor['posts'];

//BB-Codes ersetzen
$text = $nachricht;
include("members/pageersetzen.php");	

$nachricht = nl2br($text);

		
		
		eval ("dooutput(\"".gettemplate("post_inhalt")."\");");
			

			
}

	



?>
 

mp17

Aktives Mitglied

AW: BBCodes werden nur beim ersten durchlauf ersetzt

ja wie gesagt, weil du die funktion linkLenght() mehrere male deklarierst, mach es einfach anders. include die datei schon vor der while schleife und führe die funktion in der while schleife selber aus...
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
175.157
Beiträge
2.581.867
Mitglieder
67.223
Neuestes Mitglied
Desiree
Oben