Problem mit echo & ersetzen aus Datenbank

  • Themenstarter Themenstarter Lukasz
  • Beginndatum Beginndatum
L

Lukasz

Auszug aus meinem script
PHP:
if($show == "all")
      while($row = mysql_fetch_array($result))
        echo "<b>".$row['name'].":</b> ".$row['comment']."<br><br>\n";
    else
      for($i=0; $i<$showcomments && ($row = mysql_fetch_array($result)); $i++)
       
      echo "<b>".$row['name'].":</b> ".$row['comment']."<br><hr>\n";
Das ganze läuft super. Ich wollte aber beim laden aus der DB erstprüfen lassen
ob eine bestimmte Zeichenfolge integriert ist.
BSP *114 soll einen Smilie ausgeben und nicht *114
Wie mach ich das. Hab gerade im Netz über zwei Stunden gesucht nichts gefunden.
(Ist ein chat script)
 
ca so:
Code:
echo "<b>".$row['name'].":</b> ".
preg_replace("/BSP*(\d+)/",'<img src="smiley\\1.gif">',$row['comment'])."<br><hr>\n";
....würde "BSP*114" ersetzen durch "<img src="smiley114.gif">
 
Zuletzt bearbeitet:
Danke dabei bekomme ich leider nur ein haufen Fehlermeldungen.
Es wird dan die komplette seite nich mehr ausgegeben.

Vieleicht zeig ich mal den ganzen script:


PHP:
  if($install){
    mysql_query("CREATE TABLE $db_table (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,comment VARCHAR(255) NOT NULL);") or die ("Fehler beim Erstellen der Tabelle: ".mysql_error());
    echo "Tabelle erfolgreich erstellt!";
  }
  else{
    echo "

  ";

    function str_break($str, $maxlen){
      $nobr = 0;
      $len = strlen($str);
      for($i = 0; $i<$len; $i++){
        if(($str[$i]!=' ') && ($str[$i]!='-') && ($str[$i]!="\n"))
          $nobr++;
        else{
          $nobr = 0;
          if($maxlen+$i>$len){
            $str_br .= substr($str, $i);
            break;
          }
        }
        if($nobr>$maxlen){
          $str_br .= ' '.$str[$i];
          $nobr = 1;
        }
        else
          $str_br .= $str[$i];
      }
      return $str_br;
    }

    if($show == "all") echo "<a href='include.php?path=chat/index.php'>Normale Shoutbox zeigen</a><hr>";
    else echo "";

    if($input_name != "Name" && $input_name != "" && $input_comment != "Kommentar" && $input_comment != ""){
      $result = mysql_query("SELECT * FROM $db_table ORDER BY id DESC LIMIT 0,1;");
      $row = mysql_fetch_array($result);

      $input_name = str_break($input_name, $break_name);
      $input_name = str_replace("<","&lt;",$input_name);
      $input_name = str_replace(">","&gt;",$input_name);
      $input_name = stripslashes($input_name);
      $input_comment = str_break($input_comment, $break_comment);
      $input_comment = str_replace("<","&lt;",$input_comment);
      $input_comment = str_replace(">","&gt;",$input_comment);
      $input_comment = stripslashes($input_comment);

      if($row['name'] != $input_name || $row['comment'] != $input_comment)
        mysql_query("INSERT INTO $db_table (name,comment) VALUES ('$input_name','$input_comment');");
    }
    
    $result = mysql_query("SELECT * FROM $db_table ORDER BY id DESC");

    if($show == "all")
      while($row = mysql_fetch_array($result))
        echo "<b>".$row['name'].":</b> ".$row['comment']."<br><br>\n";
    else
      for($i=0; $i<$showcomments && ($row = mysql_fetch_array($result)); $i++)
       
      echo "<b>".$row['name'].":</b> ".$row['comment']."<br><hr>\n";

    echo "
      </td>
    </tr>
  </form>
</table>
    ";
  }

  @mysql_close($db);
?>
 
keine Ahnung, woher die Fehlermeldungen kommen.
In der von mir geposteten Zeile ist zwar nen Fehler drinne... allerdings ist es nur ein Tippfehler im regExp, aufgrunddessen der nicht das gewünschte ersetzt...
einen PHP-Fehler erzeugt der nicht...

statt

"/BSP*(\d+)/"

muss es dort heissen
"/BSP\*(\d+)/"

Es wäre schon gut, wenn du etwas über die Fehlermeldung sagen könntest... welche Fehler, welche Zeilen, was steht in den Zeilen...?

