Powerwoman: Textformatierung und Sortierung Gästebucheinträge

Hallo, ich bin ein absoluter HP-Neuling und ich hoffe ihr habt etwas nachsicht mit mir, wenn ich hier blöde fragen stelle...:-S
ich habe ein Gästebuch das die Einträge in eine .txt Datei schreibt.
Das klappt auch wunderbar...leider macht er mitten in den wörtern zeilenumbrüche wenn die seite zuende ist und ich kriege es auch nicht hin, den neuesten Eintrag an die erste Stelle zu setzen anstatt an die letzte...
Ich würde mich freuen, wenn mir hier jemand helfen könnte:-))
Mein Code lautet:

  
<?php  
function br2nl($string) {  
   str_replace("<br>", "\n", $string);  
   str_replace("<br />", "\n", $string);  
   return $string;  
}  
if ($_POST[da]){  
br2nl;  
 $kommentar = stripslashes(htmlentities(($_POST['kommentar'])));  
  $kommentar = str_replace("\n","<br>",$kommentar);  
$danke="Vielen Dank f&uuml;r Ihren Eintrag!";  
$senden=$_POST[senden];  
$sehen=$_POST[sehen];  
$name=$_POST[name];  
$titel=$_POST[titel];  
$text=$_POST[text];  
$eintrag=str_replace("klappe","<img src='schnauze.gif'>",$text);  
$text=$eintrag;  
$eintrag1=str_replace("bad","<img src='bath.gif'>",$text);  
$text=$eintrag1;  
$eintrag2=str_replace("daumen","<img src='daumen.gif'>",$text);  
$text=$eintrag2;  
$eintrag3=str_replace("heulnich","<img src='heulnich.gif'>",$text);  
$text=$eintrag3;  
$eintrag4=str_replace("happy","<img src='happy.gif'>",$text);  
$text=$eintrag4;  
$eintrag5=str_replace("laugh","<img src='biglaugh.gif'>",$text);  
$text=$eintrag5;  
$eintrag6=str_replace("baeh","<img src='baeh.gif'>",$text);  
$text=$eintrag6;  
$eintrag7=str_replace("kiss","<img src='kiss.gif'>",$text);  
$text=$eintrag7;  
$eintrag8=str_replace("glubsch","<img src='glubsch.gif'>",$text);  
$text=$eintrag8;  
$eintrag9=str_replace("teufel","<img src='teufel.gif'>",$text);  
$text=$eintrag9;  
$eintrag10=str_replace("cry","<img src='cry.gif'>",$text);  
$text=$eintrag10;  
$eintrag11=str_replace("winke","<img src='hand.gif'>",$text);  
$text=$eintrag11;  
$eintrag12=str_replace("old","<img src='old.gif'>",$text);  
$text=$eintrag12;  
$eintrag13=str_replace("auslach","<img src='auslach.gif'>",$text);  
$text=$eintrag13;  
$eintrag14=str_replace("kotz","<img src='kotz.gif'>",$text);  
$text=$eintrag14;  
$text.="\n<hr width=\"80%\" align=\"center\">";  
$datum=date(d.".".m.".".y);  
#var_dump($_POST);  
$datum1=date(H.":".m);  
$datei=fopen("gast.txt","a");  
$text1=$name."\n"."schrieb am ".$datum."\n"."um ".$datum1."\n".$titel."\n".$text;  
$text1 = str_replace("\n","<br>",$text);  
$text1.="\n";  
fwrite($datei,"\n".$text1);  
fclose($datei);  
}  

