Weiterleitung von Daten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Weiterleitung von Daten

    Hallo Forum!

    Mit meinen bescheidenen Kenntnissen habe ich mich bisher immer irgendwie durchwurschteln können, aber da muss es doch eine elegante und vor allem professionelle Lösung geben.

    Und zwar die Herausforderung:
    Eine Auswahlliste sendet per GET Daten an ein Formular, welches mittles dieser GET-Daten vorausgefüllt wird. Dort kann man dann die Daten bearbeiten. Zur Bearbeitung gehts weiter zur Auswertungsseite und per Location:... wieder zurück zum Formular.

    Und jetzt das Problem:
    Logischerweise gibt´s nach der Auswertung keine GET-Daten mehr. Und somit bleibt auch das Formular leer. Ich hab mir mit SESSION weiter geholfen. Aber da muss ich beim ersten Formularaufruf unterscheiden, kommen die Daten jetzt von der Auswahlliste (GET) oder kommen die Daten von der Auswertung (SESSION). Wär schon machbar, aber ich kann mir nicht vorstellen, dass das der richtige Weg ist. Mir scheint das zu umständlich.

    Wie macht ihr Profis das?

    Lg, Chris
  • Merk dir mal folgendes:

    Bei einem Formular sollte auf die gleich Seite gepostet werden und nur im Erfolgsfall dann mit zb Location weitergeschickt werden (die daten können dann via location trotzdem mit get weitergegeben werden, bei sensiblen daten aber mittels sessions)

    if(isset(POST)) { //auswertung, if(auswertung==true){ sessionxy; location nextpage } }
    formular mit vordeifnierten values
    Output Buffering :)
  • @mad:

    Ja, als Schleife könnte man das bezeichnen. Konkret möchte ich usern Auftragsnummern zuteilen.

    1.: Alle user werden aufleistet. Ein klick auf den Bleistift befördert mir die user-ID per GET in ein nettes Formular.
    2.: In diesem Formular hab ich ein SELECT, das aus der DB mit den verfügbaren Auftragsnummern gefüllt wird. Per onchange gehts weiter zur nächsten Seite.
    3.: Hier wird die Auswahl in die DB eingetragen. (In diesem Fall ist ja nix zu prüfen, würde ich aber auch hier machen). Weil ein Auftrag pro Person aber viel zu wenig ist, solls zurück zum Formular gehen. Also Location: ...
    4.: Ab jetzt fehlen mir die GET-Daten. Bis Seite 3 gehts ja noch mit HIDDEN, bzw. sowieso direkt aus dem Formularfeld. Aber Seite 3 hat kein Formular. Oder soll ich da eins reinkonstruieren mit lauter hidden-Feldern? Glaub ich nicht...
    Also in Seite 3 aus den GET-Daten SESSION-Daten kreieren.
    Das Formular versteht aber nur GET und nicht SESSION. Also prüfen woher ich gerade komme...? Von der Userliste oder von der DB-Eintragung...?

    Ihr werdet den Kopf schütteln, aber ich hab´s derweil so gelöst:

    Seite 4 (Also wieder das Formular) ist quasi eine Kopie von der Seite 2 (ja, das gleiche Formular). Nur werden hier keine GET-Variablen abgefragt, sondern SESSION-Variablen. Die hab ich ja in der Seite 3 angelegt.
    Seite 5 (Wieder die Eintragung in die DB) ist quasi eine Kopie von der Seite 3. Ab jetzt gibts nur noch SESSION-Variablen und ich kann so lange Aufträge zuweisen wie ich will.

    Extrem umständlich und ganz bestimmt nicht profimäßig...
  • Kannst du deine Formularvalues nicht an der stelle einfach mit $_REQUEST bearbeiten? Damit kannst du ja POST und GET Variablen "abfangen"

    Sind deine GET Daten da, wirds damit gefüllt sind deine POST Daten da wird es damit gefüllt. Einzige Bedingung ist natürlich, dass die POST und GET Variablen die gleichen namen bekommen

    GET([wert=5])
    POST([wert=5])

    Die Auswertungsseite sollte dann natürlich auf der gleichen Seite in dem Falle formular.php sein.

    Quellcode

    1. <form action="formular.php" method="POST">
    2. <input type="text" name="wert" value="<?php echo $_REQUEST['wert'];?>">
    3. <input type="submit" name="submit" value="Abschicken">
    4. </form>
    5. <?php
    6. if(isset($_POST['submit']) && $_POST['submit']=='Abschicken'){
    7. //deine auswertungsseite
    8. }
  • Im Grunde ist deine Lösung schon in Ordnung, ich würde aber wenn du mit Sessions arbeites die Session schon dort füllen, wo du die Daten zum erstenmal aus Get/Post empfängst

    Aber hier einmal wie ich es lösen würde :)

    Quellcode

    1. <?php
    2. defined('PION') or die('no access');
    3. class Modul_User_Controller_User extends Pion_Controller {
    4. public function init() {
    5. }
    6. public function indexAction() {
    7. $userMapper = new Modul_User_Mapper_User();
    8. $users = $userMapper->getUsers();
    9. $this->view->users = $users;
    10. }
    11. public function editUserAction() {
    12. if(isset($this->request->isGet()) {
    13. $idOrSession = $this->request->getParam['id']
    14. $_SESSION['id'] = $idOrSession;
    15. } else {
    16. $idOrSession = $_SESSION['id']]
    17. }
    18. $userMapper = new Modul_User_Mapper_User();
    19. $user = $userMapper->getUser($idOrSession);
    20. $this->view->user = $user;
    21. if ($this->request->isPost()) {
    22. //daten in datenbank schreiben
    23. //
    24. //weiterleitung
    25. $this->redirect('user', 'user', 'editUser');
    26. }
    27. }
    28. }
    Alles anzeigen
    Output Buffering :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pion ()

  • Ich halte Request für eine sehr unsaubere Lösung, da sich Werte überschreiben und du vorallem per Quellecode nicht weist woher die Daten kommen , mache lieber eine If wie in meinen Beispiel das ist übersichtlicher und Wartungsfreundlicher

    Ansonsten immer schön an XSS denken bei der Ausgabe im Formular


    mfg
    Output Buffering :)
  • Vor- und Nachname stehen in einer extra Tabelle. Hab mir so weit wie möglich die Normalisierung zu Herzen gelegt.
    Sicher kann ich auch mit der ID dort wieder abfragen. Aber jetzt stellt sich die Frage: Eigens eine DB-Abfrage oder zwei Variablen mitschleppen... Weiß nicht was praktischer ist. Bei der bisherigen Arbeit hat´s mich noch nicht gestört.