Ich hab mir jetzt nicht nen paar Skripte und ne Tabelle gemacht, um den Fehler zu finden, zumal du in dem Skript einige Variablen hast, deren
Inhalt ich nicht kenne, aber wenn $row ein Array mit den Elementen 'name' und 'comment' ist, dann funktioniert es auch:
Bsp.:
PHP:
<?php
$row=array('name'=>'Testuser','comment'=>'BSP*14 Blablubb');
echo "<b>".$row['name'].":</b> ".
preg_replace("/BSP\*(\d+)/",'<img src="smiley\\1.gif">',$row['comment'])."<br><hr>\n";
?>
gibt dir aus:
Code:
<b>Testuser:</b> <img src="smiley14.gif"> Blablubb<br><hr>
 
Das lag echt nur an deinem Tipfehler und ich bin erstaunt wie stabil und gut dein Vorschlag geht!
Meg Dank an dich. Ich hab nur noch eine Frage.
Ich möchte das ein link als http:// auch als link ausgegeben wird. Es geht auch anfür sich. Nur beides zusammen Link und smiley bekomme ich nicht auf die Reihe.

Danke für deine Hilfe!
 
Das läuft ansich genauso:
Code:
<?php
$row=array('name'=>'Testuser','comment'=>'http://blubb.de');
$row['comment']=preg_replace("/BSP\*(d+)/",'<img src="smiley\\1.gif">',$row['comment']);
$row['comment']=preg_replace("/http:\/\/(\S+)/",'<a href="http://\\1"target="_blank">\\1</a>',$row['comment']);
echo "<b>".$row['name'].":</b> ".$row['comment']."<br><hr>\n";
?>
Du musst allerdings beachten, dass deine Funktion str_break() auch zu lange URLs mit einem Leerzeichen versieht, wodurch selbige dann beim Ersetzen abgeschnitten werden.
 
Also die scripte gehen ja, jedoch kooperiert das ganze nur mit einer ausgabe.

Ich gebe die 6 lezten antworten aus der db aus. Solange ich nur die url oder nur die smilies wechsel im echo oder zuvor bekomme ich das richtige ergeniss.
Aber wenn ich beide zum einsatz bringe zeigt er mir nur die 6te antwort aus der db an.

Ich müsste beides also direkt im echo tauschen.
Wenn ich beide zeilen in den echo setze bekomme ich ja zwar alle 6 antworten jedoch jeden post doppelt einmal als smilie erstzt und eimal als url erstzt.
Ich müsste im echo praktisch sagen

BEI BSP ersetze ducrh smiley UND bei url ersetze durch Link -> Ausgabe

Ich habe versucht das ganze so wie du vor dem echo abzufragen. Jedoch bekomme ich dan nur die 6 lezte antwort aber nicht die 6 lezten antworten, da der array das irgend wie nicht peilt.

Dan habe ich beides in den echo engebaut und bekam eben einen doppelpost
einmal als smiley ersetzt und einmal als Link.

Ist auch klar da ich 2 mal die Nachricht geholt habe.
Ich muss praktisch beides in eine Anweisung bringen (im echo).

Hier nochmal auszug aus dem problem zur erinnerung;


PHP:
for($i=0; $i<$showcomments && ($row = mysql_fetch_array($result)); $i++)
echo "<b>".$row['name'].":</b> ".preg_replace("/smi*(\d+)/",'<img src="smilies/smiley\\1.gif">',$row['comment'])."<br><hr>\n";
Wen ich es so stehen habe ist alles ok aber keine url eingebaut! Alle 6 Antworten kommen!


PHP:
for($i=0; $i<$showcomments && ($row = mysql_fetch_array($result)); $i++)
// Hier die replace
echo "<b>".$row['name'].":</b> ".$row['comment']."<br><hr>\n";

Alles super aber nur eine antwort!


Gruss Lukasz!
 
Ich habe es dan doch hinbekommen!

Ich möchte mich bei dir noch mals für deine Mühe bedanke. Du hast mir sehr geholfen.

Man muss es eben so wie du machen aber das ganze ich eine Schleife setzten.
Also so (für andere die das Problem auch mal haben):

PHP:
for($i=0; $i<$showcomments && ($row = mysql_fetch_array($result)); $i++){
$row[comment] = preg_replace("/smi*(\d+)/",'<img src="smilies/smiley\\1.gif">',$row[comment]);
$row[comment]=preg_replace("/http:\/\/(\S+)/",'<a href="http://\\1"target="_blank">\\1</a>',$row['comment']);
echo "<b>".$row['name'].":</b>".$row['comment']."<br><hr>\n";
}
 
Zurück