Antworten auf deine Fragen:
Neues Thema erstellen

SESSION überträgt nicht:-(

T

tvingo

Guest

Also....wie erkläre ich das jetzt kurz, verständlich u. leicht?:)

Ich habe Ein Formular, welches ich per submit abschicken möchte. Die submit-buttons haben jeweils einen eigenen Namen (name=xy). Ich versuche, per SESSION zu speichern, dass submit mit namen=xy betätigt wurde.

Beispiel:
HTML:
  <form action="index.php" method="post">

<!-- MengenEingabefeld 1 --->
   <input type="text" name="Menge_1" value="1">

<!-- Menge 1 speichern -->
   <input type="submit" value="speichern 1" name="sichern_1">


<!-- MengenEingabefeld 2 -->

   <input type="text" name="Menge_2" value="1">

<!-- Menge 2 speichern -->
   <input type="submit" value="speichern 2" name="sichern_2">

  </form>


<!-- Button Liste von gespeicherten Mengen anzeigen ohne Funktion -->

<!-- Button Liste anzeigen 1 -->
   <input type="submit" value="Liste gespeicherter Mengen anzeigen" name="Liste">

<!-- Button Liste anzeigen 2 -->
   <input type="submit" value="Liste gespeicherter Mengen anzeigen" name="Liste">


Die Eingabefelder Menge_1 u. Menge_2 werden übergeben an
index.php
PHP:
<?php
 session_start();
 $_SESSION["sichern_1"]=$_POST["sichern_1"];
 $_SESSION["sichern_2"]=$_POST["sichern_2"];
 $_SESSION["sichern_3"]=$_POST["sichern_3"];
?>
<!Doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

  <form action="index.php" method="post">

<!-- MengenEingabefeld 1 -->

    <input type="text" name="Menge_1"  
     value="<?php
             if(isset($_POST["Menge_1"]) &&
             is_string($_POST["Menge_1"])) {
             print(htmlspecialchars($_POST["Menge_1"]));
             }
            ?>">

<!-- Button Speichern Menge 1 -->
    <input type="submit" value="speichern 1" name="sichern_1">

<!-- MengenEingabefeld 2 -->

    <input type="text" name="Menge_2"  
     value="<?php
             if(isset($_POST["Menge_2"]) &&
             is_string($_POST["Menge_2"])) {
             print(htmlspecialchars($_POST["Menge_2"]));
             }
            ?>">
 
<!-- Button Speichern Menge 2 -->
    <input type="submit" value="speichern 2" name="sichern_2">

  </form>


<!-- Liste gespeicherte Mengen anzeigen-->
  <form action="mengenliste.php" method="post">

<!-- Liste anzeigen 1 -->
   <input type="submit" value="Liste gespeicherter Mengen anzeigen" name="Liste">

   <input type="hidden" name="Menge_1" id="Menge_1" 
     value="<?php
             if(isset($_SESSION["sichern_1"]) &&
             is_string($_SESSION["sichern_1"])) {
             print(htmlspecialchars($_POST["Menge_1"]));
             }
            ?>">

<!-- Liste anzeigen 2 -->
   <input type="submit" value="Liste gespeicherter Mengen anzeigen" name="Liste">

   <input type="hidden" name="Menge_2" id="Menge_2" 
     value="<?php
             if(isset($_SESSION["sichern_2"]) &&
             is_string($_SESSION["sichern_2"])) {
             print(htmlspecialchars($_POST["Menge_2"]));
             }
            ?>">

  </form>


Mengenliste
mengenliste.php
PHP:
<?php
 session_start();
 $Menge_0001=$_POST["Menge_0001"];
 $Menge_0002=$_POST["Menge_0002"];
?>
<!Doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<!-- Menge 1 -->
    <?php
     if (!empty($_SESSION['sichern_1'])) 
      print ' 
   <table> 
    <tr><td><input type="text" name="Menge_1" 
             value="'.htmlentities($_POST['Menge_1']).'">
        </td>
     </tr>
    </table>';  
     ?>

<!-- Menge 2 -->
    <?php
     if (!empty($_SESSION['sichern_2'])) 
      print ' 
   <table> 
    <tr><td><input type="text" name="Menge_2"  
             value="'.htmlentities($_POST['Menge_2']).'">
        </td>
     </tr>
    </table>';  
     ?>

   </form>

so, das jetzt mal so verkürzt wie möglich:)

