andi: html site anzeigen

Hallo,
Frage an Php Spezialisten:
ich habe einen admin und einen public Bereich. Sind alles
php files. Wenn ich im Adminbereich(php) einen html Quellcode in ein
textarea field hineinkopiere, dann möchte ich das diese htmlseite im public Bereich(php) wieder genauso formatiert und sichtbar ist wie in html.

Danke
Andi

  1. Hi,

    Wenn ich im Adminbereich(php) einen html Quellcode in ein
    textarea field hineinkopiere, dann möchte ich das diese htmlseite im public Bereich(php) wieder genauso formatiert und sichtbar ist wie in html.

    oh, bitte, tu das. Ich hab da nichts gegen.

    Soll heißen: Was ist nun eigentlich Dein Problem?

    Cheatah

    1. Hi Andi,

      Cheatah fragte gerade, was Dein Problem ist. Ich will mal versuchen, DeinE ProblemE in Worte zu fassen:

      Du willst eine HTML-Seite im öffentlichen Bereich anbieten
        Das ist kein Problem, du weisst, wie das geht.

      Du willst ein php-Script im öffentlichen Bereich bereitstellen. damit beim Aufruf daraus dynamisch eine HTML-Seite entsteht. Auch kein Problem.

      Du weisst, dass nur der Parser (wwwrun) Zugriff auf die Dateien braucht, und zwar nur lesenden.

      Nun willst Du ein PHP-Script bauen, das eine Textarea enthält und das nur vom Admin aufgerufen werden darf. Das kannst Du erreichen, indem Du das Script in ein geschütztes Verzeichnis stellst. (.htaccess) Außerdem kannst Du dem Script selber eine Passwortabfrage einbauen.

      Die Textarea kannst Du in einer Textdatei in jedem beliebigen Verzeichnis abspeichern, auf das der PHP-Deamon (wwwrun) schreibenden Zugriff hat. Der Name der Datei ist frei wählbar.

      HÜTE DICH aber davor, eine Endung zuzulassen, die der PHP-Deamon als zu interpretiernde Datei (php-Datei) ansehen würde. Du solltest die Endung der Datei fest im Programm verdrahten, auch wenn Du viellicht den Namen über ein input-Feld eingeben willst.

      Nun ein wenig Code, der Dir weiterhelfen sollte...

      <html>
        <head>
          <meta http-equiv="expires" content="0">

      <title>Uebung Textfelder mit PHP füllen</title>
        </head>

      <body>

      <?
             if ($datenfeld)
               $datenfeld = stripslashes($datenfeld);
      //         $datenfeld = strip_tags($datenfeld);  Wenn man keine HTML-Tags wünscht

      if ($new)
             {
               $datei=fopen("../daten/textdatei.txt","w+");
               fputs($datei,$datenfeld);
               fclose($datei);
             }

      if ($append)
             {
               $datei=fopen("../daten/textdatei.txt","a+");
               fputs($datei,$datenfeld);
               fclose($datei);
             }

      if ($delete)
             {
               $datei=fopen("../daten/textdatei.txt","w+");
               fclose($datei);
             }

      ?>

      <form action="uebung_textfeld.php" name="edit" ID="edit"
              method="post" enctype="multipart/formdata">

      <textarea rows="20" cols="60" name="datenfeld" id="datenfeld" wrap="soft"><?
                 if (file_exists('../daten/textdatei.txt'))
                   readfile('../daten/textdatei.txt')
            ?></textarea>

      <br>

      <input type="submit" name="new" ID="new" value="überschreib den alten Mist">
            <input type="submit" name="append" ID="append" value="dazu zum alten Mist">
            <input type="submit" name="delete" ID="delete" value="wech mit dem Zeuch">
          </form>
        </body>
      </html>

      Eine installierte Version findest du unter http://bitworks.de/~tschmieder/uebung_textfeld.php

      Die Textdatei liegt hier außerhalb der Document Root in einem extra Datenverzeichnis. Hierauf hat nur der PHP-Deamon Zugriff, nicht aber der Apache "HTML-Deamon".

      Wenn Du daraus neuen Code entwickelst, der funktioniert, dann schick mir bitte eine Kopie für meine Sammlung.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      1. Hallo Tom,
        Danke einmal für Deine Antwort. Nur trifft es nicht ganz dass was ich bräuchte. Du siehst unten den Quelltext meiner Ein- und Ausgabefiles. Wie in Deinem Beispiel sollen auch bei mir alle html tags entfernt werden bis auf Zeilenumbrüche und image tags. Ich brauche diese Möglichkeit damit ein User, der keine Ahnung von html hat den html Quellcode in das Eingabescript hineinkopieren kann und seine Seite dann auch so dargestellt wird.
        Ist zwar etwas viel code den ich hier hineinschreibe aber ich glaube es dient dem besseren Verständnis meines Problems.
        Wie gesagt, es sollen bei der Eingabe alle html tags entfernt werden bis auf die Zeilenumbrüche und image tags. Dann das ganze in eine db speichern und von dort wieder auslesen mit den Zeilenumbrüchen und image tags.

        Danke für Eure Hilfe
        Andi

        EINGABE Script1

        <?
        include("config.php");
        mysql_connect($db_host,$db_user,$db_pass) || die("Could not contact mySQL!");
        mysql_select_db($db_db) || die("Connected mySQL, but database is unavailable!");
        print("
        <html>
        <head>
        <title></title>
        <SCRIPT LANGUAGE=JavaScript>
        function verify_page()
        {
        {
        document.frmRegister.submit();
        }
        }
        </SCRIPT>
        </head>
        <BODY bgcolor="#ffffff">
        <BR>
        <FORM name="frmRegister" action="kategorie_new_r.php" method="post">
        <TABLE width="500" cellspacing="1" cellpadding="3" border="0" bgcolor="#336699">
        <INPUT type="HIDDEN" name="txtid" value="$sid">
        <tr>
        <td bgcolor="#336699" align="center" colspan="2">
        <font size="3" color="#ffffff"><b>Eintrag hinzufügen</b></font><br>
        </td>
        </tr>

        <tr>
        <TD bgcolor="#ffffff"><b>Titel:</b></TD>
        <TD bgcolor="#ffffff"><INPUT name="txttitel" size="40" maxlength="40"></TD>
        </TR>
        <tr>
        <TD bgcolor="#ffffff"><b>Autor:</b></TD>
        <TD bgcolor="#ffffff"><INPUT name="txtautor" size="40" maxlength="40"></TD>
        </TR>
        <tr>
        <TD bgcolor="#ffffff"><b>*Abteilung:</b></TD>
        <TD bgcolor="#ffffff"><INPUT name="txtabteilung" size="40" maxlength="40"></TD>
        </TR>
        <tr>
        <TD bgcolor="#ffffff" valign="top"><b>Inhalt:</b></TD>
        <TD bgcolor="#ffffff"><textarea name="txtinhalt" cols="60" rows="40"></textarea></TD>
        </TR>
        <tr>
        <td bgcolor="#ffffff" align="center" colspan="2"><INPUT type="button" value="einfügen" ONCLICK="verify_page()"></TD>
        </TR>
        </TABLE>
        </FORM>
        </div>
        </BODY>
        </html>
        ");
        ?>

        EINGABE Script2

        <?
        include("config.php");
        mysql_connect($db_host,$db_user,$db_pass) || die("Could not contact mySQL!");
        mysql_select_db($db_db) || die("Connected mySQL, but database is unavailable!");
        // Werte des Formulars
        $titel  = $HTTP_POST_VARS["txttitel"];    // [1]
        $autor       = $HTTP_POST_VARS["txtautor"];      // [2]
        $inhalt       = $HTTP_POST_VARS["txtinhalt"];        // [3]
        $abteilung      = $HTTP_POST_VARS["txtabteilung"];       // [4]

        // in DATENBANK einfügen
        if ( $abteilung == "" )
        {
        echo "<body bgcolor="#336699">";
        echo "<div align="center">";
        echo "<br>";
        echo "<table border="0" cellspacing="1" cellpadding="3" bgcolor="#000000">";
        echo "<tr>";
        echo "<td bgcolor="#e2e2e2" align="center">";
        echo "<font face="arial" size="2">";
        echo "Das Feld <b>Abteilung</b> muss ausgefüllt werden<br>";
        echo "<a href="kategorie_new.php">Zurück zur Eingabe</a>";
        echo "</font>";
        echo "</td>";
        echo "</tr>";
        echo "</table>";
        echo "</div>";
        echo "</body>";
        }
        else
        {
        $sqlInsert  = "INSERT INTO kategorie (titel, autor, inhalt, abteilung) VALUES ('$titel', '$autor', '$inhalt', '$abteilung')";
        $result = mysql_query($sqlInsert);

        if (mysql_error())
        {
        echo mysql_error();
        exit;
        }
        // Bestätigung über Eingabe
        print("
        <html>
        <head>
        <title></title>
        </head>
        <BODY bgcolor="#ffffff">
        <br>
        <TABLE align="center" cellspacing="1" cellpadding="3" border="0" bgcolor="#336699">
          <tr>
            <td bgcolor="#336699" align="center"><font size="3" color="#ffffff"><b>Insert erfolgreich!</b></font></td>
          </tr>
          <tr>
          <td bgcolor="#ffffff" align="center"><A HREF="index.php?abteilung=$abteilung">Zurück zur &Uuml;bersicht</A></td>
          </tr>
        </table>
        </BODY>
        </html>
        ");
        }
        ?>

        AUSGABE

        <?
        $db = mysql_connect("","", "");
        mysql_select_db("test_db",$db);
        $result = mysql_query("SELECT * FROM kategorie WHERE id=$id",$db);

        while($row=mysql_fetch_array($result))
        {
        $id=$row["id"];
        $titel=$row["titel"];
        $abteilung=$row["abteilung"];
        $autor=$row["autor"];
        $inhalt=$row["inhalt"];
        $inhalt = nl2br($inhalt) ;

        echo "<table width="600" cellspacing="1" cellpadding="3" bgcolor="#336699">";
        echo "<TR>";
        echo "<TD bgcolor="#ffffff" valign="top">";
        echo "<b>".$titel."</b><br>";
        echo "</td>";
        echo "</tr>";
        echo "<tr>";
        echo "<td bgcolor="#ffffff">";
        echo $inhalt;
        echo "</TD>";
        echo "</TR>";
        echo "</table>";
        echo "<br>";
        }
        ?>

        1. Hallo Andi,

          dann bist Du mit meinem Beispiel ja schon am Ziel. Von datanbank war ja vorhin nicht die Rede, aber das bekommst du sicher hin.

          Du musst nur die Funktion strip_tags() in der erweiterten Form benutzen.

          $newText = strip_tags($oldText,"<img>,<br>");

          Probiers mal aus. Die Tags in den Häkchen beschreiben die Ausnahmen, die nicht entfernt werden.

          Grüße

          Tom

          1. Hallo Tom,
            Tschuldigung das ich nichts von einer db erwähnt habe.
            Mein Fehler.
            Dein Tip funktioniert wunderbar.
            Ich habe jetzt noch ein kleines Problem das mich eigentlich schon länger verfolgt.
            Wenn ich in ein textarea, das folgender maßen aussieht:

            <textarea name="txtinhalt" value="$sMember[3]" cols="40" rows="20">$sMember[3]</textarea>

            einen Inhalt mit html quellcode hineinkopiere, dann wird mir dieses
            textarea beim nächsten Aufruf dieses Datensatzen in einer Standardgröße = klein angezeigt obwohl es eigentlich relativ groß dargestellt werden müßte --> cols=40 rows=20.
            Ohne htmlcode ist das kein Problem.
            Woran kann das liegen???

            Andi

            1. Hallo Tom,
              Dieses Problem mit der richtigen Anzeige des textarea Feldes habe ich in der Zwischenzeit gelöst. Das Ptoblem waren bzw. sind die doppelten Hochkommas im html Quellcode.

              Danke nochmal für Deine Hilfe

              Andi

  2. Hallo Tom,
    Das Problem mit der Darstellung des textarea habe ich in der Zwischenzeit gelöst. Die doppelten Hochkommas aus dem html code waren das Problem.

    Danke nochmals für Deine Hilfe

    Andi