Warum funktioniert es nicht

Raptor72

Mitglied
Desweiteren habe ich auch das Problem dass das austauschen einer Zeichenkette nicht funktioniert mittels eregi_replace bzw. jetzt ja preg_replace.

Wollte Smileys im Gästebuch haben wo er eben die Zeichen in die entsprechenden Smileys austomtisch umwandelt, aber keine Ahnung warum es nicht geht.

Code:
<html>
<body background="backgrounds/backbig.JPG">
</body>
<?php
  
    mysql_connect("localhost", "******","*****") or die  ("Keine Verbindung moeglich");

    mysql_select_db("******") or die  ("Die Datenbank existiert nicht");
  
         $eintrag_abruf = "SELECT * FROM guestbook ORDER BY id DESC";
         $eintrag = mysql_query($eintrag_abruf);
         $anzahl = mysql_num_rows($eintrag);
		 
  $suche = array();
  $suche[0] = ":-)";
  $suche[1] = ";-)";
  
  $ersetz = array();
  $ersetz[0] = "<img src='smiley1.gif'>";
  $ersetz[1] = "<img src='smiley2.gif'>";

			
echo "<table align='center' width='100%' height='*%' border='1'>";        
echo "<tr><td background='backgrounds/gbmiddle.jpg'>";
echo "<p align='center' class='Stil1'>Es befinden sich <font size='5'> ",$anzahl," </font> Eintr&auml;ge im G&auml;stebuch.</p></td>";
echo "</tr></table>";
			       
      while ($row = mysql_fetch_object($eintrag)) 
	  {
  
      $inhalt = $row->inhalt;
      $datetime = $row->datum;
      $jahr = substr($datetime,0,4);
      $monat = substr($datetime,5,2);
      $tag = substr($datetime,8,2);
      $stunde = substr($datetime,11,2);
      $minute = substr($datetime,14,2);
      $datum = $tag.".".$monat.".".$jahr;
      $zeit = $stunde.":".$minute;

      echo "<table align='center' width='100%' height='40%' border='1'>";

      echo "<tr><td><p align='center'>--> <font color='blue' size='4'><b>",$row->name,",</b></font> am ",$datum,", um ",$zeit,"Uhr .....</p>";
  
      if ($row->email !="")
      {
        echo "<p align='center'><font color='#1e90ff' size='2'>",$row->email,"</font></td></tr>";
      }

        echo "<tr><td><p align='center'>";
        echo preg_replace($suche, $ersetz, $inhalt);
        echo "</p></td></tr>";  
        echo "</table><br><br>";
      }
     
  ?>
  </html>

Für Hilfe bin ich schon jetzt dankbar :D
 
preg_*-Funktionen brauchen am Anfang des Suchstrings sowie am Ende des selben einen Delimiter (Begrenzer):

PHP:
  $suche = array();
  $suche[0] = "/:-)/";
  $suche[1] = "/;-)/";

Außerdem ist es sinnvoll, Sonderzeichen zu escapen (mittels Backslash = \).
 
So habe das mal eben versucht und umgeändert, auch mit den Sonderzeichen aber leider keine Veränderung, geht also immer noch nicht und ich weiß nicht warum weil der Code doch logisch nachvollziehbar ist :(
 
Also das funktioniert bei mir tadellos:

PHP:
<?php
  $suche = array();
  $suche[0] = "/\:\-\)/";
  $suche[1] = "/\;\-\)/";
  
  $ersetz = array();
  $ersetz[0] = "<img src='smiley1.gif'>";
  $ersetz[1] = "<img src='smiley2.gif'>";

  $text = "Dies ist ein Smiley-Test :-) Aber wir wollen alle beide testen ;-)";
  
  $inhalt = preg_replace($suche, $ersetz, $text);
  
  echo $inhalt;
  
?>

Bis auf die Tatsache, das ich die Gifs nicht habe :)
 
Zeig doch noch mal deinen Code, wie du ihn jetzt hast (ab der Definition von $suche genügt).

Außerdem schreib mal ganz an den Anfang der Datei (also noch vor dem <html>):

