Zur Navigation

Gästebuch (bbcode Problem)

1 mar123 (Gast)

Hallo,
ich habe jetzt auch mal php gelernt! Bin aber noch ziemlich am Anfang!
Ich versuch gerade ein Gästebuch zu programmieren!
Klappt auch alles! Nun möchte ich bbcodes einbauen!
Dazu habe ich ein php code im web gefunden, den man frei verwenden darf (http://www.php4u.net/index.php?main=codeschnipsel&source=38)!
Leider klappt, dass irgendwie nicht!
Kann mir jemand sagen wie ich diesen bbcode in mein gästebuch.php einfügen muss, damit er funzt?


gastebuch.php:
<?php 

$_POST['name'] = htmlspecialchars($_POST['name']);
$_POST['email'] = htmlspecialchars($_POST['mail']);
$_POST['text'] = htmlspecialchars($_POST['text']); 
$daten="<a href=mailto:".$_POST['mail'].">".$_POST['name']."</a><br /><br /><br />".$_POST['text']."";
$datenbank = "daten.txt";  
$datei = fopen($datenbank,"a");  
fwrite($datei, $daten); 
?>  

Eintrag erfolgreich. 

<a href="gaestebuch.php">Zurück zum Gästebuch</a>   
gruß mar123

14.09.2005 16:58

2 Jörg Kruse

Hallo mar123,

den Code mit der function bb_code() fügst du ganz an den Anfang ein. Später musst du diese dann auf $_POST['text'] anwenden

<?php

function bb_code($text, $url = TRUE, $bb = TRUE) {

        /* ... usw. ... */

    // Text zurückgeben
    return $text;
}

$_POST['name'] = htmlspecialchars($_POST['name']);
$_POST['email'] = htmlspecialchars($_POST['mail']);
$_POST['text'] = bb_code(htmlspecialchars($_POST['text'])); 
$daten="<a href=mailto:".$_POST['mail'].">".$_POST['name']."</a><br /><br /><br />".$_POST['text']."";
$datenbank = "daten.txt";  
$datei = fopen($datenbank,"a");  
fwrite($datei, $daten); 
?>  

Eintrag erfolgreich. 

<a href="gaestebuch.php">Zurück zum Gästebuch</a>

14.09.2005 17:14

3 mar123 (Gast)

Danke Danke!!
Super! Es geht!

gruß
mar123

14.09.2005 17:38

4 mar123 (Gast)

Hallo,
ich hab doch noch ein Problem!

Also wenn ich jetzt zum Beispiel
[php]<?PHP echo "Hello World!" ?>[/php] in mein Gästebuch eingebe, wandelt das skript den BBcode richtig um,
jedoch wird er nicht farbig angzeigt und die tags wie "<" oder ">" werden durch "&lt;" etc. ausgetauscht!

Die Ausgabe sieht dann so aus:

&lt;?PHP echo \&quot;Hello World!\&quot; ?&gt;

Kann das sein, dass htmlspecialchars () daran schlud ist?
Wie kann man dieses Problem lösen?

gruß

mar123

15.09.2005 14:39

5 Jörg Kruse

Ja, die Sonderzeichen werden bereits innerhalb der Funktion bb_code() codiert (Zeile 71):

$text = htmlentities($text);

das htmlspecialchars() codiert die HTML-Steuerzeichen ein zweites Mal, und sollte deswegen nicht auf $text angewendet werden (aber weiterhin auf die anderen Variabeln $name und $email)

15.09.2005 15:51

6 mar123 (Gast)

Danke!
Der Code wird jetzt farbig dargestellt!
Nur wenn ich jetzt [php]<?PHP echo "Hello World!" ?>[/php]eingebe, wird zwar der code farbig ausgegeben!
Aber er erscheint mit einem Fehler und verändert!

Das sieht dann so aus:


<?PHP echo
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in C:\Programme\xampp\htdocs\marcel\bbcode.php on line 147
"Hello World!\" ?> 

Hinter "Hello World wurde einfach ein \ gesetzt!

Ich finde aber keinen Fehler in der bbcode.php:
http://www.php4u.net/content/c_codeschnipsel_source.php?id=38&d=1

15.09.2005 17:09

7 C)-(iLL@

Wenn PHP auf dem Server magic_quotes aktiviert hat, dann werden die Slashes beim Posten automatisch gesetzt, ähnlich wie wenn Du manuell addslashes machen würdest. Dies soll SQL-Injection Angriffe verhindern, ist aber oft mehr ein Hindernis. Such mal in der Funktion die eingeschlossene Zeile in der for-Schleife:
$text = str_replace($results[1][$i], $c.$i.$c, $text); 
und versuche sie zu ersetzen mit:
 $text = stripslashes(str_replace($results[1][$i], $c.$i.$c, $text)); 

15.09.2005 18:13 | geändert: 15.09.2005 18:13

8 mar123 (Gast)

Danke, für die Antwort!
Kommt immer noch die Fehlermeldung!

<?PHP echo
Warning: Unexpected character in input: '\' (ASCII=92) state=1 in C:\Programme\xampp\htdocs\marcel\bbcode.php on line 147
"Hello World!\" ?>

15.09.2005 18:47

9 C)-(iLL@

Jo, hast Recht, sorry - kleiner Fehler. Ich hatte den Code wohl zu schnell überflogen. Lass die Zeile von vorhin wie sie war, und setze unter diese for-schleife
 (alter code)     for($i=0;$i<count($results[1]);$i++) {
          $text = str_replace($results[1][$i], $c.$i.$c, $text);
      }
folgende Zeilen:

    foreach(array_keys($results[1]) as $i) {
		  $results[1][$i] = stripslashes($results[1][$i]);
		} 

Dann sollte es passen. Das stripslashes wurde für die falsche Variable gemacht ;)

Edit: Nur weil es mich wundert - was zum Kuckuck hat PHP-Code im Gästebuch zu suchen?

15.09.2005 21:21 | geändert: 15.09.2005 21:27

10 mar123 (Gast)

Yeah! THX!
Funzt jetzt!
Edit: Nur weil es mich wundert - was zum Kuckuck hat PHP-Code im Gästebuch zu suchen?
Ich finde die Funktion gut in einem GB! :D

16.09.2005 12:11

Thema geschlossen, keine Antwort mehr möglich.