Maurice: php + textarea ?!

Hallo,

wollte eigentlich nur wissen wie ich mit PHP und HTML ein Eingabefeld (wie textarea) basteln kann.

Also ich will:

eine bestimmte Datei öffnen --->Inhalt ausgeben lassen ----> Inhalt ändern ----> Daten in die geöffnete Datei schreiben ---> fertig.

Folgender Quellcode ist vorhanden:

<?
$offen = "$root_dir/index.php";      #Datei Pfad

fopen ("$offen" , "r+");        #Datei mit schreibrechten öffnen
?>
<form action="<? $offen ?>" method="post">   #Inhalt an Datei
<center>
<textarea cols="40" rows="10" name="text"><? include ("$offen");?> #Datei Inhalt einfügen
</textarea><br>
<input type="hidden" value="1" name="send">
<input type="submit" value="Aktuallisieren" name="submit">
</center>
</form>

Soweit funktioniert alles... nur from action übergibt die aktualisierten Daten nicht an die Datei.

Kann mir jemand sagen was da falsch läuft oder kennt jemand noch einen anderen Weg?!

Gruß
Maurice

  1. Auch Hallo,

    erstmal:

    Trenne die

    • Parameterübernahme
    • Parameterkontrolle
    • Entscheidungsstruktur
    • Datenverarbeitung
    • Ausgabegenerierung
    • Ausgabe

    strikt voneinander.

    Und dann kannst Du mit:

    [...]
      - Datei öffnen
      - Datei sperren
      - Datei lesen

    wenn Post "ändern" vorhanden
        - Schreibzähler des gewünschten Datensatzes vergleichen  *)
        wenn gleich mit dem geposteten
          - Zähler erhöhen
          - Datei rückspulen
          - neue Daten wegschreiben
          - Erfolgsmeldung
          Datei schließen
        sonst
          - Fehlermeldung "Datei wurde seit Ihrem Lesen verändert"

    sonst
        - Datei ausgeben (an Format denken! htmlentities())

    Datei schließen und damit entsperren

    *) Schreibzähler: Ohne einen Schreibzähler oder Zertifikat kann man im verbindungslosen Protokoll keine gemeinsamen Daten verwalten.

    LG
    Chris

    1. Also in dem style?!

      if (is_writable($offen)) {
       if (!$handle = fopen($offen, "a")) {
               print "Kann die Datei $filename nicht öffnen";
               exit;
          }
       if (!fwrite($handle, $somecontent)) {
              print "Kann in die Datei $filename nicht schreiben";
              exit;
          }

      print "Fertig, in Datei $offen wurde $somecontent geschrieben";

      fclose($handle);

      } else {
          print "Die Datei $filename ist nicht schreibbar";
      }

      Gruß
      Maurice

      1. Hallo Maurice,

        if (is_writable($offen)) {
        if (!$handle = fopen($offen, "a")) {
                 print "Kann die Datei $filename nicht öffnen";
                 exit;
            }
        if (!fwrite($handle, $somecontent)) {
                print "Kann in die Datei $filename nicht schreiben";
                exit;
            }

        print "Fertig, in Datei $offen wurde $somecontent geschrieben";

        fclose($handle);

        } else {
            print "Die Datei $filename ist nicht schreibbar";
        }

        Jein.
        Das ist erst ein Viertel der Miete.

        Besser ist es, für jede Aufgabe eine eigene Funktion zu bauen, die auch definierte Rückgabewerte (Statuscodes, Fehlermeldungen) produziert.

        Und die Ausgabe sollte man immer erst ganz am Ende veranlassen.

        Außerdem war Deine Aufgabenstellung doch, mittels Textarea den Inhalt einer Datei (also auch die vorhandenen Daten) zu manipulieren, also nicht nur etwas hinzuzufügen.

        Such mal hier im Archiv nach "Affenformular". Das hilft Dir weiter.

        LG
        Chris

  2. echo $begrüßung;

    Folgender Quellcode ist vorhanden:

    <?

    Sei nicht so schreibfaul (-: Diese short_open_tags-Option kann man abschalten und dann funktionieren dein Scripte nicht mehr auf solchen Systemen. Verwende lieber <?php

    fopen ("$offen" , "r+");        #Datei mit schreibrechten öffnen

    Variablen, die nicht durch weitere Strings ergänzt werden sollen, können ohne Anführungszeichen verwende werden.

    <form action="<? $offen ?>" method="post">   #Inhalt an Datei

    Wenn du schon abkürzt, dann richtig: <?=$offen ?> Ohne das = kommt der Variableninhalt nicht an die von dir beabsichtigte Stelle. Hast du dir den erzeugten Quelltext angezeigen lassen? Sicher nicht.
    Besser: <?php echo $offen ?>

    <textarea cols="40" rows="10" name="text"><? include ("$offen");?> #Datei Inhalt einfügen

    So produziert man Sicherheitslücken. Soll das was man in diese Textarea eingibt wirklich von PHP geparst und ausgeführt werden? Damit kann jeder Dinge anstellen, zu der die Userkennung, die das Script ausführt, in der Lage ist. readfile() wäre angebrachter. Und auch das ist noch nicht richtig, weil damit die HTML-Sonderzeichen < > & " nicht berücksitigt werden. So kann man immer noch clientseitige Scriptsprachen ausführen.

    echo "$verabschiedung $name";

  3. Hi,

    ergänzend:

    PHP ...

    fopen ("$offen" , "r+");        #Datei mit schreibrechten öffnen

    ... hat als Basis die Root des Server-Dateisystems ("/"), während HTTP ...

    <form action="<? $offen ?>" method="post">   #Inhalt an Datei

    ... den Pfad des Dokument-Root als Basis braucht.

    Davon abgesehen: Du editierst das Script, das auch die Verarbeitung der Daten vornimmt.

    Das ist wohl kaum das, was Du im Sinn hattest, oder irre ich mich?

    Gruß, Cybaer

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  4. Hallo,

    zur Ergänzung:

    Folgender Quellcode ist vorhanden:

    <?
    $offen = "$root_dir/index.php";      #Datei Pfad

    fopen ("$offen" , "r+");        #Datei mit schreibrechten öffnen

    Was sollte eigetnlich mit der geöffneten Datei geschehen?
    So kannst Du wweder darauf zugreifen, noch sie wieder schließen.

    fopen() liefert als Funktionsergebnis ein Handle, dass auf gar keinen Fall verloren gehen darf. Wenn dieses Handle !== false ist (nicht identisch false), dann sollte es gültig sein und Die  Dateifunkionen können damit auf die Datei zugreifen.

    LG
    Chris

    1. Also... mein Vorhaben:

      Kleines Portal mit Adminbereich OHNE MYSQL!

      Im Adminbereich möchte ich auch nur kleine Einträge vornehmen.
      Sprich:

      • Startseiten Text ändern
      • News hinzufügen (bzw den alten Beitrag löschen und nur den neuen Beitrag hinzufügen)
      • Portal online / offline setzten
      • etc.

      gar nichts großes sondern nur ein kleines ding.

      Ich möchte das ohne MySQL machen weil ich keine lust habe mir die sachen jetzt noch anzueignen wenn ich die sowieso nur einmal brauche... das wissen was ich über HTML und PHP habe das reicht mir eigendlich schon aus....

      Das Affenformular habe ich soweit ja eigendlich schon gehabt... aber die daten werden einfach nicht in die datei übertragen. das ist ja eigendlich nur mein problem.

      Gruß
      Maurice