PHP:
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
?>

Poste bitte auch mögliche Fehlermeldungen.

Edit: Hast du überhaupt Smileys in deinem Text (ich weiß, klingt lächerlich, aber ich hab schon einiges erlebt ;-) )
 
Zuletzt bearbeitet:
Also das ist der ganze Code so wie er bei mir steht, und ich habe ein Smiley als GIF Bild gespeichert, liegt im selben Ordner wie die Datei weil ich ja noch am testen bin.

Habe deinen Code ganz an den Anfang der Seite kopiert,kamen aber keinerlei Fehlermeldungen oder Ähnliches.

Und nein, klingt nicht lächerlich weil ich mich selbre auch schonmal so verar... habe, wo ich vergessen hatte das Bild auch dorhin zu legen wie es angegeben ist :D
Aber das Gif Bild ist da, sprich der Smiley.

Code:
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
?>

<html>
<body background="backgrounds/backbig.JPG">
</body>
<?php
  
    mysql_connect("localhost", "*****","******") or die  ("Keine Verbindung moeglich");

    mysql_select_db("*******") or die  ("Die Datenbank existiert nicht");
  
         $eintrag_abruf = "SELECT * FROM guestbook ORDER BY id DESC";
         $eintrag = mysql_query($eintrag_abruf);
         $anzahl = mysql_num_rows($eintrag);
		 
  $suche = array();
  $suche[0] = "/\:\-\)/";
  $suche[1] = "/\;\-\)/";
  
  $ersetz = array();
  $ersetz[0] = "<img src='smiley1.gif'>";
  $ersetz[1] = "<img src='smiley2.gif'>";
			
echo "<table align='center' width='100%' height='*%' border='1'>";        
echo "<tr><td background='backgrounds/gbmiddle.jpg'>";
echo "<p align='center' class='Stil1'>Es befinden sich <font size='5'> ",$anzahl," </font> Eintr&auml;ge im G&auml;stebuch.</p></td>";
echo "</tr></table>";
			       
      while ($row = mysql_fetch_object($eintrag)) 
	  {
  
      $text = $row->inhalt;
      $datetime = $row->datum;
      $jahr = substr($datetime,0,4);
      $monat = substr($datetime,5,2);
      $tag = substr($datetime,8,2);
      $stunde = substr($datetime,11,2);
      $minute = substr($datetime,14,2);
      $datum = $tag.".".$monat.".".$jahr;
      $zeit = $stunde.":".$minute;

      echo "<table align='center' width='100%' height='40%' border='1'>";

      echo "<tr><td><p align='center'>--> <font color='blue' size='4'><b>",$row->name,",</b></font> am ",$datum,", um ",$zeit,"Uhr .....</p>";
  
      if ($row->email !="")
      {
        echo "<p align='center'><font color='#1e90ff' size='2'>",$row->email,"</font></td></tr>";
      }

        echo "<tr><td><p align='center'>";
        $inhalt = preg_replace($suche, $ersetz, $text);
		echo $inhalt;
        echo "</p></td></tr>";  
        echo "</table><br><br>";
      }
     
  ?>
</html>
 
Am besten du machst dann noch folgendes:

Füge direkt nach dieser Zeile

PHP:
$text = $row->inhalt;

noch diese Zeile ein:

PHP:
echo "Der Inhalt von $text sieht so aus:<pre>"; var_dump($text); echo "</pre>";
 
passiert nichts, gibt keine Ausgabe wie der Inhalt von $text aussieht, warum nicht, denn es steht doch ein Wert in $text sonst würde er ja nicht weiter hinten ausgegeben bzw. an $inhalt übergeben werden.
 
Ok, setzen wir noch weiter vorne an:

Mach mal direkt nach diesen beiden Zeilen

PHP:
      while ($row = mysql_fetch_object($eintrag)) 
      {

folgende:

PHP:
            echo "<pre>"; var_dump($row); echo "</pre>";

Im übrigen debuggst du grad einen Code, du solltest dir merken, was du jetzt grade machst, du wirst das in Zukunft noch brauchen ;-)
 
Zurück