Ankündigung

Einklappen
Keine Ankündigung bisher.

wieder mal sessions und session side-effect

Einklappen

Neue Werbung 2019

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

  • wieder mal sessions und session side-effect

    Hallo ich habe ein script geschrieben um a bisserl was über sessions zu lernen. Wenn ich nur folgendes Script ausführe kommt bei mir die meldung:

    Warning: Unknown(): Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively. in Unknown on line 0
    PHP-Code:
    <?
    $x=$_POST['x'];
    $submit=$_POST['submit'];
    #echo "submit=$submit";
    session_start();
    if (!session_is_registered('fehler'))
       session_register('fehler');
    $fk=$_SESSION['fehler'];
    echo "fehlersession=$fk
    ";
    if ($submit)
    {

     $fehler=0;
     echo "fehler=$fehler
    ";
     if (strlen($x)<1)
     {
         $fehlerarray[$fehler] = "
     bitte was eingeben
    ";
         $fehler++;
     }
    echo "fehler=$fehler
    ";
     if($fehler>0)
     {
      echo "<h1><p align=\"center\">Leider sind deine Eingaben unvollst&auml;ndig oder nicht miteinander vereinbar. Es sind einige Pflichtfragen dabei,
     die angeben werden m&uuml;ssen

    </h1>";
          echo "</p>";
          echo "<font color=#ff0000>";
          for ($i=0;$i<=$k;$i++)
          {
           echo $fehlerarray[$i]. "
    ";
          }
     }else
      {
       echo "es wurde was eingeben
    ";
       session_destroy();    
      }
    }
    ?>
    <html>
    <body>
    <form action="<? echo $_SERVER['PHP_SELF']; ?>" method ="post" > 
    <input type="text" name="x" value="<? if(strlen($x>0)) echo $x;?>">
    <input type="submit" name="submit" value="Absenden">
    </body>
    </html>
    P.S. bei mir ist register globals=off

    Danke für die Hinweise und Gruß

  • #2
    OP enthält keine Frage. Aber sie lautete vermutlich "warum kommt diese Fehlermeldung und wie bekomme ich sie weg?"

    session_is_registered und session_register nicht verwenden. Nur noch $_SESSION und die normalen Feldfunktionen.
    Entweder hat $_SESSION ein Element namens fehler oder eben nicht. Normal zuweisen. Abtesten mit isset()

    Kommentar


    • #3
      register_globals = off und die Funktionen wie session_register() vertragen sich nicht, benutz stattdessen $_SESSION, um auf die Session-Variablen zuzugreifen.
      mod = master of disaster

      Kommentar


      • #4
        in etwa so?

        $fehler=$_SESSION['fehler']

        anstatt session_register('fehler')

        Kommentar


        • #5
          Jein, benutz es doch einfach. Wozu die Zuweisung $fehler=$_SESSION['fehler']?
          Ist nicht direkt falsch, aber wozu? Was spricht gegen das "Original" in $_SESSION?

          Kommentar


          • #6
            Alles klar leude! ICh danke euch es funzt und hat mich ein ganzes Stück weiter gebracht

            Gruß niesel

            Kommentar


            • #7
              Sorry zu früh gerfreut. Ich habe den Kopf wie folgt geänder
              PHP-Code:
              session_start();
              if (!
              $_SESSION['fehler'])
                 
              $_SESSION['fehler'];
              $fk=$_SESSION['fehler'];
              echo 
              "fehlersession=$fk 
              der rest des Scipt ist im prinzip geblieben. Nun ist es aber so, dass die Variable fk lehr bleibt nach der Ausgabe der fehlermeldung bzw. nach dem neuaufbau der seite. Doch da soll ja dann die Variable fehler einen Wert abliefern um ein Kontrollmechanismus auszulösen

              Kommentar


              • #8
                session_start();
                if (!$_SESSION['fehler'])
                $_SESSION['fehler'];
                echo "fehlersession=$_SESSION['fehler']"

                Es fehlt bei dir auch das " am Ende vom Echo

                Wenn dann so!

                Kommentar


                • #9
                  if (!$_SESSION['fehler'])
                  $_SESSION['fehler'];
                  Was soll das denn bewirken?

                  Ehrlich gesagt verstehe ich den Sinn des gesamten Skripts nicht. Was willst Du warum in der Session aufheben? (Die Daten werden doch eh nicht wieder benutzt, $fehlerarray wird nach jedem Durchlauf verworfen)

                  Kommentar


                  • #10
                    Ich möchte, dass sich das Scipt merkt ob beim voherigen versuch des absenden des Formulars ein fehler aufgetreten ist. Wenn es so ist, soll der Zustand der variable fehler sich gemerkt werden und bei einer in einer bedingung mit verwendet werden.

                    Kommentar


                    • #11
                      P.S.ie Zeile
                      if (!$_SESSION['fehler'])
                      $_SESSION['fehler'];

                      soll nur bewirken, wenn die Variable fehler noch nicht registriert ist, soll sie es dann werden. Dachte ich mal so

                      Kommentar


                      • #12
                        zum p.s.:
                        Nutzlos.
                        Denk Dir $_SESSION als stinknormales Feld. Es IST ein stinknormales Feld.
                        PHP macht nur bei session_start() und beim Ende der Session etwas mit diesem Feld.
                        Ansonsten ist es absolut normal.

                        Wie fragst Du bei einem Feld die Existenz eines Elements ab? isset($feld['element'])
                        Wie setzt Du ein Element? $feld['element'] = 'wert';
                        Wie überschreibst Du ein Element? Genauso. $feld['element'] = 'wert';
                        Wie löscht Du ein Element? Analog zum Löschen einer Variable. unset($feld['element'])
                        Wie gibst Du ein Element aus? Analog zum Anzeigen einer Variablen. echo $feld['element'].
                        Wie kannst Du ein Feld in einem Feld speichern? Wie speicherst Du eine Feld in einer Variablen? $var = $feldvariable. Genauso beim Feldelement: $feld['element'] = $feldvariable
                        usw usw.

                        Nur unset($_SESSION) soll angeblich (ab's nicht ausprobiert) zu unerwünschten Nebeneffekten führen. Ansonsten behandel es wie alle anderen Feleder in php auch.
                        ---
                        Ich möchte, dass sich das Scipt merkt ob beim voherigen versuch des absenden des Formulars ein fehler aufgetreten ist. Wenn es so ist, soll der Zustand der variable fehler sich gemerkt werden und bei einer in einer bedingung mit verwendet werden.
                        Verstehe ich in Kombination mit dem Skript nicht.
                        So wie Du die Variablen benutzt, wird keine Session benötigt.

                        Kommentar


                        • #13
                          OK ich erkläre erst einmal wie ich das meine mit meinem Script.

                          Ich habe ein Formluar. Dieses Formular ist ein Fragebogen. Dieser soll nicht doppelt abgesendet werden. Dazu setze ich ein Cooly, der dann die Zeit mist wie lange der User braucht um dieses Formular auszufüllen.
                          Sollte nun die Zeit zu kurz sein in der der user das Formular absendet, wird er darauf hin gewiesen, dass er das Formular nicht doppelt absenden soll.
                          Nun ist es aber so, dass diese Cookie auch anwendung finden würde, wenn zuvor das Formular nicht korrekt ausgefüllt wurde, ein eFehlermeldung kommt und der User diesen kleinen Fehler korrigiert und dann das Formular wieder absendet. Dies würde er sicher unter der mindestzeit korrigieren können.
                          Nun war meine Idee, das ich mir die Vorraussetzung für den Hinweis das das Formular nicht doppelt geschickt wurde nur dann kommt, wenn zuvor das Formular nicht korrekgiert werden mußte -->$fehler<1.
                          Da aber die Variable fehler nach dem Neuaufbau der seite leer ist( echo befehl mit der Fehlermeldung an den user), wollte ich sie einfach in einer Session speichern und dann einfach abrufen um zu sagen. Es war vor beim letzten Absenden ein Fehleraufgetreten oder es war kein Fehler aufgetreten.

                          Ich hoffe ist ist einigermaßen verständlich.

                          Kommentar


                          • #14
                            Ja, ist es.
                            Ist der Benutzer eh schon auf die Session angewiesen?
                            Zum Beispiel wegen eines logins? Oder ist das Formular ausgerechnet für die Anmeldung/Regestrierung da?
                            Anders formuliert: Ist der Benutzer angemeldet/eingeloggt, wenn er das Formular benutzt und wenn ja, ist diese Anmeldung auch Session basiert?

                            edit: Die Frage zielt auf folgendes ab: Warum markierst/aktivierst Du die Sperre nicht erst, wenn das Formular vollständig ausgefüllt/bearbeitet wurde?

                            Kommentar


                            • #15
                              Nein der user ist nicht eingelogt also auf session angewiesen. also im moment sieht das scrip folgendermaßen aus
                              PHP-Code:
                              <?
                              starte cookie(zeitmessung)

                              if (fehlerbedingung1)
                               $fehlerarray[$fehler] = "
                               Sorry aber diese Angabe  ist sinnlos in Punkt 17!  
                              "; 
                              $fehler++;

                              if (fehlerbedingung2)
                               $fehlerarray[$fehler] = "
                               Sorry aber diese Angabe  ist sinnlos in Punkt 18!  
                              "; 
                              $fehler++;
                              //hier sollte sein, nur dann enn voher kein fehler gemeldet worden war.
                              if(zeit zu kurz)//problem hier ist wenn voheriges absenden ein Fehler aus obigen bedingungen war.
                              $fehlerarray[$fehler] = "
                               Sorry aber diese zu schnell 
                              "; 
                              $fehler++;

                              if (fehler>0)
                              ausgabe des fehlerarrays
                              else
                              eintrag in die datenbank
                              ?>
                              html teil
                              ende

                              und wie ist deine idee?

                              Gruß niesel

                              Kommentar

                              Lädt...
                              X