Problem mit Session

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

  • Problem mit Session

    Hallo ich habe folgendes Problem:
    Wenn das Programm zu dem elseif teil kommt wo submit = Rechte Speichern ist kommt folgende Fehler meldung "Undefined index: test"
    aber die habe ich doch im vorherigen formular in der Session gespeichert.
    Zur kontrolle habe ich mir auch immer das die Werte von $_SESSION ausgeben lassen.
    Da ist dann auch wie erwartet test nicht vorhanden aber die anderen 2 Einträge ID und IP von vorher sind immer noch gespeichert (holt er sich vorher). Habe ich irgendetwas vergessen zu beachten? Suche den Fehler schon einige Tage verzweifel noch das Forum hier habe ich auch schon nach Lösungen untersucht, kam leider auch nicht weiter.
    Würde mich sehr über hilfe freuen.
    PHP-Code:
    case 'edit':
            else
            {
                echo 
    session_id();
                
    $_SESSION['test'] = $_POST['test']; //Die UserID in der Session speichern
                
    print_r($_SESSION);
                
    $rights getRights($_SESSION['test']); //Die Rechte vom User holen
                
    $sql "SELECT
                            Name
                          FROM
                            users
                          WHERE
                            ID = '"
    .$_SESSION['test']."';";
                
    $result mysql_query($sql) OR die(mysql_error());
                
    $Name mysql_result($result0);
                echo 
    "<form action=\"index.php?section=admin&amp;site=user&amp;action=edit\"\n"
                echo 
    "      method=\"post\" class=\"formular\">\n";
                echo 
    "      <p>\n";
                echo 
    "          <b>Benutzer ".$Name." bearbeiten</b>\n";
                echo 
    "      </p>\n";
                echo 
    "      <ol>\n";
                echo 
    "          <li>\n";
                echo 
    "              Rechte:\n";
                
    sort($allRights);
                echo 
    "              <ul>\n";
                foreach(
    $allRights as $value)
                {
                    echo 
    "<li>\n";
                    echo 
    "      <input id=\"".$value."\" type=\"checkbox\" name=\"rights[]\"";
                    if(
    in_array($value$rights))
                    {
                        echo 
    "checked=\"checked\"";
                    }
                    echo 
    "value=\"".$value."\" />\n";
                    echo 
    "      <label for=\"".$value."\">".$value."</label><br />\n";
                }
                echo 
    "              </ul>\n";
                echo 
    "          </li>\n";
                echo 
    "          <li>\n";
                echo 
    "   <input type=\"submit\" name=\"submit\" value=\"Rechte speichern\" />\n";
                echo 
    "   <input type=\"reset\" name=\"submit\" value=\"Zurücksetzen\" />\n";
                echo 
    "   <input type=\"hidden\" name=\"".session_name()."\" \n";
                echo 
    "                                  value=\"".session_id()."\" />\n";
                echo 
    "      </ol>\n";
                echo 
    "</form>\n";
                echo 
    "<p>\n";
                echo 
    "      <a href=\"index.php?section=admin&amp;".SID."\">\n";
                echo 
    "          Zurück zum Adminbereich\n";
                echo 
    "      </a>\n";
                echo 
    "</p>\n";
                }
        }
        elseif(isset(
    $_POST['submit']) AND "Rechte speichern" == $_POST['submit'])
        {
            if(!isset(
    $_POST['rights']))
            {
                        
                echo 
    "<p class=\"error\">\n";
                echo 
    "      Sie müssen mindestens ein Recht angeben.\n";
                echo 
    "</p>\n";
                            
            }
            else
            {
                echo 
    session_id();
                
    print_r($_SESSION);
                
    $sql "DELETE FROM
                            user_rights
                          WHERE
                            UserID = '"
    .$_SESSION['test']."';";
                
    mysql_query($sql) OR die(mysql_error());
                
    // alle vorhanden Rechte löschen
                // und nun die angewählten hinzufügen
                
    foreach($_POST['rights'] as $right)
                {
                    
    $sql "INSERT INTO
                                user_rights(UserID, Recht)
                              VALUES
                                ('"
    .$_SESSION['test']."',
                                    '"
    .$right."');";
                    
    mysql_query($sql) OR die(mysql_error());
                }
                echo 
    "<p>\n";
                echo 
    "      Die Rechte wurden gespeichert.\n";
                echo 
    "</p\n";
                echo 
    "<p>\n";
                echo 
    "      <a href=\"index.php?section=admin&amp;".SID."\">\n";
                echo 
    "          Zurück zum Adminbereich\n";
                echo 
    "      </a>\n";
                echo 
    "</p>\n";
            }
        }

            break; 
    Zuletzt geändert von Mr_Blonde; 07.10.2005, 11:12.

  • #2
    Du hast eine Masse Code, aber nirgendwo ist gekennzeichnet, an welcher stelle
    - test vorhanden ist,
    - es nicht vorhanden ist
    - es vorhanden sein sollte

    Hilf uns ein bisschen. Und poste bitte nur den relevanten code. den rest löschst(!) du bitte, indem du dein Posting editierst.

    Kommentar


    • #3
      Habe den Code noch einwenig eingegrenzt, hoffe jetzt ist es leichter verständlich.
      Also im ersten Formular übergebe ich ja $_SESSION['test'] den Wert von $_POST['test'] und arbeite dann mit $_SESSION['test'] weiter.
      Soweit so gut dort ist auch der $_SESSION['test'] wert vorhanden und das Formular wird Ordnungsgemäss abgearbeitet.
      Doch wenn ich das Formular jetzt abschicke und somit die bedingung für das zweite Formular erfüllt sind also (Rechte Speichern == $_POST['submit']) fehlt der der Wert $_SESSION['test'] aber die SessionID ist noch die gleiche und die Werte IP und ID sind auch noch vorhanden.
      Hier noch mal die Ausgaben von print_r($_SESSION):
      erstes Formular
      Array ( [ID] => 1 [IP] => 127.0.0.1 [test] => 8 )

      zweites Formular
      Array ( [ID] => 1 [IP] => 127.0.0.1 )

      Hoffe jetzt ist es ein mein Problem besser beschrieben

      MFG Lars

      Kommentar


      • #4
        Original geschrieben von Mr_Blonde
        Doch wenn ich das Formular jetzt abschicke und somit die bedingung für das zweite Formular erfüllt sind also (Rechte Speichern == $_POST['submit']) fehlt der der Wert $_SESSION['test']
        Bist du sicher, dass du dir den Wert nicht selber wieder überschreibst?
        Hast du dir den Inhalt von $_SESSION mal direkt ganz am Anfang des Scriptes ausgeben lassen, also direkt hinter session_start(), noch bevor du in die weitere Verarbeitung der Formulardaten einsteigst?
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Also ich habe deinen Tip mal verfolgt und ich glaube man kommt näher.

          Habe jetzt direkt hinter session_start() ein print_r($_SESSION) eingefühgt
          da gibt er mir nach dem ich das erste Formular abgeschickt habe und die Seite neu geladen wird aus das test in der Session ist dann kommt er zum Formular teil und gibt wieder "Undefined index: test" aus.

          Wie kann ich jetzt den Fehler umgehen?

          Danke schon mal für die Hilfe.

          MFG Lars

          Kommentar


          • #6
            Original geschrieben von Mr_Blonde
            Wie kann ich jetzt den Fehler umgehen?
            In dem du seine Ursache suchst, und sie beseitigst.

            Nein, mehr kann ich dir nicht dazu sagen.
            Dein obiger Code ist ja offenbar nur ein Ausschnitt, und wann da in welche scwitch- und if-zweige hineingesprungen wird, kann außer dir keiner wissen.

            Also debugge dein Script, und baue so lange und so viel Testausgaben ein, bis du die fehlerhafte Stelle ausgemacht hast.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Habe schon so lange am code rumgewurmt und lieder nichts gefunden ;(
              Aber mit deinem Tip werde ich mich noch mal dran wagen.
              Bis hier hin schon mal vielen dank und falls jemandem noch was einfallen sollte immer her damit

              MFG Lars

              Kommentar


              • #8
                Juhu habe den Fehler gefunden.
                In einer anderen Datei hatte ich die SESSION überschrieben, mit ID und der IP deswegen waren die auch immer in der SESSION. Das war zwar gewollt um die uid zu löschen aber war im flaschen if zweig

                Also noch mal danke bis dann.

                MFG Lars

                Kommentar

                Lädt...
                X