[PHP / HTML] Abgeschnittener Inhalt bei Variablenübergabe

Dieses Thema im Forum "Programmieren" wurde erstellt von Dr. Ali, 2. Januar 2006.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Dr. Ali

    Dr. Ali Byte

    Registriert seit:
    20. Oktober 2003
    Beiträge:
    58
    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

    Registriert seit:
    18. April 2000
    Beiträge:
    31.467
    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

    Registriert seit:
    20. Oktober 2003
    Beiträge:
    58
    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

    Registriert seit:
    18. April 2000
    Beiträge:
    31.467
    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

    Registriert seit:
    20. Oktober 2003
    Beiträge:
    58
    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 :)
     
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen