Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Ein Eintrag in einer SESSION wird mir überschrieben.

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Ein Eintrag in einer SESSION wird mir überschrieben.

    Hallo liebes Forum,
    da ich mir hier durch das Lesen zahlreicher Themen schon sehr oft helfen konnte, jetzt allerdings vor einem Problem stehe bei dem mir seid nunmehr 3 Tagen weder google noch hier vorhandene Themen weiterhelfen konnten, entschloss ich mich dazu selber ein Thema zu Posten, evtl. kann mich ja jemand von euch auf Spur bringen.

    Wie der Titel versucht zu beschreiben, benötige ich Hilfe beim schreiben von Daten in eine SESSION.

    Etwas zur Umgebung:
    Eine kleine Datenbankanwendung mit PHP/MySQL
    Eine index.php aufgeteilt mit Tabellen.
    Seitenbereich für Navigation und Dateneingabe,
    ein Hauptfenster (iframe) in dem ich weitere Formulare aufrufe oder mir Datenbankausgaben anzeigen lasse.
    Oh laber laber, komme ich lieber mal zur Sache!

    Ich habe in einem Seitenbereich eine Dynamisch erstellte Linkliste

    PHP-Code:
    ....
    {
    $fli $row["fld_flieger"];
    echo 
    "<tr><td><a href=\"index.php?type=$fli\">&raquo;&nbsp;$fli</a></td></tr>";

    Hier wähle ich den Typen, mit dem ich später weiterarbeiten möchte.

    Dann ein select drop-down für die Auswahl eines Jahres, auch hiermit möchte ich später weiterarbeiten.

    PHP-Code:
    <form action=\"\" method=\"POST\">  
                <SELECT NAME=\"jahrauswahl\" onChange=\"this.form.submit()\">
                                    <OPTION VALUE=\"istleer\">
                                    <OPTION VALUE=\"alle Jahre\">alle Jahre
                                    <OPTION VALUE=\"05\">2005
                                    <OPTION VALUE=\"06\">2006
                                    <OPTION VALUE=\"07\">2007
    .... 
    Um Kontrolle zu haben was ich auswählte habe ich in einem Bereich dieses.

    PHP-Code:
    <div style=\"float:right; margin-right:30px\"> <i>Auswahl</i> == Flugzeugtyp: <b>$type</b> | Jahr: <b>$jahrauswahl</b> :.</div>"
    Der Anfang meiner index.php

    PHP-Code:
    <?php
    session_start
    ();
    include(
    "inc/config.php");
        
    $uid $_SESSION['uid'];
    $pwd $_SESSION['pwd'];

    $_SESSION['type'] = $_GET['type'];
    $type $_SESSION['type'];

    $_SESSION['jahrauswahl'] = $_POST['jahrauswahl'];
    $jahrauswahl $_SESSION['jahrauswahl'];
    So wie es jetzt ist, kann ich erst einen Typen wählen, dieser wird in die Session geschrieben, dann kann ich ein Jahr wählen und auch dieses wird in die Session geschrieben.
    Die "Kontrollanzeige" wird umgehend aktualisiert und zeigt mir den aktuell gewählten Typen und das Jahr.
    Ändere ich das Jahr, bleibt der Typ erhalten.
    Soweit so gut.
    Wenn ich jetzt allerdings einen neuen Typen wähle, wird das Jahr in der Session mit leer überschrieben,
    dieses würde ich allerdings gerne behalten, solange bis ich ein anderes Jahr ausgewählt habe.

    Ändere ich das $_POST für das Jahr in ein $_GET wechseln sich die Session Einträge sozusagen ab, wähle ich einen Typen, steht der in der Session, danach ein Jahr, ist der Typ leer und das Jahr steht in der Session und umgekehrt.

    Setzte ich die Zeilen im Kopf so herum,

    PHP-Code:
    $type $_SESSION['type'];
    $_SESSION['type'] = $_GET['type'];

    $jahrauswahl $_SESSION['jahrauswahl'];
    $_SESSION['jahrauswahl'] = $_POST['jahrauswahl']; 
    klappt es in der Session wunderbar, nur wird mir die "Kontrollanzeige" auf der Seite nicht aktualisiert, ich sehe dann stets den vorher gewählten Eintrag.

    Den Inhalt der Session lasse ich mir mit

    PHP-Code:
        foreach ($_SESSION as $key =>$value) {
             echo 
    $key." = ".$value."<br>"; } 
    anzeigen.

    Ich bin gerade an einem Punkt der absoluten Verwirrung
    Kann mir bitte jemand einen Tipp geben, wie ich es anstelle, das
    ich sowohl den Typen wie auch das Jahr in der Session habe, sich diese nur
    ändern wenn ich die Eingabe dazu mache und sich die "Kontrollanzeige" dementsprechend sofort ändert?!

    Für Hilfe bedanke ich mich schon einmal im Voraus und entschuldige mich
    für meinen wohl doch eher ausschweifenden Erklärungsversuch.

    Gruß aus Hamburg
    SunMoon

  • #2
    Zitat von SunMoon Beitrag anzeigen
    Kann mir bitte jemand einen Tipp geben, wie ich es anstelle, das ich sowohl den Typen wie auch das Jahr in der Session habe, sich diese nur ändern wenn ich die Eingabe dazu mache und sich die "Kontrollanzeige" dementsprechend sofort ändert?!
    Frage ab, ob eine "Eingabe" vorliegt.
    Wenn ja, schreibe den Wert in die Session.
    Gebe anschließend die aktuell in der Session enthaltenen Werte aus.

    Kommentar


    • #3
      Hi

      Du must natürlich das ausgewählte Jahr in deinem Dropdown als 'selected' makieren, sonst wird der Wert beim nächsten Seitenaufruf durch

      $_SESSION['jahrauswahl'] = $_POST['jahrauswahl'];

      mit einem leeren Wert überschrieben.

      bitseeker

      Kommentar


      • #4
        Bitte aktiviere das Error-Reporting. Setze folgende Code an den Anfang deiner index.php:

        PHP-Code:
        error_reporting(E_ALL E_STRICT); 
        Den Fehler wirst du relativ schnell finden. Das Jahr wird deshalb überschrieben, weil du nicht überprüfst, ob $_POST['jahrauswahl'] gesendet wurde. Wenn du per $_GET den Typ wechselst, bleibt $_POST in dem Falle leer und $_SESSION['jahrauswahl'] erhält einen NULL-Wert. Aber wie gesagt, Error-Reporting aktivieren und du siehst solche Leichtsinnsfehler.

        Kommentar


        • #5
          Kann mir bitte jemand einen Tipp geben, wie ich es anstelle, das
          ich sowohl den Typen wie auch das Jahr in der Session habe, sich diese nur
          ändern wenn ich die Eingabe dazu mache und sich die "Kontrollanzeige" dementsprechend sofort ändert?!
          Überprüfung, ob überhaupt ein Wert per Request übergeben wurde, ist schon sinnvoll...


          edit: Code entfernt, Anleitung zum selber basteln hier

          Kommentar


          • #6
            Vielen Dank für die wirklich sehr schnellen Antworten von euch.
            Mitunter hat man echt ein Brett vorm Kopp.

            Dann werde ich jetzt wohl mal versuchen das ganze in ein if (isset()) zu setzten.

            Bis dahin euch einen schönen Tag
            SunMoon

            Kommentar


            • #7
              Oh ja klasse, so einfach kann das Leben sein!

              PHP-Code:
              if (isset($_GET['type'])) { 
                
              $_SESSION['type'] = $_GET['type']; 

              $type $_SESSION['type'];

              if (isset(
              $_POST['jahrauswahl'])) { 
                
              $_SESSION['jahrauswahl'] = $_POST['jahrauswahl']; 
              }  
              $jahrauswahl $_SESSION['jahrauswahl']; 
              Ich hatte Anfangs die Zuweisung meiner Variablen $type und $jahrauswahl mit in dem Block der if Anweisung.
              Damit rödelte ich mich natürlich Tod.

              Jetzt klappt es wunderbar.

              Eine letzte Frage noch:
              Solange ich weder Jahr noch Typ gewählt habe, bekomme ich durch das jetzt hinzugefügte eror_reporting
              die Notice eines undefinierten indexes, kann ich dieses vernachlässigen, oder sollte ich versuchen hier einen wie soll ich sagen "Startwert" zu übergeben?

              SunMoon

              Kommentar


              • #8
                Gut so ist die Notice dann auch nicht mehr vorhanden

                PHP-Code:
                if (empty($_SESSION['type'])){
                  
                $_SESSION['type'] = "nicht gew&aumllt"

                Ich komme weiter, jetzt macht es wieder Spaß,
                Danke euch.

                Kommentar


                • #9
                  Zitat von SunMoon Beitrag anzeigen
                  die Notice eines undefinierten indexes, kann ich dieses vernachlässigen
                  Bitte niemals vernachlässigen. Es gibt für alles eine Lösung!

                  Kommentar


                  • #10
                    Und bitte bitte bitte: Vor der Übernahme von Daten, die vom Client kommen - Validierung!
                    Jahresauswahl z.B. auf integer casten, beim type checken, ob es ein Wert aus einer Liste mit gültigen Werten ist..

                    Ungeprüfte Übernahme von Client Werten bedeutet immer Injection-Gefahr (auch in eine Session kann man Code injezieren).

                    Kommentar


                    • #11
                      @ Trainmaster
                      Ja ich bin stets bemüht eine Lösung zu finden, nur merke ich oft wo mir noch so viel an Wissen fehlt.
                      Dann laufe ich mitunter Gefahr "Augen zu und durch" damit ich weiter komme.
                      Aber klar das holt einen irgendwann wieder ein.

                      @ Istegelitz
                      Das würde ich dann in ungefähr so anstellen?

                      PHP-Code:
                      if (isset($_GET['type']) && $_GET['type'] == "vorhandener Wert 1" || $_GET['type'] == "vorhandener Wert 2" .........) 
                      Um mich hier zu belesen wären meine Schlagwörter
                      Validierung von Clientdaten?
                      Ich werde einfach mal googeln, stehen ja einige Schlagwörter in deinem Text.

                      Kommentar


                      • #12
                        Ja, sowas in der Art. Kannst es auch über eine sog. "white list" handhaben:
                        PHP-Code:
                        $valid = array('Wert 1''Wert 2', ...);
                        if (isset(
                        $_GET['type']) && in_array($_GET['type'], $valid) ) 

                        Kommentar

                        Lädt...
                        X