You are not logged in.

  • Login

1

Tuesday, December 7th 2010, 4:40pm

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

2

Tuesday, December 7th 2010, 4:44pm

Was heißt denn Auswertungsseite? Speicherst du die Daten da irgendwo?
Irgendwie ist das ein Kreislauf: Auswertung (mit Select-Liste) -> Formular -> Auswertung -> Formular -> ... ???

Ich überlege gerade, ob das vom Aufbau her Sinn macht. Wofür genau verwendest du das? Oder habe ich den Aufbau falsch verstanden?

3

Tuesday, December 7th 2010, 4:46pm

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

4

Thursday, December 9th 2010, 3:06pm

@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...

5

Thursday, December 9th 2010, 3:08pm

@pion:

Klingt souverän! Aber ich glaube, ich brauche deine Anleitung etwas genauer damit ich das in die Praxis umsetzen kann.

6

Thursday, December 9th 2010, 3:32pm

Na an sich machst du es doch aber richtig. Du füllst ein Formular, indem du prüfst, ob die Daten gesendet wurden oder schon gespeichert sind.
Allerdings ist das einzige, was du in der Session ablegen musst doch die ID des Users? Der Rest wird doch in Schritt 3 in die DB gespeichert und kann somit in Schritt 5 wieder ausgelesen werden...

7

Thursday, December 9th 2010, 3:39pm

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.

PHP Quellcode

1
2
3
4
5
6
7
8
9
<form action="formular.php" method="POST">
<input type="text" name="wert" value="<?php echo $_REQUEST['wert'];?>">
<input type="submit" name="submit" value="Abschicken">
</form>
 
<?php
if(isset($_POST['submit']) && $_POST['submit']=='Abschicken'){
//deine auswertungsseite
}

8

Thursday, December 9th 2010, 3:39pm

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 :)

PHP Quellcode

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

This post has been edited 1 times, last edit by "Pion" (Dec 9th 2010, 3:49pm)


9

Thursday, December 9th 2010, 3:45pm

@mad:

Na damit hätte ich jetzt nicht gerechnet, dass ich was richtig mache :-)

Neber der user-ID schicke ich noch Vor- und Nachname mit. Aber das läuft so nebenbei mit.

10

Thursday, December 9th 2010, 3:48pm

@snowflake

Ich glaube, es war das Stichwort $_REQUEST. Dieses Thema muss ich mir aber noch genauer anschauen. Ich steck halt noch etwas in den Kinderschuhen.

11

Thursday, December 9th 2010, 3:51pm

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

12

Thursday, December 9th 2010, 3:53pm

@Pion

Na über deinen Code muss ich erst mal drüber schlafen:-) Derweil werd ich nicht ganz schlau daraus! Aber Danke jedenfalls!

13

Thursday, December 9th 2010, 4:49pm

@mad:

Na damit hätte ich jetzt nicht gerechnet, dass ich was richtig mache :-)

Neber der user-ID schicke ich noch Vor- und Nachname mit. Aber das läuft so nebenbei mit.


Und Vor- und Nachname stehen nicht in der Datenbank? Wenn doch kannst du sie auch dort herholen, wenn du die DB eh abfragst.

14

Thursday, December 9th 2010, 4:57pm

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.

Similar threads

Social bookmarks