Frage: Er gibt mir unter mengenliste.php NUR das aus, was als LETZTES gepostet wurde. Ich möchte aber ggf. auch das angezeigt haben, war über submit=sichern_1 oder submit=sichern_2 gepostet werden sollte. Deshalb ja die Idee, das unter SESSION zu speichern. Es wird aber nur das ausgegeben, was ich als Letztes abgeschickt habe. Wie kann ich die Menge sonst abspeichern, die über submit(1 oder 2) abgeschickt wurde, um sie dann in der letzten Datei: mengenliste.php ausgeben zu können? Ich sitze da schon länger dran u. wäre über jeden Tipp dankbar:) PS: Mit value="0" im Formular geht das natürlich. Mit value="1" in index.html, ganz oben, geht das nicht:rolleyes:
 

beautyIAF

I like HDR

AW: SESSION überträgt nicht:-(

Hallo,

Speicher' doch einfach die Daten des Forms in einer Datenbank ab, mit der entsprechenden Session ID, dann kannst du beim nächsten Absenden des Forms (Seite 2) in der DB prüfen lassen, ob bereits Einträge mit der Session ID gibt. Wenn Ja, dann einfach die weiteren Daten anfügen, wenn nicht, dann muss ein Fehler angezeigt werden, weil ja, wenn Seite 2 abgeschickt wird, Seite 1 dann nicht gespeichert werden konnte....
 
T

tvingo

Guest

AW: SESSION überträgt nicht:-(

Hallo! ähm.. Du meinst wirklich, dass ich eine Datenbankabwicklung dafür bräuchte?.. ODER, ob es noch eine php-Lösung gäbe;-)
 
Zuletzt bearbeitet von einem Moderator:

beautyIAF

I like HDR

AW: SESSION überträgt nicht:-(

Naja, du kannst auch alle Formularfelder immer wieder mitnehmen, also halt alle Daten mit zugehörigem Feld in einem Array speichern. Dann kannst du dir die Daten immer wieder zurückholen, wie du es brauchst.
 
T

tvingo

Guest

AW: SESSION überträgt nicht:-(

das wäre super:idee: Aber.. wieso klappt das nicht? Ich seh den Wald vor lauter php-codes nicht mehr..

Ich möchte ja nicht nur NEHMEN.. gerne würde ich - so ich denn reich wär;-) - etwas zurück geben.. Ich komm mir auch immer blöd vor, wenn ich hier etwas wissen möchte. Ich kann gut stricken, viell.braucht jemand noch Socken*g Nein, warn Witz. ALSO.. was könnte ich denn in meinem Script falsch haben, dass er immer nur den letzten submit ausgibt u. die vorherigen wieder weg sind:rolleyes:
 

mwxx

Nicht mehr ganz neu hier

AW: SESSION überträgt nicht:-(

hallo tvingo,

also zunächst solltest du, wenn du innerhalb einer session arbeitest, die session-id übertragen. ich mache das immer - um cookieblockerei zu umgehen, indem ich im action-attribut des formtags als ziel action="mengenliste.php?<? session_id(); ?>" angebe. dann werden nämlich garantiert alle als session-variablen gespeicherten werte übergeben und wiedergefunden.
andererseits: wofür hier eine session ???
du kannst doch in mengenliste.php sämtliche POST-variablen einfach ausgeben !?!?!?
oder hab ich irgendwas an deiner skripte-folge falsch verstanden ?
 

saila

Moderatorle

AW: SESSION überträgt nicht:-(

Hi,

es gibt hier ja schon so interessante Vorschläge...... Fraglich nur, ob die Antwortgeber auch immer das entsprechende Wissen haben.

Wie auch immer - erst einmal wäre für dich tvingo die Seite PHP: Sessions - Manual zu empfehlen, sofern du das ganze mit einer Session lösen möchtest.

Andererseits gibt es auch noch andere Möglichkeiten.
Z.B. kannst du alle Daten die per POST übergeben werden in input-hidden-tag's mitschlepen.
Daneben steht auch noch die Zwischenspeicherung der POST-Daten in einer Datei zur Verfügung, wobei du wiederum nur eine ID erzeugen musst durch die z.B. eingegebenen Daten (um unique herzustellen). Das wiederum würde direkt nach dem ersten Post erfolgen.

Eine Datenbank ist unlogisch, da der Aufwand nicht im Verhältnis steht und hier insbesondere der Datenbankpflege sowie das DB-Management (PHP-Code als auch MySql-Technischer Aufwand).

Abgesehen von dem genannten - warum prüfst du ob die übergebenen Daten einen String darstellen (is_string())? Du weist doch was für Daten übergeben werden können. Somit muss man nicht prüfen ob diese einen String darstellen. Lediglich ob ein Wert übergeben wurde oder nicht. Zudem Leerzeichen (TABs) entfernt.

Grundlegend würde ich dir empfehlen dich mal näher und ausführlicher mit der Thematik der Formularverarbeitung per Suchmaschine auseinander zu setzen.
 
T

tvingo

Guest

AW: SESSION überträgt nicht:-(

hallo tvingo,

also zunächst solltest du, wenn du innerhalb einer session arbeitest, die session-id übertragen. ich mache das immer - um cookieblockerei zu umgehen, indem ich im action-attribut des formtags als ziel action="mengenliste.php?<? session_id(); ?>" angebe. dann werden nämlich garantiert alle als session-variablen gespeicherten werte übergeben und wiedergefunden.
ok.. darauf war ich dann auch gekommen u. es hat nicht geklappt. Übergibt die ID zwar, aber.. ich erklär das mal weiter unten, moment;-)

andererseits: wofür hier eine session ???
du kannst doch in mengenliste.php sämtliche POST-variablen einfach ausgeben !?!?!?
oder hab ich irgendwas an deiner skripte-folge falsch verstanden ?
Ähm.. wie erklär ich das jetzt:
Der User kann Menge 1-3 speichern unter submit-button:1-3
Wenn er Menge 1 speichert, dann wird das natürlich übertragen. ABER: Wenn er dann auf Menge 2 klickt u. abschickt, ist Menge 1 wieder wech!!! Warum? Weil ich als Vorgabewert dort eine "1" stehen habe. Würde in dem Mengenfeld NICHTS stehen, könnte der User einfach eine beliebige Menge eingeben, so oft u. wie er mag u. das ganze form würde dann gepostet u. ausgelesen - fertig:idee: Aber ich muss dem Script quasi sagen: NUR, wenn der User eine Menge auch ABGESCHICKT hat, speicher DIESE, sonst lass einfach im form das voreingetragene value="1" stehen u. speicher für den Kunden keine Menge ab, da er diese ja auch nicht speichern wollte. Ich habe also ein Problem, wenn in dem Feld schon value="1" voreingegeben ist. Wäre das nicht so, würde das Script auch funktionieren. Ich möchte aber ungerne ein leeres Feld anbieten. Eine value="1" als Voreingabe macht sich auf jeden Fall besser:)
 
T

tvingo

Guest

AW: SESSION überträgt nicht:-(

Hi,
...
Wie auch immer - erst einmal wäre für dich tvingo die Seite PHP: Sessions - Manual zu empfehlen, sofern du das ganze mit einer Session lösen möchtest.
ok, Danke! Die hab ich gestern gar nicht mehr gefunden:rolleyes:



Andererseits gibt es auch noch andere Möglichkeiten.
Z.B. kannst du alle Daten die per POST übergeben werden in input-hidden-tag's mitschlepen.
das hatte ich versucht u. das klappt nicht:rolleyes:


Daneben steht auch noch die Zwischenspeicherung der POST-Daten in einer Datei zur Verfügung, wobei du wiederum nur eine ID erzeugen musst durch die z.B. eingegebenen Daten (um unique herzustellen). Das wiederum würde direkt nach dem ersten Post erfolgen.
das fiel mir dann auch noch ein;-)



Eine Datenbank ist unlogisch, da der Aufwand nicht im Verhältnis steht und hier insbesondere der Datenbankpflege sowie das DB-Management (PHP-Code als auch MySql-Technischer Aufwand).
ja, das dachte ich auch:) .. Datenbank würde ich dann machen, wenn ich mehr Zeit dazu finde u. mehr Daten hätte, die ich dort auch verwalten müsste. Zu Anfang handelt sich um ca. 20 Datensätze..u. da dachte ich, dass ich mir viell.das noch verkneifen könnte:idee:



Abgesehen von dem genannten - warum prüfst du ob die übergebenen Daten einen String darstellen (is_string())? Du weist doch was für Daten übergeben werden können. Somit muss man nicht prüfen ob diese einen String darstellen. Lediglich ob ein Wert übergeben wurde oder nicht. Zudem Leerzeichen (TABs) entfernt.
Du hast Recht! Das dachte ich auch u. habe jetzt in if(!empty...) umgewandelt:idee:


Grundlegend würde ich dir empfehlen dich mal näher und ausführlicher mit der Thematik der Formularverarbeitung per Suchmaschine auseinander zu setzen.
ja, ich sehe auch, dass ich hier immer wieder an Grenzen komme, weil ich nicht tief genug einsteige, in die Thematik!! Ich hatte versucht, es oberfläclicher zu lösen, weil ich einen größeren Zeitdruck im Nacken habe.. u. da dachte ich, ich bekomme das hin, ohne mich mit jedem Semikolon auseinandersetzen zu müssen. Ich sehe ja auch ein, dass man nicht ständig fragen darf! Schließlich kann man sich ja Vieles auch selbst beibringen. Es macht inzwischen sogar etwas Spaß u. ich finde auch toll, was man alles damit machen kann;) Ich werde mir die Themen noch einmal zu Gemüte führen u. bin auch froh, dass zumindest meine Gedanken, WIE man es lösen könnte, nicht ganz falsch waren. Viell.ist irgendwo noch ein Schnitzer drin, den ich lösen muss!

Ich war so froh, dass überhaupt jemand geantwortet hat, weil ich schon dachte, ich geh hier nur euch auf den Keks*s;-) SO!!! Werde mich jetzt auf die Thematik etwas tiefer einlassen, Einiges lesen u. dann sehen, dass ich selbst erst einmal weiter komme:!:Viele Grüße;-) tvingo!
 

