Sp33dy G0nz4l3s: Was ist falsch?

Hi, ich habe diesen Code:

$smilie = ":)";
$smilie = ";)";
$smilie = ":(";
$link = "<img src="http://www.cs-erweiterungen.de/images/smilies/smile.gif">";
$link = "<img src="http://www.cs-erweiterungen.de/images/smilies/wink.gif">";
$link = "<img src="http://www.cs-erweiterungen.de/images/smilies/frown.gif">";

for($i = 0; $i < count($smilie); $i++) {
  $kommentar = str_replace($smilie[$i], $link[$i], nl2br(htmlspecialchars($row["Kommentar"])));
}
  echo "<div id="comment_text">" . $kommentar . "</div></div>\n";

Leider Funktioniert es nicht. Anstatt den erhofften Smilie Bildern kommt immer nur <). Weiß jemand von euch warum das so ist?

http://www.cs-erweiterungen.de/scripts/viewcomments.php

Danke

  1. Habe einen kleinen Fehler gefunden

    Das hier muss so heißen
    $smilie[] = ":)";
    $smilie[] = ";)";
    $smilie[] = ":(";
    $link[] = "<img src="http://www.cs-erweiterungen.de/images/smilies/smile.gif">";
    $link[] = "<img src="http://www.cs-erweiterungen.de/images/smilies/wink.gif">";
    $link[] = "<img src="http://www.cs-erweiterungen.de/images/smilies/frown.gif">";

    Es wird dennoch immer nur der letze Smilie angezeigt...

    1. Lieber Sp33dy,

      Dein Code:

        
      for($i = 0; $i < count($smilie); $i++) {  
        $kommentar = str_replace($smilie[$i], $link[$i], nl2br(htmlspecialchars($row["Kommentar"])));  
      }  
        echo "<div id=\"comment_text\">" . $kommentar . "</div></div>\n";
      

      In der Zeile mit $kommentar=... überschreibst Du jedesmal in der Schleife den bisher dort eingetragenen Wert durch einen neuen Wert. Mein Vorschlag:

      $alle_smilies = array(  
          // jedes Unter-Array ist ein "assoziatives" Array mit Index "kuerzel" und Index "bild"  
          array(  
              'kuerzel' => ':)',  
              'bild' => 'http://www.cs-erweiterungen.de/images/smilies/smile.gif'  
          ),  
          array(  
              'kuerzel' => ';(',  
              'bild' => 'http://www.cs-erweiterungen.de/images/smilies/wink.gif'  
          ),  
          array(  
              'kuerzel' => ':(',  
              'bild' => 'http://www.cs-erweiterungen.de/images/smilies/frown.gif'  
          )  
      );  
        
      $kommentar = ''; // Leeren String initialisieren (wird in der Schleife etappenweise gefüllt)  
        
      foreach ($alle_smilies) as $ein_smiley) {  
          // hier existiert nun eine Variable namens "smiley". Sie ist eine Kopie  
          // des entsprechenden Unterarrays von $alle_smilies und enthält die zwei  
          // Indices 'kuerzel' und 'bild'.  
          $kommentar .= str_replace(  
              $ein_smiley['kuerzel'], // Enthält das Kürzel, das jetzt durch  
              $ein_smiley['bild'],    // die Bilddatei eretzt wird.  
              nl2br(  
                  htmlspecialchars($row["Kommentar"])  
              )  
          );  
      }  
        
      // Der Kommentar braucht kein <div>! Ein simples <p> genügt und ist wesentlich semantischer!  
      echo '<p id="comment_text">' . $kommentar . "</p>\n";
      

      Liebe Grüße aus Ellwangen,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
      1. Tja, wenn man das ungeprüft hier reinstellt, dann passieren immer wieder Fehler...

        Die Zeile innerhalb der Schleife ist nicht ausreichend. Besser so:

             $kommentar .= str_replace(  
                 $ein_smiley['kuerzel'], // Enthält das Kürzel, das jetzt durch  
                 '<img src="'  
                     . $ein_smiley['bild']  // die Bilddatei ersetzt wird.  
                     . '" alt="Smiley-Icon '  
                     . $ein_smiley['kuerzel']  
                     . '" />',  
                 nl2br(  
                     htmlspecialchars($row["Kommentar"])  
                 )  
             );
        

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  2. Hallo Sp33dy.

    $smilie = ":)";

    $smilie = ";)";
    $smilie = ":(";

      
    Hier befüllst du $smilie drei mal mit Inhalt, überschreibst den ursprünglichen also zwei Mal.  
      
    
    > ~~~php
    
    $link = "<img src=\"http://www.cs-erweiterungen.de/images/smilies/smile.gif\">";  
    
    > $link = "<img src=\"http://www.cs-erweiterungen.de/images/smilies/wink.gif\">";  
    > $link = "<img src=\"http://www.cs-erweiterungen.de/images/smilies/frown.gif\">";
    
    

    Ebenso. Möchtest du vielleicht Arrays anlegen?

    for($i = 0; $i < count($smilie); $i++) {
      $kommentar = str_replace($smilie[$i], $link[$i], nl2br(htmlspecialchars($row["Kommentar"])));
    }

    Die Schleife kann dann übrigens entfallen, da str_replace direkt Arrays als Argumente annehmen kann.

    Einen schönen Freitag noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
  3. Habe es gelöst^^

    Sorry für diesen unnötigen Post aber auf einmal ist mir die Idee gekommen das die for Schleifen unnötig ist

  4. Moin!

    for($i = 0; $i < count($smilie); $i++) {
      $kommentar = str_replace($smilie[$i], $link[$i], nl2br(htmlspecialchars($row["Kommentar"])));
    }

    Die Schleife wandelt den Kommentarinhalt für jedes einzelne Smilie in die Variable $kommentar.

    Und nach dem letzten Wandeln (des Originalkommentars) wird das Ergebnis ausgegeben:

    echo "<div id="comment_text">" . $kommentar . "</div></div>\n";

    Das Wandlungsergebnis zwischendurch zu speichern wäre eine gute Idee.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
  5. Eine letzte Frage habe ich doch noch:

    Ist es möglich für ein Array ein || (OR) zu setzen?

    Also so:
    $replacethis[] = ":)" || ":-)";
    $replacethis[] = ";)" || ";-)";
    $replacethis[] = ":(" || ":-(";
    $withthis[] = "<img src="http://www.cs-erweiterungen.de/images/smilies/smile.gif">";
    $withthis[] = "<img src="http://www.cs-erweiterungen.de/images/smilies/wink.gif">";
    $withthis[] = "<img src="http://www.cs-erweiterungen.de/images/smilies/frown.gif">";

    Habe es so probiert, ging aber leider nicht.

    1. Ist es möglich für ein Array ein || (OR) zu setzen?

      Also so:
      $replacethis[] = ":)" || ":-)";
      $replacethis[] = ";)" || ";-)";
      $replacethis[] = ":(" || ":-(";

      Nein, das funktioniert natürlich nicht. Was soll das ergebnis einer OR-Verknüpfung von Strings sein? Du kannst hier entweder mit regulären Ausdrücken arbeiten, (irgendwie so: /:-?)/ ) oder du ersetzt halt mehrere verschiedene Smilies durch das gleiche.

  6. hi,

    falsch ist das Doppelposting. Warum bleibst du nicht in deinem bestehenden Thread?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      warum kannst du einfach nicht mal ruhig sein und solche Kommentare für dich behalten. Oder willst du einfach nur immer mal wieder auftauchen obwohl du gar nichts sinnvolles schreibst?

      Gruß,
      Sebastian

      1. Hi Sebastian!

        warum kannst du einfach nicht mal ruhig sein und solche Kommentare für dich behalten.

        Dein Beitrag ist sinnvoller?

        Oder willst du einfach nur immer mal wieder auftauchen obwohl du gar nichts sinnvolles schreibst?

        Sven Rautenberg hat mMn sehr schön beschrieben, warum Doppelpostinge [1] nicht gern gesehen werden und keinen Vorteil bringen: http://forum.de.selfhtml.org/archiv/2006/2/t124321/#m800700

        Desweiteren ist es nun mal so, dass sich die Moderatoren dieses Forums - wie bei anderen Forümmern [1] auch - nicht jeden Thread lesen können. Da sind solche Anmerkungen, wie wahsaga es gemacht hat, durchaus sinnvoll.

        [1] ;-)

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
      2. Hello out there!

        Oder willst du einfach nur immer mal wieder auftauchen obwohl du gar nichts sinnvolles schreibst?

        Was wahsaga schrieb, war sinnvoll.

        Möchtest du, dass jedesmal http://forum.de.selfhtml.org/archiv/2006/2/t124321/#m800700 verlinkt wird?

        See ya up the road,
        Gunnar

        --
        „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
        1. Moin!

          Möchtest du, dass jedesmal http://forum.de.selfhtml.org/archiv/2006/2/t124321/#m800700 verlinkt wird?

          Du kannst ab sofort auch </hilfe/charta.htm#keine-doppelpostings> verlinken. :)

          - Sven Rautenberg

          --
          "Love your nation - respect the others."
          1. Hallo!

            Möchtest du, dass jedesmal http://forum.de.selfhtml.org/archiv/2006/2/t124321/#m800700 verlinkt wird?

            Du kannst ab sofort auch </hilfe/charta.htm#keine-doppelpostings> verlinken. :)

            Cool :)

            ciao, ww

            --
            Ein japanisch-deutsches Gedicht
            sh:(  fo:|  ch:~  rl:(  br:>  n4:~  ie:%  mo:)  va:)  de:]  zu:)  fl:(  ss:|  ls:~  js:)
      3. Hi!

        warum kannst du einfach nicht mal ruhig sein und solche Kommentare für dich behalten.

        Und warum mußt du ein neues Posting schreiben, wo doch im alten Thread geantwortet wird..?
        Im übrigen habe ich mir in deinem alten Thread die Mühe gemacht, verdammt viel zu deinen Fehlern im Code zu schreiben, wo du nämnlich Tür und Tor für einen Angriff per SQL-Injection geöffnet hast...

        Oder willst du einfach nur immer mal wieder auftauchen obwohl du gar nichts sinnvolles schreibst?

        Wenn du seine Antworten mal lesen würdest, würdest du vielleicht auf bemerken, daß er sehr sinnvolle Hinweise gibt.

        Schöner Gruß,
        rob

      4. Hi,

        warum kannst du einfach nicht mal ruhig sein und solche Kommentare für dich behalten. Oder willst du einfach nur immer mal wieder auftauchen obwohl du gar nichts sinnvolles schreibst?

        Wenn keiner hier die Doppelposter draufhinweist, das es falsch ist was sie machen, dann sind hier bald von anfang bis Ende des Forums nur die gleichen Fragen, und wenn jemand hier Aktiv helfen tut sollte man dies Respektieren, man muss nähmlich die Frage des hilfesuchenden lesen und verstehen, warum soll man denn von jemandem, von dem man hier hilfe bekommt erwarten, eine Frage 2 mal zulesen und zu verstehen?
        Mich stören auch Doppelpostings, erstrecht wenn im ersten thread der Fragesteller Hilfe bekommt aber dieses nicht zur kenntnis nimmt. Somit bist eher du derjenige, der sich hätte sein kommentar sparen können.

        Grüße,
        Engin
         GYRO

        --
        Dilated peoples|Team Vestax
        Gibst du einem Mann einen Fisch, nährt er sich einmal. Lehrst du ihn das Fischen, nährt er sich sein ganzes Leben.