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

[PHP / HTML] Abgeschnittener Inhalt bei Variablenübergabe

Discussion in 'Programmieren' started by Dr. Ali, Jan 2, 2006.

Thread Status:
Not open for further replies.
  1. Dr. Ali

    Dr. Ali Byte

    Was passieren soll:
    Über ein Formular (textarea) wird Text eingelesen. Mit der Methode "post" wird dieser Text zur Kontrolle / Vorschau ohne Formular angezeigt. Über ein verstecktes Formular übergebe ich dann diesen Text (wieder mit post) a) entweder zum weiteren Bearbeiten an ein Formular oder b) an eine Datenbank.

    Das Problem:
    Werden im Text doppelte Anführungszeichen " verwendet, wird der Text nach der Übergabe mit dem versteckten Formular direkt vor dem Anführungszeichen abgeschnitten.

    Meine Gedanken:
    Bei der Variablenübergabe wird automatisch vor jedem Anführungszeichen ein Backslash eingefügt. Diese Backslashes entferne ich, da sonst bei jedem Bearbeiten / Vorschau / Bearbeiten mehr Backslashes im Text erscheinen. Ich vermute jetzt, dass es ein Problem mit den Anführungszeichen bei der Übergabe mittels verstecktem Formular gibt.

    Der Quellcode:
    PHP:
    /* --------------------------------------------------------------------- Nachricht bearbeiten ----------------------------------------------------------------- */ 
      
    case "edit"# Datensatz bearbeiten
       
    if ($id != "" AND $load != "no")
       {
       
    $abfrage "SELECT * FROM newsbox WHERE id LIKE '$id'";
       
    $ergebnis mysql_query($abfrage);
       
    $row mysql_fetch_object($ergebnis);
       
    $datum $row->datum$titel $row->titel$inhalt $row->inhalt$change $row->change$links $row->links;
       }
       echo 
    "
         <font class=\"text\">Bitte nehmen Sie die gewünschten Änderungen vor.</p>"
    ;
       
    $inhalt=show_inhalt($inhalt);
       echo 
    "<form action=\"$PHP_SELF?id=$id\" method=\"post\"><table>
        <tr><td valign=\"top\">Titel:</td><td><input type=\"text\" size=\"50\" name=\"titel\" value=\"
    $titel\"></td></tr>
        <tr><td valign=\"top\">Nachricht:</td><td><textarea name=\"inhalt\" cols=\"60\" rows=\"20\">
    $inhalt</textarea></td></tr>
        <tr><td valign=\"top\">Web-Links:&nbsp;</td><td><textarea name=\"links\" cols=\"60\" rows=\"4\">
    $links</textarea></td></tr>
        <tr align=\"center\"><td><input type=\"hidden\" name=\"datum\" value=\"
    $datum\"></td><td><input type=\"reset\" value=\"Abbruch\">
         <img src=\"clear.gif\" height=\"1\" width=\"10\"><input type=\"submit\" value=\"Vorschau\"></td></tr>
        </table><input type=\"hidden\" name=\"confirm\" value=\"edit_preview\"></form>"
    ;   
       echo 
    "</font></td></tr></table>";
       if (
    $id != "" AND $load != "no") { mysql_free_result($ergebnis); } # Abfrageergebnis leeren
      
    break;
    /* --------------------------------------------------------------------- Vorschau für Änderungen ----------------------------------------------------------------- */ 
      
    case "edit_preview"# Vorschau für Änderungen
       
    if ($titel == "" OR $inhalt == "")
       {
        echo 
    "
         <font class=\"fehler\">Fehler: Sie haben keinen Titel oder keinen Inhalt angegeben.
         <br><br><a href=\"
    $PHP_SELF?page=edit&id=$id\">zurück zum Bearbeiten</a>
          </p>"
    ;
        echo 
    "</font></td></tr></table>";
       }
       else
       {
        
    $inhalt=show_inhalt($inhalt);
        echo 
    "
         <font class=\"text\">So wird die Nachricht angezeigt. Bitte prüfen Sie den Inhalt und speichern dann die Nachricht ab.
          </p>"
    ;
        echo 
    "<h4>$titel</h4><p class=\"nachricht\">Vom $datum, zuletzt geändert am $heute<br><br>$inhalt</p>
         Links zum Thema:<br>"
    ,show_links($links);
        echo 
    "<br><br><table cellspacing=\"10px\"><tr><td>";
        echo 
    "<form action=\"$PHP_SELF?id=$id\" method=\"post\"><input type=\"hidden\" name=\"titel\" value=\"$titel\">
         <input type=\"hidden\" name=\"inhalt\" value=\"
    $inhalt\"><input type=\"hidden\" name=\"links\" value=\"$links\">
         <input type=\"hidden\" name=\"confirm\" value=\"edit_c\"><input type=\"submit\" value=\"Speichern\"></form>"
    ;
        echo 
    "</td><td>";
        echo 
    "<form action=\"$PHP_SELF?id=$id&load=no\" method=\"post\"><input type=\"hidden\" name=\"titel\" value=\"$titel\">
         <input type=\"hidden\" name=\"inhalt\" value=\"
    $inhalt\"><input type=\"hidden\" name=\"links\" value=\"$links\">
         <input type=\"hidden\" name=\"confirm\" value=\"edit\"><input type=\"hidden\" name=\"datum\" value=\"
    $datum\">
         <input type=\"submit\" value=\"Bearbeiten\"></form>"
    ;
        echo 
    "</td></tr></table>"
        echo 
    "</font></td></tr></table>";
       }
      break;
    Die verwendete Funktion "show_inhalt" wendet nur die Funktionen nl2br und stripslashes auf $inhalt an.
     
  2. kalweit

    kalweit Hüter der Glaskugel

    Du hast einfach die "\" entfernt, um $inhalt auszugeben. Aber anstatt den originalen $inhalt in dem Feld abzulegen, tust du das mit dem bearbeiteten. Lass die Neuzuweisung von $inhalt einfach weg und benutz folgendes:

    ....echo "<h4>$titel</h4><p class=\"nachricht\">Vom $datum, zuletzt geändert am $heute<br><br>".show_inhalt($inhalt)."</p>.....

    Gruss, Matthias
     
  3. Dr. Ali

    Dr. Ali Byte

    Das habe ich auch schon probiert. Allerdings wird dann bei jeder Übergabe der Backslash genau wie die Anführungszeichen behandelt, sprich es wird auch davor ein weiterer Backslash eingefügt.

    Trotzdem danke.
     
  4. kalweit

    kalweit Hüter der Glaskugel

    Na und? Das Verhalten ist ganz normal und lässt sich auch nicht verhindern. Man kann die überflüssigen Backslash per String-Funktion (z.B. str_replace) einfach vor dem Speichern entfernen.

    Gruss, Matthias
     
  5. Dr. Ali

    Dr. Ali Byte

    Der Inhalt der Variablen wird dennoch beim " abgeschnitten.

    Ich habe allerdings jetzt doch eine Lösung gefunden. Die Variablen müssen mit "htmlspecialchars" ins Formular eingetragen werden. Damit bleibt der Inhalt unverändert und alles ist wieder schön :)
     
Thread Status:
Not open for further replies.

Share This Page