Ankündigung

Einklappen
Keine Ankündigung bisher.

'Vorschau'-Funkion bei einem GB/Forum?

Einklappen

Neue Werbung 2019

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

  • 'Vorschau'-Funkion bei einem GB/Forum?

    Hallo phpfriend.de-Leute

    Bin fleissig am PHP lernen und hab mir so ne Art Gästebuch gebastelt, allerdings hab ich ein kleines Problem beim Eintrageformular:

    Ich möchte, wie in vielen Foren genutzt, eine Funktion, mit der ich den Post, bevor er abgeschickt wird mit einem Vorschau-Button anzeigen lassen kann, machen aber hab einfach keine elegante Lösung!

    Ich hab schnell ein kleines Beispiel aufgesetzt um das ganze zu verdeutlichen:

    Einfaches Formular, wenn ich den Button "vorschau" klicke wird der Post oben angezeigt, wenn ich Senden klicke, sollten die Formular-Daten an die submit.php-Datei weiter gegeben werden wo sie in die DB eingetragen werden!

    PHP-Code:
    <?php
    // Vorschau
    if(isset($_POST['preview'])){
    echo    
    "[b]Preview[/b]

             Name: "
    .$_POST['name']."

              Eintrag: "
    .$_POST['eintrag']."
            "
    ;
    }

    // Abschicken
    if(isset($_POST['send'])){
        
    header("location:submit.php");
    }

    // Mein Eintrage-Formular
    echo     "<form name='eintragung' method='post' action='".$_SERVER['PHP_SELF']."'>
              

    Name

                <input type='text' name='name' value='"
    .$_POST['name']."'>
              </p>
              

    Eintrag

                <textarea name='eintrag'>"
    .$_POST['eintrag']."</textarea>
                

                <input name='preview' type='submit' id='preview' value='Vorschau'>
                <input name='send' type='submit' id='send' value='Senden'>
              </p>
            </form>"
    ;
    ?>
    Als Test, lasse ich mir die übergebenen Daten in der submit.php-Datei ausgeben:

    PHP-Code:
    <?php
    echo    "[b]Folgendes in die DB schreiben:[/b]

             Name: "
    .$_POST['name']."

              Eintrag: "
    .$_POST['eintrag']."
            "
    ;
    ?>
    Problem:
    Ich kann die Daten so nicht übergeben, da sie ja nicht mehr aus dem Formular heraus gepostet werden wegen header("location:blabla")!

    Wie müsst ich das jetzt bewerkstelligen, damit ich eine Vorschau hab und die Daten, wenn ich zufrieden bin, eintragen lassen kann?

    PS; Hab mir auch gedacht, die Einträge mit einer Session zu übergeben, weis aber nicht ob das Performance-Mässig so schlau ist, zumindest wenn man einen langen Post macht. oO
    Diese Signatur wird bis auf weiteres Bestreikt!


  • #2
    ch kann die Daten so nicht übergeben, da sie ja nicht mehr aus dem Formular heraus gepostet werden wegen header("location:blabla")!
    Du trägst die Werte einfach in Hidden-Fehler ein, oder du zeigst dem User (besser noch) das Formular einfach erneut - mit dem Beitrag darüber und darin.
    PHP-Code:
    <?php
    echo 'Name: ' $_POST['name'];
    echo 
    '
    Eintrag: ' 
    nl2br(htmlentities($_POST['eintrag']));

    // Hier zeigst du nun dein ganz normales Formular an
    echo '<textarea name="eintrag" rows="10" cols="30">' $_POST['eintrag'] . '</textarea>';
    ?>

    Kommentar


    • #3
      Hm also das mit den Hidden-Feldern versteh ich nicht ganz..
      Kannst du mir das ein wenig genauer erklären?

      Wenn ich den Vorschau-Button drück zeigt er ja schon den Beitrag und das Formular an:

      PHP-Code:
      <?php
      // Vorschau
      if(isset($_POST['preview'])){
      echo   
      "[b]Preview[/b]

             Name: "
      .$_POST['name']."

              Eintrag: "
      .$_POST['eintrag']."
            "
      ;
      }

      //Und hier das Formular, welches ja weiterhin Sichtbar ist..
      echo    "<form name='eintragung' method='post' action='".$_SERVER['PHP_SELF']."'>
              

      Name

               <input type='text' name='name' value='"
      .$_POST['name']."'>
              </p>
              

      Eintrag

               <textarea name='eintrag'>"
      .$_POST['eintrag']."</textarea>
               

               <input name='preview' type='submit' id='preview' value='Vorschau'>
               <input name='send' type='submit' id='send' value='Senden'>
              </p>
            </form>"
      ;
      ?>
      Die Submit-Datei muss ja lediglich aufgerufen werden, wenn ich die Formular-Daten in die DB eintragen lassen will, und ich kann meine Werte da irgendwie nicht mehr aufrufen, weil sie nicht mehr als $_POST['eintrag'], etc. ansprechen kann.

      Mein Formular geht ja bei Abschicken nicht auf Submit.php sondern bleibt auf sich selbst (ich weis, das ist falsch so aber wie kann ich sonst eine Vorschau machen ohne das er auf eine andere Datei springt.)

      PHP-Code:
      <?php
      echo "<form name='eintragung' method='post' action='".$_SERVER['PHP_SELF']."'>";
      ?>

      Hoffe das hat jetzt nicht noch mehr verwirrt.. ich wette, es gibt dafür eine Simple Lösung
      Diese Signatur wird bis auf weiteres Bestreikt!

      Kommentar


      • #4
        Ehrlichgesagt verstehe ich dein Problem nicht
        PHP-Code:
        <?php
        echo "<input name='send' type='submit' id='send' value='Senden'>";
        ?>
        Hier hast du doch deinen SubmitButton, den du zum Eintragen benutzt, nich? In der PHP Datei frägst du dann doch ab, ob $_POST['send'] gesetzt ist.
        Die Submit-Datei muss ja lediglich aufgerufen werden, wenn ich die Formular-Daten in die DB eintragen lassen will, und ich kann meine Werte da irgendwie nicht mehr aufrufen, weil sie nicht mehr als $_POST['eintrag'], etc. ansprechen kann.
        Wenn du das Formular abschickst muss das auch funktionieren - lass dir mal alles mit echo bzw print_r() ausgeben..

        Kommentar


        • #5
          Also gut *g* ich erklär nochma was ich eigentlich will

          Ich bin in der Eintragen.php Datei, da wo mein Formular is und geb meinen Text usw. ein. Nu will ich mir eine Vorschau von dem ganzen machen und mit dem Klick auf den "Vorschau"-Button soll ohne das eine neue Datei (z.B. Submit.php) geladen wird, also in der selben Datei (bzw. in sich selbst *g*) oberhalb des Eintrage-Formulars das Prefiew erscheinen. Da ich beim Formular $_SERVER['PHP_SELF'] sage macht er das auch

          Ich denk jetzt mal, deine Idee wäre gewesen, das er beim Klicken auf den "Vorschau"-Button schon in die Datei submit.php geht und dort die Vorschau anzeigt und erst mit ner Überprüffung ala isset(); in die DB schreibt. Das wäre durchaus auch möglich, aber ich will das er die Vorschau in der Eintragen.php-Datei anzeigt, da ich die Submit.php-Datei für alle möglichen Verbindungen mit der DB benötige und da kein Formular drin stecken darf

          PHP-Code:
          <?php
          // So sieht mein Formularkopf zur Zeit aus..
          echo "<form name='eintragung' method='post' action='".$_SERVER['PHP_SELF']."'>";

          //So müsste er aussehn wenn ich (denk jetzt mal^^) deine Idee machen würd.
          echo "<form name='eintragung' method='post' action='Submit.php'>";

          //Dann könnt ich mir auch folgendes ersaren:
          if(isset($_POST['send'])){
             
          header("location:submit.php");
          }
          ?>
          Aber..
          Nehmen wir jetzt mal das Board hier als Beispiel..

          Mein Eintrageformular ist ja auch auf der posting.php-Datei und wenn ich jetzt auf Vorschau klicke lädt auch keine neue Datei. Aber wie ist es jetzt möglich (ja das ist schon die ganze Zeit meine Frage ), dass es abgesendet wird, wenn man auf "Absenden" klickt? oO Sind doch beides Buttons vom Typ 'submit'!

          (Schade hab ich keine einsicht in den PHP-Code)
          Diese Signatur wird bis auf weiteres Bestreikt!

          Kommentar


          • #6
            Uffuffuff..
            Dass beide vom Typ submit sind macht nichts:
            PHP-Code:
            <?php
            if(isset($_POST['preview'])) {
                    echo 
            'Vorschau';
            }
            elseif(isset(
            $_POST['addentry'])) {
                    echo 
            'Eintragen';
            }

            echo 
            '<form action="'.$_SERVER['PHP_SELF'].'" method="post">';
            echo 
            ' <input type="submit" name="preview" value="Vorschau" />
            '
            ;
            echo 
            ' <input type="submit" name="addentry" value="Absenden" />
            '
            ;
            echo 
            '</form>';
            ?>
            Du müsstest du die beiden Funktionen (Vorschau + Eintragen) eben in eine Datei stecken.

            (Schade hab ich keine einsicht in den PHP-Code)
            Diesen kannst du jederzeit auf www.phpbb.de herunterladen

            Ich hoffe ich hab diesmal deine Frage richtig verstanden, bin erst grad von der Schule gekommen *Entschuldigung such*

            Kommentar


            • #7
              möglichkeit 1:
              temporäres Datenbankfeld wo der post "zwischengelagert" wird.

              möglichkeit 2:
              du schreibst das zeug temporär in ne textdatei (unelegant).

              möglichkeit 3:
              daten per href="speichern.php?post=blabla" an die endgültige seite übergeben

              möglichkeit 4: (die beste denke ich)
              die daten in eine <form> mit <hidden> feldern geben, und dann per button endgültig eintragen lassen.
              keine

              Kommentar


              • #8
                Zwischenspeichern denk ich ist doch fast schon zu aufwendig.. aber jo wäre ne möglichkeit. Die Post per GET zu übergeben find ich leider recht unschön und eskaliert doch, wenn man einen 'dicken' Eintrag macht

                Nun zu den <hidden> Feldern.. wie genau meint ihr das? Ich hab da k.A. leider, kann nid mal wer ein kleines Beispiel machen? Wäre euch wirklich Dankbar

                Grüsse Chris

                /Edit
                LoL *Chr!s's Post nid gesehn hat* ..oO woher kommt den der^^

                Daran hab ich noch gar nicht gedacht, das ganze in ein und der selben Datei zu machen.. Gehen würds ja wirklich, aber obs auch ne gute Lösung ist.. hm danke jedenfalls und ja du hast mich jetzt wohl verstanden

                Ahjo ich glaub die Source saug ich mir wirklich noch
                Diese Signatur wird bis auf weiteres Bestreikt!

                Kommentar


                • #9
                  Gehen würds ja wirklich, aber obs auch ne gute Lösung ist..
                  Ich habs so in meinem gecodeten Forum für meine neue COmmunity gemacht, und andere Foren haben es soweit ich weiß doch auch so

                  Kommentar


                  • #10
                    Code:
                    // ausgabe des posts
                    
                    // form mit hidden feldern füllen
                    <form name="iwas" method="POST" action="eintrag.php">
                    <input type="hidden" name="user" value="$user">
                    <input type="hidden" name="betr" value="$betr">
                    <input type="hidden" name="post" value="$post">
                    <input type="submit" value="Eintragen">
                    </form>
                    keine

                    Kommentar


                    • #11
                      Der Nachteil ist hier nur, dass der User auf "Zurück" klicken muss um seinen Beitrag zu editieren - zeigst du dem User bei der Vorschau das Formular nochmal, kann er jederzeit was ändern ( das ist ja der Sinn des Vorschaus ^^)

                      Kommentar


                      • #12
                        Mh ja.. ich habs jetzt auf die Chr!s-Methode gelöst mit ein und derselben Datei *g* ..bin zufrieden damit :wink:

                        Danke Leute für eure Hilfe
                        Diese Signatur wird bis auf weiteres Bestreikt!

                        Kommentar


                        • #13
                          Jo die Methode hat sogar einen Namen ^^
                          http://de.wikipedia.org/wiki/Affenformular
                          http://www.php-faq.de/q/q-stil-normalform.html
                          schlimmer gehts nimmer.... dümmer immer!

                          Kommentar

                          Lädt...
                          X