Formular-Reload: Var-Übergabe

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Formular-Reload: Var-Übergabe

    Hallo Community,
    ich habe ein Problem, was sich zwar sicher recht einfach lösen lässt, aber auf dessen Lösung ich einfach nicht komme.

    Ich habe ein Formular mit 2 Textareas ("Headline", "Inhalt") und zwei voneinander abhängige Radio-Buttons ("Bild hochladen: ja/nein").
    Der Radiobutton für den Dateiuplaod ist standardmäßig auf "nein" gesetzt.
    Klickt der User auf "ja" so soll das Formular neu laden und anschließend die Zeile mit den Radiobuttons durch das Upload-Feld ersetzt werden.

    Jetzt habe ich mir ein Javascript geschrieben, dass das Formular neu lädt.
    Das funktioniert auch soweit, nur ein Ärgernis krieg ich nicht beseitigt:
    Da die Werte aus dem Textfeld ja erst als $HTTP_POST geschrieben werden wenn ich auf den "Submit"-Button klicke gehen mir alle eingetragenen Werte verloren sobald das Formular den Javascript-Reload durchführt.
    Ziel soll allerdings sein, dass die Werte auch nach dem Java-Reload noch im Formular stehen.

    Gibt es eine Möglichkeit, die bereits erfolgten Usereingaben in Variablen zu schreiben, sodass sie auch nach dem Java-Reload noch in dem Textarea stehen?

    Zur Übersicht hier noch der Quelltext:
    PHP-Code:
    [...]
    <table border="1" align="center">
    <form action="" method="post" name="form">
    <tr>
    <td>&Uuml;berschrift</td>
    <td colspan="2"><textarea name="news_headline"><? echo $HTTP_POST_VARS["news_headline"]; ?>
    </textarea></td>
    </tr>
    <tr>
    <td>Inhalt</td>
    <td colspan="2"><textarea name="news_inhalt"><? echo $HTTP_POST_VARS["news_inhalt"]; ?>
    </textarea></td>
    </tr>
    <?
    if ($_REQUEST["bild"]=="ja")
       { ?>
       <tr>
       <td>Bild einf&uuml;gen</td>
       <td colspan="2"><input name="bilddatei" type="file"></td>
       </tr>
    <? }
    else { ?>
    <tr>
    <td>Bild einf&uuml;gen</td>
    <td><input type="radio" name="Auswahlfeld" value="ja" onclick="javascript:location.replace('news_eingabe.php?bild=ja')">ja</td>
    <td><input type="radio" name="Auswahlfeld" value="nein" CHECKED>nein</td>
    </tr>
      <? } ?>
    </form>
    </table>
    [...]
    Ich bedanke mich schonmal rein prophylaktisch für geniale Lösungsansätze

    Grüße,
    Dampfi
    Zuletzt geändert von Dampfi; 03.01.2007, 13:07.

  • #2
    Weiss nicht ob du das meinst aber:

    PHP-Code:
    if(!isset($_POST['news_headline'])){
         $_POST['news_headline'] = $_GET['news_headline'];
    }

    ...

    java script:location.replace('news_eingabe.php?bild=ja&<?=$_POST['news_headline'];?>')
    Musst halt mit beiden machen. würde aber so gehen. Und $_POST anstatt $HTTP_POST_VARS benutzen
    Zuletzt geändert von Damian1984; 03.01.2007, 13:09.
    Für Rechtschreibfehler übernehme ich keine Haftung!

    Kommentar


    • #3
      Ziel soll allerdings sein, dass die Werte auch nach dem Java-Reload noch im Formular stehen.
      Dann musst du vor dem Reload zuerst den Status dieser Felder feststellen, speichern, den Reload machen und die Daten wieder reinschreiben.

      Oder habe ich dich jetzt nicht ganz verstanden ?

      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        @damian: Danke erstmal für diese Lösung. Leider kann ich deinen Vorschlag erst morgen ausprobieren... Aber das wird das erste sein, was ich versuche

        Original geschrieben von jahlives
        Dann musst du vor dem Reload zuerst den Status dieser Felder feststellen, speichern, den Reload machen und die Daten wieder reinschreiben.
        Ja, das ist der richtige Ansatz.
        Nur mit PHP ist mir kein anderer Weg bekannt, als Vars über ein $_POST aus einem Formular zu nehmen.
        Müsste ich diese Funktion dann auch als Javascript machen?
        Wenn dem so ist, dann wäre es nicht schlecht wenn mir jemand einen Link zu einem Tutorial oder so schicken könnte, da ich von Javascript eigentlich kaum Ahnung habe...
        Zuletzt geändert von Dampfi; 03.01.2007, 15:47.

        Kommentar


        • #5
          Du hast 2 Mglk. entweder wie ich, das an den Link zu hängen und dann wird das per $_GET übergeben. Oder du machst es mit einer Session.
          Für Rechtschreibfehler übernehme ich keine Haftung!

          Kommentar


          • #6
            Hab mal eben folgendes gebaut:
            PHP-Code:
            <?php
              
            if(isset($_GET['text']))
                
            $value=$_GET['text'];
              else
                
            $value='';
            ?>

                <script type="text/javascript">
                  function goto(url,id) {
                  window.location=url+'?text='+document.getElementById(id).value;
                }
                </script>
                <textarea id="text" name="text"><? echo $value; ?></textarea><br />
                <input type="radio" name="test" onclick="javascript:goto('reload.php','text');" />
            <input name="test" type="radio" onclick="javascript:goto('reload.php','text');" />
            Das Script macht folgendes:
            Du gibst in die Textarea einen beliebigen Text ein. Sobald du nun auf eine der beiden Radioboxen klickst, läd die Seite neu und der Inhalt von der Textarea wird anhand einer ID ausgelesen und an die URL angehängt. Du kannst nun einfach per PHP diesen Wert auslesen ($_GET) und als Value einbauen. Du kannst natürlich auch noch einen Wert anhängen, welcher signalisiert, dass die Radioboxen durch einen Uploadformular ersetz werden sollen. Hoffe das du danach gesucht hast.

            Gruß matze
            Zuletzt geändert von matze|p; 03.01.2007, 16:30.

            Kommentar


            • #7
              @ matze: THX erstmal, ich probier des gleich mal aus und meld mich dann wieder

              Also ich hab jetzt doch mal einen Webserver emuliert bei mir zu Hause (was ich eigentlich vermeiden wollte, aber egal)

              Also Damian, deine Lösung funktioniert irgendwie nicht.
              Vielleicht habe ich es falsch eingebaut, aber ich denke es liegt eher ein Missverständnis vor.

              Der User hat ein dreistufiges Formular.
              Als erstes gibt er eine Headline ein, als zweites den Inhalt und als drittes legt der User fest ob er ein Bild dazu hochladen möchte.
              Standardmäßig steht der Radiobutton auf nein, d.h. der User klickt jetzt auf SENDEN und alle Einträge liegen als $HTTP_POST_VARS vor, die ich anschließend weiterverarbeite.
              Klickt der User aber beim letzten Punkt auf "JA", dann greift sofort das Javascript, macht einen Reload, denn auf dem aktualisierten Formular steht jetzt statt den Radiobuttons das Dateifeld und der DURCHSUCHEN-Button. Allerdings sind jetzt die Einträge des Users verloren, da er das Formular ja nicht abgeschickt hat und ich somit keine $HTTP_POST_VARIABLEN verarbeiten kann.
              Und genau das ist das Problem

              In deinem Lösungsweg ist die $_POST-Variable ebenfalls leer (eigentlich auch ganz logisch)...

              Kommentar


              • #8
                So, Dampfi, hab mein Script mal noch verbessert, hatte vergessen den String zu maskieren (es wurden keine Zeilenumbrüche etc übertragen) Mit diesem Javascript geht es jetzt korrekt:
                Code:
                <script type="text/javascript">
                    function goto(url,id) {   
                        window.location=url+'?text='+escape(document.getElementById(id).value);
                    }
                </script>

                Kommentar


                • #9
                  Danke matze, hab auch deine erste Version schon zum Laufen bekommen
                  Bei javascript hatte sich noch ein Leerzeichen eingeschlichen

                  Funktioniert soweit erstmal prima. Danke dafür.
                  Ich habe aber noch Bedenken: Da ja der Inhalt unter anderem auch mit Zeilenumbrüchen ist und durchaus mal mehr als 255 Zeichen lang sein kann, ist es da nicht eher schlecht dieses als angehängten String an die Site-Adresse zu schreiben? Gibt es da keinen anderen Weg, hätte das lieber über Vars gemacht...

                  Aber egal, ich bin dir erstmal dankbar für diese Lösung. Ich wäre von selbst nicht drauf gekommen!

                  Kommentar


                  • #10
                    Mh da hast du schon recht, dummerweise bin ich auch nicht besonders fit in JavaScript und bekomme gerade mal solche Miniscripts auf die Reihe :P Kann gut sein, dass es eine Möglichkeit gibt, Daten auch per POST zu übertragen, werd mal bisschen schauen, wenn ich was finde melde ich mich nochmal.

                    Kommentar


                    • #11
                      So, hab das jetzt auch mal angepasst, damit das auch mit beiden Feldern funktioniert

                      Für alle Mitleser und Interessierten hier nun das fertige Schnipsel Quellcode. Danke an matze für die schnelle Hilfe

                      PHP-Code:
                      <script type="text/javascript">
                          function goto(url,id,id2) {   
                              window.location=url+'&headline='+escape(document.getElementById(id).value)+'&inhalt='+escape(document.getElementById(id2).value);
                          }
                      </script><link rel="stylesheet" type="text/css" href="css/style.css">
                      </head>
                      <body>
                      <br>
                      <br>
                      <center>
                      <?
                        if(isset($_GET['headline']) AND isset($_GET['inhalt']))
                          {$news_headline=$_GET['headline'];
                           $news_inhalt=$_GET['inhalt'];}
                        else
                          {$news_headline='';
                           $news_inhalt='';}
                      ?>
                      <table border="1" align="center">
                      <form action="" method="post" name="form">
                      <tr>
                      <td>&Uuml;berschrift</td>
                      <td colspan="2"><textarea id="news_headline" name="news_headline"><? echo $news_headline; ?></textarea></td>
                      </tr>
                      <tr>
                      <td>Inhalt</td>
                      <td colspan="2"><textarea id="news_inhalt" name="news_inhalt"><? echo $news_inhalt; ?></textarea></td>
                      </tr>
                      <? 
                      if ($_REQUEST["bild"]=="ja")
                         { ?>
                         <tr>
                         <td>Bild einf&uuml;gen</td>
                         <td colspan="2"><input name="bilddatei" type="file"></td>
                         </tr>
                      <? }
                      else { ?>
                      <tr>
                      <td>Bild einf&uuml;gen</td>
                      <td><input type="radio" name="bild" onclick="javascript:goto('news_eingabe.php?bild=ja','news_headline','news_inhalt');">ja</td>
                      <td><input type="radio" name="bild">nein</td>
                      </tr>
                        <? } ?>
                      </form>
                      </table>


                      <a href="main.php">Zurück zur Startseite</a><br>
                      <tr>
                      <td></td>
                      </tr>
                      </table>

                      Kommentar


                      • #12
                        Dir ist auch ein Leerzeichen bei javascript: reingerutscht

                        Kommentar

                        Lädt...
                        X