1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Shoutbox Textumbruch erzwingen

Discussion in 'Web-Know-how für die Homepage' started by Mylin, Feb 27, 2009.

Thread Status:
Not open for further replies.
  1. Mylin

    Mylin Viertel Gigabyte

    Hallo Forum,

    blick es gerade nicht. Damit die Darstellung der Seite nicht zerschossen werden kann, soll der Text automatisch umbrochen werden (geschieht nicht, wenn ohne Leerzeichen geschrieben wird). Funktioniert soweit bis auf, $ergX[nachricht] wird um ein Table verschoben. Wie bekomme ich das wieder richtig zusammen? Oder gibt es noch eine andere Möglichkeit einen Umbruch zu erzwingen?

    Mylin


    Code:
    $query = "SELECT nachricht, name, date, ip FROM shoutbox order by id ASC LIMIT 100"; 
        $erg = mysql_query($query); 
        echo "<table>";
        while($erg2=mysql_fetch_array($erg))
        { 
            echo "<table id='message'><tr>
                <td class='post'>$erg2[date] von  
    $erg2[name]</td> 
            </tr> 
            <tr> 
                <td class='text'>$ergX[nachricht]</td>
    	</tr>";
          $ergX[nachricht]= wordwrap($erg2[nachricht], 85, "\n", 1);         
        } 
        echo "</table>"; 
     
  2. kalweit

    kalweit Hüter der Glaskugel

    Wenn ich die Klammern richtig deute, machst du rekursiv neue Tabellen auf ohne sie zu schlie&#223;en. Die Syntax von wordwrap selbst scheint richtig, ich w&#252;rde aber zum Zwischenspeichern nicht unbedingt ein Feld benutzen, wenn ich nur einen String brauche. Schau mal in den Quelltext der ausgegebenen Seite, ob da der Zeilenumbruch vorkommt. Wenn ja, dann versuch mal <br> als Steuerzeichen und nicht \n bzw. schreib ein nl2br() drum herum.
     
  3. Mylin

    Mylin Viertel Gigabyte

    Hallo kalweit,

    auf zu auf zu, nachgebessert (ein </table> war entwischt). :D

    Nein, es wird kein Umbruch ausgegeben. Irgendwie scheint $erg2[nachricht] nicht direkt mit wordwrap k&#252;rzbar zu sein, sondern mu&#223; "umgeleitet" und neu ausgegeben werden. Dabei geht die Zusammengeh&#246;rigkeit ('$name','$nachricht','$date') bei der Ausgabe verloren.

    Quelltext:
    Code:
    <link rel="stylesheet" href="css/shout.css" type="text/css">
    <?php
    // Daten f&#252;r die Datenbankverbindung 
    $db_host = "xxx"; // Host 
    $db_user = "xxx"; // User 
    $db_password = "xxx"; // Passwort
    $db_name = "xxx"; // Datenbank 
    
    //Aufbau der Datenbankverbindung
        mysql_connect($db_host,$db_user,$db_password) or die(mysql_error()); 
    
        mysql_select_db($db_name) or die(mysql_error());
    
    //wurde das Formular abgeschickt?
    if(isset($_POST['submit'])) { 
        if(!$_POST['name']) { 
            echo "Fehler: Bitte geben Sie ihren Namen ein"; 
            die; 
        } 
        if(!$_POST['nachricht']) { 
            echo 'Fehler: Bitte geben Sie eine Nachricht ein.'; 
            die; 
        } 
    
        $nachricht = strip_tags($_POST['nachricht'], ''); 
        $name = strip_tags($_POST['name'], ''); 
    
        if(strlen($nachricht) > 1000) { 
            echo "Ihre Nachricht darf nicht gr&#246;&#223;er als 1000 Zeichen sein!"; 
            die; 
        } 
        if(strlen($name) > 30) { 
            echo "Ihr Name ist zu lang!"; 
            die; 
        } 
    
        $date = date("d.m.y  H:i"); 
    //Smileys mit IMG Tags ersetzen.    
        $nachricht=str_replace(":totlach:", "<img src=/images/8353.gif>", $nachricht);
        $nachricht=str_replace(":h&#252;pf:", "<img src=/images/8712.gif>", $nachricht);
        $nachricht=str_replace(":brav:", "<img src=/images/9414.gif>", $nachricht);
        $nachricht=str_replace(":heul:", "<img src=/images/8528.gif>", $nachricht);
        $nachricht=str_replace(":nixwissen:", "<img src=/images/27.gif>", $nachricht);
        $nachricht=str_replace(":idee:", "<img src=/images/45.gif>", $nachricht);
        $nachricht=str_replace(":denk:", "<img src=/images/09.gif>", $nachricht);
        $nachricht=str_replace(":schlafen:", "<img src=/images/8804.gif>", $nachricht);
        $nachricht=str_replace(":wegmuss:", "<img src=/images/6320.gif>", $nachricht);
        $nachricht=str_replace(":banane:", "<img src=/images/3660.gif>", $nachricht);
    
    
        $query = "INSERT INTO shoutbox (name, nachricht, date, ip) 
    VALUES ('$name','$nachricht','$date','$_SERVER[REMOTE_ADDR]')";
    
     if (!mysql_query($query)) { echo "Fehler"; } 
    
        echo "Danke f&#252;r den Beitrag<BR>"; 
        echo "<a href=\"shoutbox.php\">weiter ...</a>"; 
    
    
    } else { 
    //Ausgabe der zehn aktuellsten Messages. 
        $query = "SELECT nachricht, name, date, ip FROM shoutbox order by id ASC LIMIT 100"; 
        $erg = mysql_query($query); 
        echo "<table>";
        while($erg2=mysql_fetch_array($erg))
        { 
            echo "<table id='message'><tr>
                <td class='post'>$erg2[date] von  
    $erg2[name]</td> 
            </tr> 
            	<tr>
    		<td class='text'>$ergx[nachricht]</td>
    		</tr></table>"; 
       $ergx[nachricht]= wordwrap( $erg2[nachricht], 85, "\n", 1);        
        };
        
    
     echo "</table>"; 
    
    //Das Formular samt Javascript-Funktion zum einf&#252;gen von Smileys
    ?> 
    
    <script language="Javascript">
    //st&#246;rt beim Basteln
    //setTimeout(' document.location=document.location' ,60000);
    
    function SetSmiley(emo) {
    document.shoutbox.nachricht.value+=''+emo;document.shoutbox.nachricht.focus();
    }
    </script>
    <form method="post" name="shoutbox" action="shoutbox.php" id="editor_bg"> 
        <table id="editor">
            <td><h5>Name</h5> 
            <input type="text" name="name" class="name">
            <h5>Nachricht</h5><textarea name="nachricht"></textarea>
    	  <input type="submit" name="submit" value="Senden">
            
    <td style="vertical-align: top;"><h5>Smilies</h5>
    <div id="smilies">       
    <a href="javascript:SetSmiley(' :totlach:')"><img src="/images/8353.gif" alt="" border="0" align="absmiddle"></a>
    <a href="javascript:SetSmiley(' :h&#252;pf:')"><img src="/images/8712.gif" alt="" border="0" align="absmiddle"></a>
    <a href="javascript:SetSmiley(' :brav:')"><img src="/images/9414.gif" alt="" border="0" align="absmiddle"></a>
    <a href="javascript:SetSmiley(' :heul:')"><img src="/images/8528.gif" alt="" border="0" align="absmiddle"></a>
    <a href="javascript:SetSmiley(' :denk:')"><img src="/images/09.gif" alt="" border="0" align="absmiddle"></a>
    <a href="javascript:SetSmiley(' :nixwissen:')"><img src="/images/27.gif" alt="" border="0" align="absmiddle"></a>
    <a href="javascript:SetSmiley(' :idee:')"><img src="/images/45.gif" alt="" border="0" align="absmiddle"></a>
    <a href= "javascript:SetSmiley(' :schlafen:')"><img src="/images/8804.gif" alt="" border="0" align="absmiddle"></a>
    <a href= "javascript:SetSmiley(' :wegmuss:')"><img src="/images/6320.gif" alt="" border="0" align="absmiddle"></a>
    <a href= "javascript:SetSmiley(' :banane:')"><img src="/images/3660.gif" alt="" border="0" align="absmiddle"></a>
    
    
    	</div></td></table>
    <div style="text-align: center; margin-top: 4px;"><a href="http://www.smilies.4-user.de" target="_blank"><img src="http://www.smilies.4-user.de/images/banner_2.jpg" alt="Smilies.4-user - Tausende Smilies" border="0" width="468" height="60"></a></div>
        </form>
    
    <?php 
    }
    mysql_close();  
    ?>
    
    
     
    Last edited: Feb 27, 2009
  4. kalweit

    kalweit Hüter der Glaskugel

    ...was ja nur daran liegt, dass $ergx[nachricht] erst beim nächst folgenden Durchlauf von while ausgegeben wird. Ich würde erst $ergx[nachricht] errechnen und dann das table bauen und nicht hinterher (zumindest nach meinen Verständnis deines Codes).

    ...hab mir gerade ein Test gebastelt und da funktioniert's (PHP 5.2.3). Allerdings pflege ich einen ausführlicheren Codestyle - vielleicht liegt es daran:

    Code:
    echo "<table id='message'><tr><td class='post'>".$erg2["date"]." von ".$erg2["name"]."</td>"
    
    ... 
    
     
  5. Mylin

    Mylin Viertel Gigabyte

    Hab ebenfalls eine L&#246;sung, f&#252;r meinen "Codestyle" gefunden. ;)

    Code:
     $query = "SELECT nachricht, name, date, ip FROM shoutbox order by id ASC LIMIT 100"; 
        $erg = mysql_query($query);
        echo "<table>";
        while($erg2=mysql_fetch_array($erg))
    
        { 
         
         $text= wordwrap($erg2[nachricht], 85, "\n", 1); 
    
         echo "<table id='message'><tr>
                <td class='post'>$erg2[date] von $erg2[name]</td> 
            </tr> 
            	<tr>
    		<td class='text'>$text</td>
    		</tr></table>";
               };
    
    ... einfach vor der Ausgabe umbrechen. :cool:


    btw. endlich eine Browser unabh&#228;ngige L&#246;sung. Hatte schon mit wrap="hard" und Co rumprobiert.
     
    Last edited: Feb 27, 2009
  6. Mylin

    Mylin Viertel Gigabyte

    > vor der Ausgabe umbrechen
    Also so wie du schon empfohlen hattest, hatte den Beitrag nicht aufmerksam genug gelesen.

    > Browser unabhängige Lösung.
    Naja so ganz dann doch nicht, der IE brauchte noch ein <textarea wrap="off">

    Danke nochmals für die Hilfestellung.
     
Thread Status:
Not open for further replies.

Share This Page