Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
mehrseitige Formulare in Session speichern ?!?! [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
mehrseitige Formulare in Session speichern ?!?!


 
otto-mueller
07-03-2004, 18:21 
 
Hallo allerseits,

ich habe ein mehrseitiges Formular gebastelt. Auf jeder Seite sind es 30 Datensätze (durch LIMIT $Anfang, 30 unterteil). Ich möchte, daß der Benutzer die Formularseiten nacheinander bearbeitet und anschließend die gesamten Daten in einem Schritt in die DB geschrieben werden.

Ich denke eine SESSION ist sehr gut geignet, die Daten ersmal zwischen zu speichern. Hier habe ich Problem und zwar wenn ich von der ersten Seite auf die 2. gehe, werden die 30 Zeilen in Session registriert. Wenn ich aber dann auf weiter gehe, werden die neuen 30 Zeile auch in Session geschrieben aber die Daten von der 1. Seite überschrieben.

Wie kann ich es denn lösen?

Hier mein Code:$anfang_select = 0;
if (isset($_REQUEST['weiter']))
{
foreach ($_REQUEST as $key => $value)
{
$_SESSION[$key] = $value;
}
$anfang_select = $anfang_select + 30;

}
Vielen Dank vorab
Gruß, Otto

 
TobiaZ
07-03-2004, 18:26 
 
$_SESSION[$key+30] = $value; should work! ansonsten musste mit {} hantieren, oder auslagern. Der Grund für dein Problem sollte aber klar werden!

 
derHund
07-03-2004, 18:27 
 
aber die Daten von der 1. Seite überschrieben.
wenn du sagst, die daten werden überschrieben, gehe ich davon aus, daß die indizies jeweils gleich sind? wenn ja, dann nimm andere.

 
Wurzel
07-03-2004, 18:40 
 
oder$_SESSION[$anfang_select][$key] = $value;

 
TobiaZ
07-03-2004, 18:45 
 
@wurzels lösung: find ich net so dolle, weil du da nacher nen multiarray hast und zwei schleifen zum auslesen brauchst. brauchste bei meiner nicht. ;)

stelle mir aber die frage, ob man wirklich 100e von Daten in der Session speichern sollte. Die wird ja doch ziemlich groß dann.

 
Wurzel
07-03-2004, 18:54 
 
... stimmt schon ... allerdings brauchst du ein substr/regex/whatever-konstrukt,
um die ursprünglichen keys zu erhalten ... allerdings ist die frage nach der
sinnhaftigkeit berechtigt ... btw: ich liebe multidim-arrays :)

 
TobiaZ
07-03-2004, 19:10 
 
da hast du jetzt wiederum recht. ich war davon ausgegangen, dass es sich um ein nummerisches array handelt. weil er ja gesagt hat, dass er immer 30 ds ausließt.
bei nem assoziativen array wäre deins wahrscheinlich schöner, vorallem weil man dann dann du unterindexe wahrscheinlich schon kennt. -> also nur eine schleife.

 
otto-mueller
07-03-2004, 19:12 
 
Hallo,

vielen Dank für die schnelle Hilfe.
$_SESSION[$key+30] = $value; da meine $keys keine Zahlen sind, habe ich [$key."30"] verwendet und es geht.
ansonsten musste mit {} hantieren, oder auslagernWie kann ich mit {} arbeiten? und was meinst du mit "auslagern"? neue Session?? ne oder?

gehe ich davon aus, daß die indizies jeweils gleich sind? wenn ja, dann nimm andereJa, es ist so. Ich habe eine Tabelle, die viele Datensätze hat. Da ich die Bearbeitung der Daten im Formular übersichtlicher machen wollte, habe ich jeweils 30 Zeilen auf jede Seite begrenzt. - Also Feldernamen sind auf jeder Formularseite identisch.

Kann man denn nicht in die Session in die jeweiligen Arrays die neuen Zeilen einfach anhängen, ohne neues Array zu erzeugen?

stelle mir aber die frage, ob man wirklich 100e von Daten in der Session speichern sollte. Die wird ja doch ziemlich groß dann.Gibt es eine Alternative dazu? Wie macht man denn sowas normalerweise? Das ist mein erstes mal, mehrseitige Formulare zum Bearbeiten zu programmieren:confused:

Danke nochmal

Gruß, Otto

 
TobiaZ
07-03-2004, 19:14 
 
Wie kann ich mit {} arbeiten? und was meinst du mit "auslagern"? neue Session?? ne oder? uninteressant! - wäre nur wichtig gewesen, wenns zahlen gewesen wären.

 
Wurzel
07-03-2004, 19:24 
 
Original geschrieben von otto-mueller
Ja, es ist so. Ich habe eine Tabelle, die viele Datensätze hat. Da ich die Bearbeitung der Daten im Formular übersichtlicher machen wollte, habe ich jeweils 30 Zeilen auf jede Seite begrenzt. - Also Feldernamen sind auf jeder Formularseite identisch.warum machst du das so? wäre es nicht eleganter,
- 1 datensatz zu holen,
- die id in der session zu speichern,
- den ds bearbeiten
- updaten
- den nächsten ds zu holen, dessen id > ist als $_SESSION['id']

... scheint mir userfreundlicher ... alternativ schreibs in ne txt-datei, dann
kannst du auch morgen noch dran weiterarbeiten

 
otto-mueller
07-03-2004, 20:28 
 
Hallo,


wäre es nicht eleganter,
- 1 datensatz zu holen,
- die id in der session zu speichern,
- den ds bearbeiten
- updaten
- den nächsten ds zu holen, dessen id > ist als $_SESSION['id']Verstehe ich dich richtig, du meinst, daß ich auf jeder Seite statt 30 DS nur einen DS ausgeben soll, und diesen dann beim z. B. klicken auf "weiter" in DB schreibe und dann nächsten DS anzeigen usw.? So hätte ich bei 300 DS schon 300 Seiten - ich halte es nicht so für eine gute Idee. Oder habe ich dich falsch verstanden?

Außerdem ist mein Ziel, daß die Daten ganz zum Schluß einmal dem Benutzer zum bestätigen in einer Übersicht angezeigt werden und ers dann, wenn sie ok sind, dann per Knopfdruck alles in DB "updaten"/"inserten" Sowie hier im Forum auch, man schreibt seinen Text und lässt sich den Text mit "Vorschau" anzeigen, wenn es ok ist klickt man auf "Antworten" ansonsten korrigiert man den Text nochmal. Mein formular ist im gegensatz dazu mehrseitig.

Die Idee mit txt-Datei finde ich sehr gut - ich muß es noch probieren - DANKE

Gruß
Otto

Ich habe folgende lösung gebastelt und es funktioniert :cool: - jedenfalls bis jetzt ;-)

Otto
$feld1_temp = $_SESSION['feld1'];
$feld2_temp = $_SESSION['feld2'];
$feld3_temp = $_SESSION['feld3'];
$feld4_temp = $_SESSION['feld4'];

session_unregister('feld1');
session_unregister('feld2');
session_unregister('feld3');
session_unregister('feld4');

$_SESSION['feld1'] = array_merge($feld1_temp, $_REQUEST['feld1']);
$_SESSION['feld2'] = array_merge($feld2_temp, $_REQUEST['feld2']);
$_SESSION['feld3'] = array_merge($feld3_temp, $_REQUEST['feld3']);
$_SESSION['feld4'] = array_merge($feld4_temp, $_REQUEST['feld4']);

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:38 Uhr.