Stefan K.: variable für eine ganze html seite

Beitrag lesen

Hallo,

kann ich in ein input feld type=hidden als value ein platzhalter angeben um darin eine html seite zu speichern die an den server geschickt wird und als htm abgespeichert wird ?

möglich ist das schon, wenn der Text innerhalb des value-Attributes mit der PHP-Funktion htmlentities http://www.php.net/manual/de/function.htmlentities.php vorbereitet wird.

Anderen Beiträgen dieses Threads war aber zu entnehmen, dass der Anwender den Inhalt nicht manipulieren können soll. Dies kann jedoch bei hidden-Formularelementen nicht gewährleistet werden, da sie clientseitig manipulierbar sind (mit etwas Know-How). Das gilt ebenso für deine ID. Generell sollte man keine sicherheitstechnisch kritischen Informationen per hidden-Formularfeld weitergeben, denn alles was zum Anwender und wieder zurück übertragen wird ist angreifbar! Statt dessen können die meisten Daten auch noch im letzten Schritt erzeugt bzw. zusammengesetzt werden.

Es reicht doch völlig aus, wenn du die HTML-Seite erst nach dem Abschicken aus den Formulardaten (Name, Alter, usw.) zusammensetzt und auch die ID erst beim Speichern erzeugst.

wobei das speichern nicht das problem ist. mir fehlt die kenntis des gesamten scripts.

Ja, es gibt viel zu lernen, bis man das alles versteht. ;-)

das ganze sollte so aussehen

formular.php:

hier ist das formular mit allen möglichen fragen drin
Name
Alter
Bla und Blub

so und beim speichern werden dann diese Daten wieder ausgegeben (auch kein problem). aber so wie man sie jetzt auf dieser seite sieht möchte ich sie jetzt auch speichern (ohne variable), so das die seite fertig geschreiben auf dem server liegt.

zb.:

Formular.php:

Name: Michael
Alter: 16
Bla und blub: bla

--> Speichern

Save.php:

Sind die daten so korekkt ?
Dei Name ist Michael, Du bist 16 und bla und blub.

--> OK --> Speichern auf Server mit diesen Daten unter den namen der Person --> also Michael.htm

zusätzlich sollte auch in eine externe liste hinzugefügt werden, dass michael.htm dazu gekommen ist.

da habe ich mir gedacht das durch diese hidden - felder zu machen.
das eine fügt den link in eine txt datei (die extern ausgegeben wird) hinzu:

Dafür brauchst du kein hidden-Feld. Das Formularskript, das alle nötigen Schritte durchführt, könnte z.B. folgendermaßen aussehen:

formular.php:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
  <title>Formular</title>
</head>
<body>
  <?php
    $bAbgeschickt = ( $HTTP_SERVER_VARS['REQUEST_METHOD'] == 'POST' );

if( $bAbgeschickt ) {
      $strName = $HTTP_POST_VARS['Name'];
      $iAlter  = $HTTP_POST_VARS['Alter'];
      $bSpeichern = ( $HTTP_POST_VARS['Aktion'] == 2 );

if( $strName == '' || $iAlter == '' ) {
        $strMeldung = "<h2>Bitte alle Felder ausfüllen!</h2>\n";
        $bSpeichern = false;
      } else {
        $strHTML  = "Name: $strName<br>\n";
        $strHTML .= "Alter: $iAlter<br>\n";
        $strHTML .= "usw.<br>\n";

if( $bSpeichern ) {
          $strDateiname = 'eintrag-'.md5( uniqid( rand() ) ).'.html';
          $fd = fopen( $strDateiname, 'w' );
          fwrite( $fd, '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
  <title>'.$strName.'</title>
</head>
<body>
  '       );
          fwrite( $fd, $strHTML );
          fwrite( $fd, "\n</body>\n</html>" );
          fclose( $fd );
          $fd = fopen('liste.inc.txt', 'a');
          fwrite( $fd, '<a href="'.$strDateiname.'">'.$strName."</a><br>\n" );
          fclose( $fd );
          $strMeldung = '<h2>Der Eintrag wurde gespeichert.</h2><a href="liste.php">Zur Liste.</a>';
        } else {
          $strMeldung = '<h2>Vorschau:</h2><hr>'.$strHTML.'<hr>';
        }
      }
    } else {
      $strName = '';
      $iAlter  = '';
      $bSpeichern = false;
    }

echo $strMeldung;

if( !$bSpeichern ) {
  ?>
  <form action="formular.php" method="post">
    Name:<br>
    <input type="text" name="Name" value="<?php echo $strName; ?>"><br>
    Alter:<br>
    <input type="text" name="Alter" value="<?php echo $iAlter; ?>"><br>
    <input type="radio" name="Aktion" value="1"<?php
      if( !$bSpeichern ) echo ' checked'; ?>> Vorschau<br>
    <input type="radio" name="Aktion" value="2"<?php
      if( $bSpeichern ) echo ' checked'; ?>> Speichern<br>
    <input type="submit" value="Abschicken">
  </form>
  <?php
    }
  ?>
</body>
</html>

liste.txt:

<a href=Tim>Tim</a>
<a href=Sandra>Sandra</a>

  • <a href=Michael>Michael</a>

Die Ausgabe dieser Liste könnte z.B. so aussehen (aber das scheint dir ja schon klar zu sein):

liste.php:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
  <title>Liste</title>
</head>
<body>
  <h1>Liste</h1>
  <?php require('liste.inc.txt'); ?>
  <br>
  <a href="formular.php">Neuen Eintrag erstellen.</a>
</body>
</html>

und das andere speichert die html seite
nur da man keine html-parts in eine value schreiben kann muss ich dafür einen platzhalter suchen und das kann man mit den variablen von php sehr gut machen.

<input type="hidden" name="<? echo $html; ?>">

Folgendermaßen sollte das funktionieren:
<input type="hidden" name="Quelltext" value="<?php echo htmlentities($html); ?>">
Aber davon möchte ich ganz stark abraten (siehe oben).

beim bestätigen der korekkten daten sollen dann im darauf folgenden script die daten auf dem server gespeichert werden. oder so :| ?

aber ich glaub wenn die variable html durch html erstezt wird geht das doch auch nicht, oder ?

wie mache ich das jetzt ?

Danke

Weiterhin viel Spaß mit PHP und immer fleißig üben.

Grüße
Stefan