Michael W.: Scripte aufrufen

Hallo,

ich habe hier ein script (save.php): (...)
------------------------
<?php
$file = "text.txt";
$data = fopen($file, "w");
fwrite($data, $Content);
fclose($data);
?>
--

(...) der seite:
----------

<html>
<head>
<title></title>
</head>
<body>
<form action="save.php">
<textarea cols="80" rows="6" name="Content">
<?php
$file = "text.txt";
$data = fopen($file, "r");
$count = fread($data, filesize($file));
fclose($data);
echo $count;
?>
</textarea>
      <br />
      <input type="submit" value="jetzt will ich gespeichert werden" />
   </form>
</body>
</html>
-------

ich möchte das script aber in die seite einschließen. wie macht man das. ich möchte das das script beim betätigen des buttons aufgerufen wird.

* wo muss das script positioniert werden ?
* was muss ich ins formular schreiben damit es aufgerufen wird ?

Danke

  1. Hallo,

    Du musst den Code so einbauen, dass beim Aufruf das Formular gezeigt wird, nach dem Abschicken der Code abgearbeitet wird. Am einfachsten ist das mit einer if-else-Anweisung für die im Formular noch ein Check-wert eingebaut wird. Ist der wert $ok auf 1, so wird der Code ausgeführt, ansonsten wird die else-Anweisung ausgeführt und das Formular angezeigt:

    <html>
    <head>
    <title></title>
    </head>
    <body>

    <?php
    if($ok==1):
       $file = "text.txt";
       $data = fopen($file, "w");
       fwrite($data, $Content);
       fclose($data);
       // Sinnvollerweise sollte hie rnoch eine Bestätigungsausgabe kommen
    else:
     ?>

    <form action="save.php">

    <input type="hidden" name="ok" value="1">

    <textarea cols="80" rows="6" name="Content">
    <?php
    $file = "text.txt";
    $data = fopen($file, "r");
    $count = fread($data, filesize($file));
    fclose($data);
    echo $count;
    ?>
    </textarea>
          <br />
          <input type="submit" value="jetzt will ich gespeichert werden" />
       </form>

    <? endif; ?>

    </body>
    </html>

    Grüße aus Würzburg
    Julian

    1. Ok es funktioniert. Aber warum nur einmal
      http://mitglied.lycos.de/djwoelk3/test/test2.php es soll beliebig oft gehen

      und 2. es wird eine leere seite aufgerufen !!?

      Ich möchte das man auf der seite bleibt und der text, egal wie oft, in der besagten text.txt gespeichert wird. nur wie ?

      1. Ok es funktioniert. Aber warum nur einmal
        http://mitglied.lycos.de/djwoelk3/test/test2.php es soll beliebig oft gehen

        und 2. es wird eine leere seite aufgerufen !!?

        Ich möchte das man auf der seite bleibt und der text, egal wie oft, in der besagten text.txt gespeichert wird. nur wie ?

        Nachsatz:
        Ok das es nur einmal gespeichert wird war quatsch (dumm von mir).
        http://mitglied.lycos.de/djwoelk3/test/test3.php

        aber trotzdem möchte ich wissen wie man nach dem aufruf des scriptes auf der seite bleibt !

        Danke

        1. und geht das auch mit mehreren feldern ?
          so wie hier, nur eben das es gehen sollte ...
          http://mitglied.lycos.de/djwoelk3/test/test4.php

          Danke

          1. Das Thema beschäftigt mich richtig :)

            wie bringe ich das jetzt in ein <input type=text ...>
            die textarea ist mir zu groß.

            Danke

        2. Hi.

          Eigentlich ganz einfach:
          Ich habe den Weg gezeigt, dass entweder $ok=1 oder eben nicht (if-else). Wenn Du den else-Teil (also das Formular) immer haben willst, dann fragen wir dafür eben nichts ab, sondern lassen das immer ausführen.
          Wir sollten dann aber drandenken, dass wir das bereits verarbeitete $ok vorsichthalber nach dem speichern wieder löschen.

          <?php
          if($ok==1):
             $file = "text.txt";
             $data = fopen($file, "w");
             fwrite($data, $Content);
             fclose($data);
             unset($ok);
          endif;
           ?>

          <form action="save.php">
          <input type="hidden" name="ok" value="1">
          (...)
          <!-- hier kommt jetzt nichts mehr mit PHP, alle Klammern sind schon abgeschlossen -->

          Grüße aus Würzburg
          Julian

          1. auch Hi

            Da war jetzt irgendwie nichts neu dran !!?
            http://mitglied.lycos.de/djwoelk3/test/test7.php

            ich wollte
            a) das keine neue seite aufgerufen wird sondern stattdessen zb ein alert aufgerufen wird und mir sagt das es gespeichert wurde (und das auch so ist)
            b) keine großen textfelder sondern die von der marke <input type=text
            und
            c) wollte ich wissen wie es möglich ist mehrere felder zum speichern zur verfügung zu stellen. um genau zu sein 22 (22 schüler http://www.djwoelk.de/10b)

            Ok ich geb zu: das hört sich so an, als ob du das für mich zu lösen hättest. aber das wäre echt nett. ein link zu bekannten php-seiten wo man gut infos bekommt (auch zu diesem Thema und wo man vieleicht fertige scripte findet). trotzdem: am liebsten wärs mir wenn du mir a b und c mal schnell aufschreiben könntest.
            ich habe aber bei a so das gefühl, dass das nicht geht - das wird doch sowas wie eine bestätigungsseite aufgerufen, oder? - die will ich aber nicht. ich bin halt noch php-anfänger (eigentlich bin ich gezwungen das einzusetzen und hab eigentlich gar nicht so richtig lust drauf, obwohl es schon interessant ist (irgendwie weiss ich nicht was ich will) ;). Naja, Bitte bitte bitte helf mir noch bei diesem problem und erklär mir mal wie ich bei a weiterkommen könnte, dass das dann so aussieht wie ich das will :)

            Danke (Danke auch schon für die letzten postings)

            1. http://mitglied.lycos.de/djwoelk3/test/test7.php

              ich wollte
              a) das keine neue seite aufgerufen wird sondern stattdessen zb ein alert aufgerufen wird und mir sagt das es gespeichert wurde (und das auch so ist)
              b) keine großen textfelder sondern die von der marke <input type=text
              und
              c) wollte ich wissen wie es möglich ist mehrere felder zum speichern zur verfügung zu stellen. um genau zu sein 22 (22 schüler http://www.djwoelk.de/10b)

              ok - hab den fehler in problem a) beseitigt:

              man darf keine action angeben -> action="save.php" -> action=""

              bleibt noch b) und c) ;)

              1. http://mitglied.lycos.de/djwoelk3/test/test7.php

                ich wollte
                a) das keine neue seite aufgerufen wird sondern stattdessen zb ein alert aufgerufen wird und mir sagt das es gespeichert wurde (und das auch so ist)
                b) keine großen textfelder sondern die von der marke <input type=text
                und
                c) wollte ich wissen wie es möglich ist mehrere felder zum speichern zur verfügung zu stellen. um genau zu sein 22 (22 schüler http://www.djwoelk.de/10b)

                schön !!!! problem c) ist auch beseitigt
                http://mitglied.lycos.de/djwoelk3/test/test8.php

                nur noch b) ;)

                1. Hallo Michael,

                  bist ja schwer am basteln wenn man so die Zeitabstände der Postings anschaut. :-)

                  Gut, den Text in ein input-Feld statt in textarea:
                  Berücksichten wir die "Energie des Verstehens" und gehen es schrittweise an, dass Du auch für spätere Projekte was davon hast.

                  <textarea>
                  <?php
                  $file = "text.txt";
                  $data = fopen($file, "r");
                  $count = fread($data, filesize($file));
                  fclose($data);
                  echo $count;
                  ?>
                  </textarea>
                  Schreibt bekanntlich das ganze in ein Textarea.

                  Wie definiert man den Inhalt eines input-Feldes vor? Genau "...value='Hier steht a'".
                  Jetzt brauchen wir also nur noch den Wert und müssen unsere Erkenntnisse zusammenfügen:
                  In obigem Skript wird stückchenweise der Inhalt der Datei ausgelsen und in $count gespeichert. Der Wert wird dann via "echo $count" ausgegeben.
                  "<?php" ist der Beginn von PHP-Code, "?>" das Ende.
                  Also erhalten wir:

                  <?php // Einlesen der Daten in $count
                  $file = "text.txt";
                  $data = fopen($file, "r");
                  $count = fread($data, filesize($file));
                  fclose($data);
                  ?>

                  <!-- das input-Feld mit entsprechender Vorbelegung -->
                  <input name="feldname" value="<?php echo count; ?>">

                  Das mit den action-Attribut ist nicht die ganz saubere Lösung. Der Inhalt soll ja an die Datei selbst geschickt werden. action="dateiname" wäre also besser, oder aber gleich action="<? echo $PHP_SELF; ?>" was auch immer den aktuellen Dateiname einbindet.

                  Ein paar Links zum Thema PHP:
                  http://www.phpwelt.de
                  http://www.dynamic-webpages.de
                  ...und sicher sind auf der SelfLinkseite noch ein paar sehenswerte Seiten.
                  PHP ist eine wunderbare und eigentlich auch leicht verständliche Sprache. Einfach mal anfangen rumzuspielen.

                  Grüße aus Würzburg
                  Julian

                  1. OK :)
                    Ich glaub ich habs jetzt "verstanden"
                    man kann mit Php daten intern speichern und die dann beliebig ausgeben

                    echo ist so gesehen ein "echo" einer intern gespeicherten angabe

                    http://mitglied.lycos.de/djwoelk3/test/test9.php - das es zu so einem ergebniss gekommen ist habe ich nur dir zu verdanken ;)

                    trotzdem es kommen ständig neue fragen auf:

                    warum steht nach dem speichern des textes in dem input feld wieder das was vorher drin stand und erst nach einem reload das neue ?

                    Danke

                    1. http://mitglied.lycos.de/djwoelk3/test/test9.php - das es zu so einem ergebniss gekommen ist habe ich nur dir zu verdanken ;)

                      trotzdem es kommen ständig neue fragen auf:

                      warum steht nach dem speichern des textes in dem input feld wieder das was vorher drin stand und erst nach einem reload das neue ?

                      UND: wie schaffe ich es da ein bestätigungs alert bei jedem speichern einzubauen wo der gerade geschriebene text nochmal ausgegeben wird ?
                      zb.: "test test test" --> Speichern  --> Alert: "test test test wurde gespeichert".

                    2. Hallo,

                      echo ist so gesehen ein "echo" einer intern gespeicherten angabe

                      jain. mit echo kann man einfach irgendwas mal ausgeben. Du könntest also auch in den speichernden Codeteil am Ende ein
                        echo "Daten sind gespeichert.<br>\n";
                      einfügen um an dieser Stelle den Test auszugeben. Oder gleich die Daten mit einbauen:
                        echo "Folgende Daten sind gespeichert: $count<br>\n";

                      warum steht nach dem speichern des textes in dem input feld wieder das was vorher drin stand und erst nach einem reload das neue ?

                      Hm, gute Frage, sehr gute Frage. Dass im den Moment, in dem die Datei ausgelesen wird, noch der alte Inhalt drin steht wäre unlogisch. Andererseits, wo sollen die Daten dann rumhängen? Versuch doch mal vor dem Einlesen ein "unset($count)" um ganz sicher zu gehen, dass die Variable neu angelegt werden muss (d.h. auch ihr Wert garantiert neu ist).
                      Falls es nicht klapp, poste doch nochmal den aktuelle Quellcode.

                      Noch eine Empfehlung: setze in das form-Tag noch ein method="post", damit erscheinen die Werte des Felder nicht in der Adresszeile und schaffen durch fehlende Manipulierbarkeit etwas mehr Sicherheit.

                      Grüße asu Würzburg
                      Julian

                      1. jetzt raff ich garnichts mehr http://mitglied.lycos.de/djwoelk3/test/test02.php

                        quelltext:
                        ----------

                        <html>

                        <head>
                        <title></title>
                        </head>

                        <body>
                        <?php
                        unset($count);
                        $file = "text.txt";
                        $data = fopen($file, "r");
                        $count = fread($data, filesize($file));
                        fclose($data);
                        ?>

                        <?php
                        if($ok==1):
                           $file = "text.txt";
                           $data = fopen($file, "w");
                           fwrite($data, $Content);
                           fclose($data);
                           unset($ok);
                           echo "Folgende Daten sind gespeichert: $count<br>\n";
                        endif;
                         ?>
                        <form method="post" action="<? echo $PHP_SELF; ?>">
                        <input type="hidden" name="ok" value="1">
                        <input type="text" name="Content" size="20" value="<?php echo $count; ?>">
                              <input type="submit" value="Save">
                          </form>
                        </body>
                        </html>
                        -------

                        ??? habe ich alles richtig gemacht ???

                        1. ich glaub ich habs:

                          beim laden der seite wird der wert (sagt man das so ?) $count aufgerufen und ausgegeben (echo $count).

                          beim speichern eines neuen textes wird dieses script aktiv:

                          <?php
                          if($ok==1):
                             $file = "text.txt";
                             $data = fopen($file, "w");
                             fwrite($data, $Content);
                             fclose($data);
                             unset($ok);
                          endif;
                           ?>

                          Es speichert die eingegeben daten in die text.txt.
                          doch der wert wird NICHT in $count gespeichert.
                          $count hängt also immer eins hinterher.

                          es müsste also noch ein teil ins script das den eingebenen wert auch gleich in $count speichert. wie ?

                          1. PHP hat die schönen Eigenschaft, dass es sehr programmiererfreundlich arbeitet. Eine Eingabe aus einem Formular steht Dir einfach als Variable mit Namen des Formularfeldes zur Verfügung.
                            Heißt Dein Feld also Content, so steht Dir in PHP nach dem Abschicken eine Variable $Content zur Verfügung, die den Inhalt des Feldes als Wert hat.
                            => entweder Du benennst Dein Feld um in count, oder Du ersetzt überall das $count gegen ein $Content

                            Grüße aus Würzburg
                            Julian

                            1. Das klingt ja auch mal logisch und ich hatte aber auch gerade eine nette lösung (die auch gehen muss) bis auf ein problem das ich mir wieder nicht erklären kann

                              http://mitglied.lycos.de/djwoelk3/test/t3.php
                              schaus dir mal an

                              ich habe das script so umgeschreiben, dass nach jedem speichern der wert $count mitgespeichert wird. jetz hängts nur noch da dran: der neue text darf nicht mehr zeichen haben, wie der alte. gibt man mehr zeichen wie der text vorher hatte ein und speichert, schneidet er den neuen text an der stelle ab wo der alte aufhörte ???

                              wo liegt da jetzt der fewhler ?

                              1. ich glaube wir müssen das sogar so machen wie ich mir gedacht habe, denn
                                http://mitglied.lycos.de/djwoelk3/test/ht1.php
                                was du gesagt hattest war zwar nicht falsch, aber wenn du die seite mal genauer betrachtest haben wir immernoch das problem das nach dem speichern wieder die letzte eingabe steht und nach dem reload die neue. also habe ich recht wir müssen dem script sagen, dass er es zwingend in $count speichern muss. bleibt die frage warum kann ich im neuen text nicht mehr zeichen haben wie im letzten ?

                                1. JAAAAAAAAAA
                                  http://mitglied.lycos.de/djwoelk3/test/j3.php

                                  quelltext:
                                  ----------

                                  <html>

                                  <head>
                                  <title></title>
                                  </head>

                                  <body>
                                  <?php
                                  if($ok==1):
                                     $file = "text.txt";
                                     $data = fopen($file, "w");
                                     fwrite($data, $Count);
                                     fclose($data);
                                     unset($ok);
                                  endif;
                                  $file = "text.txt";
                                  $data = fopen($file, "r");
                                  $count = fread($data, filesize($file));
                                  fclose($data);
                                   ?>
                                  <form method="post" action="<? echo $PHP_SELF; ?>">
                                  <input type="hidden" name="ok" value="1">
                                  <input type="text" name="Count" size="20" value="<?php echo $count; ?>">
                                        <input type="submit" value="Save">
                                    </form>
                                  </body>

                                  1. JAAAAAAAAAA

                                    Es läuft?

                                    fwrite($data, $Count);

                                    ...

                                    $count = fread($data, filesize($file));

                                    Bin mir nicht 100% sicher, wie es in PHP gehandhabt wird, es ist aber verständlicher Variablen immer gleich zu schreiben, nicht einmal groß und einmal klein. Ggf. kann das nämlich als unterschiedliche Variable verstanden werden (z.B. in Java). Überlicherweise werden Variablen einfach kleingeschrieben.

                                    Grüße aus Würzburg
                                    Julian