Vielen lieben dank im Voraus!

  1. Das klappt auch wunderbar...leider macht er mitten in den wörtern zeilenumbrüche wenn die seite zuende ist und ich kriege es auch nicht hin, den neuesten Eintrag an die erste Stelle zu setzen anstatt an die letzte...

    alle posts lesen, neuen post oben anfügen, wieder schreiben

    $eintrag=str_replace("klappe","<img src='schnauze.gif'>",$text);
    $text=$eintrag;
    $eintrag1=str_replace("bad","<img src='bath.gif'>",$text);
    $text=$eintrag1;
    $eintrag2=str_replace("daumen","<img src='daumen.gif'>",$text);
    $text=$eintrag2;
    $eintrag3=str_replace("heulnich","<img src='heulnich.gif'>",$text);
    $text=$eintrag3;
    $eintrag4=str_replace("happy","<img src='happy.gif'>",$text);
    $text=$eintrag4;
    $eintrag5=str_replace("laugh","<img src='biglaugh.gif'>",$text);
    $text=$eintrag5;
    $eintrag6=str_replace("baeh","<img src='baeh.gif'>",$text);
    $text=$eintrag6;
    $eintrag7=str_replace("kiss","<img src='kiss.gif'>",$text);
    $text=$eintrag7;
    $eintrag8=str_replace("glubsch","<img src='glubsch.gif'>",$text);
    $text=$eintrag8;
    $eintrag9=str_replace("teufel","<img src='teufel.gif'>",$text);
    $text=$eintrag9;
    $eintrag10=str_replace("cry","<img src='cry.gif'>",$text);
    $text=$eintrag10;
    $eintrag11=str_replace("winke","<img src='hand.gif'>",$text);
    $text=$eintrag11;
    $eintrag12=str_replace("old","<img src='old.gif'>",$text);
    $text=$eintrag12;
    $eintrag13=str_replace("auslach","<img src='auslach.gif'>",$text);
    $text=$eintrag13;
    $eintrag14=str_replace("kotz","<img src='kotz.gif'>",$text);
    $text=$eintrag14;

      
    das ist in zweierlei hinsicht ineffizient  
    - str\_replace kann auch mit arrays umgehen - das spart etwa die hälfte deines codes  
    - und du verwendest 14 variablen wo nur eine benötigt wird, das frisst speicher und ist unübersichtlich - du kannst problemlos eine variable mit einer funktion überschreiben in der der aktuelle wert vervarialbe verwendet wird:  
      
    ~~~php
    $blah = 'foo';  
    $blah .= 'bar';  
    $blah = 'baz '. $blah;  
    echo $blah;
    

    ergibt "baz foobar"

    dazu kommt noch: deine img-elemente sind nicht valide

    das hier reicht auch

    $search = array (  
      'klappe',  
      'bad',  
      'daumen'  
    );  
      
    replace = array (  
      '<img src='schnauze.gif' alt="icon: schnauze">',  
      '<img src='bath.gif' alt="icon: bath">',  
      '<img src='daumen.gif' alt="icon: daumen">'  
    );  
      
    $subject = str_replace($search, $replace, $subject);
    
    1. n'abend,

      Das klappt auch wunderbar...leider macht er mitten in den wörtern zeilenumbrüche wenn die seite zuende ist und ich kriege es auch nicht hin, den neuesten Eintrag an die erste Stelle zu setzen anstatt an die letzte...
      alle posts lesen, neuen post oben anfügen, wieder schreiben

      Ich würde ja den Einsatz von XML empfehlen. PHP implementiert die DOM Api. Tutorials gibt's offenbar auch genügend

      // [...]

      $subject = str_replace($search, $replace, $subject);

        
      Noch schöner wäre [strtr()](http://de3.php.net/strtr):  
        
      ~~~php
      $smilies = array(  
        'klappe' => '<a href="schnauze.gif" alt="klappe">',  
        'bad' => '<a href="bath.gif" alt="bad">',  
      );  
      echo strtr( $input, $smilies );
      

      weiterhin schönen abend...

      --
      #selfhtml hat ein Forum?
      sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
    2. vielen lieben dank!
      habe deinen ratschlag berücksichtigt und arrays gebildet, kämpfe gerade noch mit einer fehlermeldung.

  2. Hallo, ich bin ein absoluter HP-Neuling und ich hoffe ihr habt etwas nachsicht mit mir, wenn ich hier blöde fragen stelle...:-S
    ich habe ein Gästebuch das die Einträge in eine .txt Datei schreibt.
    Das klappt auch wunderbar...leider macht er mitten in den wörtern zeilenumbrüche wenn die seite zuende ist und ich kriege es auch nicht hin, den neuesten Eintrag an die erste Stelle zu setzen anstatt an die letzte...

    Wenn ich eine Textdatei mit dem Windows notepad öffne, dann wird Notepad sehr lange Zeilen umbrechen. Die Umbrüche sind aber nicht im Textfile und werden auch nicht gespeichert.

    Dein Code (den ich anderseits nicht beurteilen möchte) enthält keinen Hinweis auf einen harten Umbruch langer Einträge.

    mfg Beat

    --
    Woran ich arbeite:
    X-Torah
       <°)))o><                      ><o(((°>o
  3. Bekomme jetzt leider eine Fehlermeldung:

    Parse error: parse error, unexpected T_STRING, expecting ')' in /home/www/htdocs/powerwoman01.de/buch.php on line 25

      
    if ($_POST[da]){  
     $kommentar = stripslashes(htmlentities(($_POST['kommentar'])));  
      $kommentar = str_replace("\n","<br>",$kommentar);  
    $danke="Vielen Dank f&uuml;r Ihren Eintrag!";  
    $senden=$_POST[senden];  
    $sehen=$_POST[sehen];  
    $name=$_POST[name];  
    $titel=$_POST[titel];  
    $email=$_POST[email];  
    $text=$_POST[text];  
      
    $search = array ('klappe','bad','daumen','heulnich','happy','biglaugh','baeh','kiss','glubsch','teufel','cry','winke','old','auslach','kotz');  
      
    $replace = array ('<img src='schnauze.gif' alt="icon: schnauze">','<img src='bath.gif' alt="icon: bath">',  
     '<img src='heulnich.gif' alt="icon: heulnich">','<img src='happy.gif' alt="icon: happy">',  
      '<img src='biglaugh.gif' alt="icon: biglaugh">','<img src='baeh.gif' alt="icon: baeh">',  
      '<img src='kiss.gif' alt="icon: kiss">','<img src='glubsch.gif' alt="icon: glubsch">',  
      '<img src='teufel.gif' alt="icon: teufel">','<img src='cry.gif' alt="icon: cry">',  
      '<img src='hand.gif' alt="icon: hand">','<img src='old.gif' alt="icon: old">',  
      '<img src='auslach.gif' alt="icon: auslach">','<img src='kotz.gif' alt="icon: kotz">');  
      
    $subject = str_replace($search, $replace, $subject);  
      
    $text=$subject;  
    $text.="\n<hr width=\"80%\" align=\"center\">";  
    $datum=date(d.".".m.".".y);  
    #var_dump($_POST);  
    $datum1=date(H.":".m);  
    $datei=fopen("gast.txt","a");  
    $text1=$name."\n"."schrieb am ".$datum."\n"."um ".$datum1."\n".$titel."\n".$text;  
    $text1.="\n";  
    fwrite($datei,"\n".$text1);  
    fclose($datei);  
    }  
    
    
    1. Hallo,

      Bekomme jetzt leider eine Fehlermeldung:

      Parse error: parse error, unexpected T_STRING, expecting ')' in /home/www/htdocs/powerwoman01.de/buch.php on line 25

      $replace = array ('<img src='schnauze.gif' alt="icon: schnauze">','<img src='bath.gif' alt="icon: bath">');

      Da hast Du ein Problem mit den Anführungszeichen.
      Der erste String ist nur gerade so lang:
      '<img src='
      Wenn Du den String mit einfachen Anführungszeichen einpackst,
      ist es am einfachsten, im String selbst nur doppelte Anführungszeichen
      zu verwenden. Sonst musst Du die einfachen mit ' maskieren.

      Übrigens finde ich es schlecht, die Wörter für Smilies etc.
      automatisch zu ersetzen. Ich würde zumindest eine Art BB-Code
      oder so verwenden, also z.B. nur [kiss] durch ein Icon ersetzen,
      aber nicht jedes Vorkommen des Strings "kiss", sonst wird es ja
      auch bei Kopfkissen ersetzt:
      Kopf<img ...>en

      Und dann noch was:

      if ($_POST[da])

      Du musst schreiben:
      $_POST["da"]
      Das gilt ganz allgemein für die Schreibweise von Array-Variablen, siehe:
      http://www.php.net/manual/de/language.types.array.php#language.types.array.foo-bar

      mfg Thomas

      1. Vielen lieben Dank!

        habe den Code vebressert und bekomme nun auch keine Fehlermeldung mehr:-))
        Leider tauscht er jetzt aber auch nicht mehr gegen die smilies aus:-((

        1. Vielen lieben Dank!

          Gerngeschehen!

          habe den Code vebressert und bekomme nun auch keine Fehlermeldung mehr:-))
          Leider tauscht er jetzt aber auch nicht mehr gegen die smilies aus:-((

          Soweit ich hier sehen kann, sagst Du gar nirgends, was der anfängliche Inhalt
          der Variable $subject sein soll. Vermutlich der Inhalt von $text.
          Aber Du kannst doch gleich mit der Variable $text arbeiten und
          brauchst gar keine Variable $subject, also:

          $text = str_replace($search, $replace, $text);

          HTH, mfg, Thomas