saila

Moderatorle

AW: SESSION überträgt nicht:-(

Naja, wenn du dir das alles auch dachtest, warum hast du es dann nicht umgesetzt?
Ansonsten - wenn das ein Formular mit persönlichen Daten ist - oder Login-Daten übermittelt werden, dann sollte das ganze auch einem Mindestsicherheitsstandard entsprechen.

Wenn dir das also alles klar ist - dann ein fröhliches scripten. ;)
 
T

tvingo

Guest

AW: SESSION überträgt nicht:-(

Naja, wenn du dir das alles auch dachtest, warum hast du es dann nicht umgesetzt?
Wenn dir das also alles klar ist - dann ein fröhliches scripten. ;)
saila, das klingt ein bisschen so, als wenn Du sagen wolltest: Wenn der schon so klugscheißt, dann kann er ja auch zusehen, wie er da selbst durchkommt:rolleyes:;-)

Ansonsten - wenn das ein Formular mit persönlichen Daten ist - oder Login-Daten übermittelt werden, dann sollte das ganze auch einem Mindestsicherheitsstandard entsprechen.
daran dachte ich auch u. es sind nur Mengenangaben u. das muss nicht geheim sein:)



@ alle: Ich bin Anfänger u. wurschtel mich da so durch u. deshalb hatte ich kurz angegrissen, wie das kam! Für Tipps bin ich immer dankbar u. habe jetzt auch mehr Sicherheit wos hingehen kann;-) :blumen:
 

saila

Moderatorle

AW: SESSION überträgt nicht:-(

PHP:
<?php
/**
 * folgendes in jeder datei zu anfang
 * speicherort der session angeben aus sicherheitsgründen
 * die session nicht im tmp verzeichnis speichern (was der PHP-Standardeinstellung entspricht)
 */
session_save_path('sessionverzeichnis/');
/** 
 * session starten
 */ 
session_start();
/**
 * session id umbenennen in sid von SID inkl. htmlspeciahlchars
 */
define('sid', '?'. htmlspecialchars(SID));
/**
 * nach define ende bzgl. zu beginn jeder datei!
 * in jeden form-tag nun sid anhängen
 * bsp:
 */
?>
<form action="deinedatei.php<?php echo sid; ?>" method="post">
// fieldset
</form>

<?php
/*
 * auf der z.b. 2. seite zu beginn wie oben 
 * menge in session registrieren
 */
if(isset($_POST['menge']) AND trim($_POST['menge']) != '') {
    $_SESSION['menge'] = $_POST['menge'];
}

/**
 * auf der letzen seite, in welcher alle session-variablen abgearbeitet
 * werden folgt danach am ende der datei:
 */
unset($_SESSION['menge'], $_SESSION['menge1'] /* usw....*/);

?>
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.564
Beiträge
1.538.064
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben