Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler mit isset abfabgen und Standardwert übergeben

Einklappen

Neue Werbung 2019

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

  • Fehler mit isset abfabgen und Standardwert übergeben

    Ich habe ein Script wo auf Seite 1 (cityman.php5) eine Länderliste ist. Dort werden zirka 20 Länder gelistet (aufklappbar) wo man diese verwalten kann (adden, löschen usw)

    Wenn dort ein land ausgewählt ist (also aufgeklappt) wird in der nächsten Seite genau das gleiche Land geöffnet um dort Hotels zu editieren wenn schon welche vorhanden sind.

    leider bekomme ich auf Seite 2 Notices deren Ursache ich auch kenne allerdings scheitere ich das richtig abzufangen.

    Ich versuche auf Seite 1 folgendes

    PHP-Code:
       // load country if known
        
    if (empty($_SESSION["iCountryId"]))
        {
            
    $oCountry = new Country ($oDatabase);
            
    $oCountry -> load ($_SESSION["iCountryId"]);
        }
        
        else {
            
    $_SESSION["iCountryId"] = "1";  // setzt wenn Land nicht gewählt auf Standard Deutschland = 1


    ob isset oder empty scheint egal es wird einfach nichts übergeben an die nächste Seite 2. Ich lasse mir das zur Kontrolle ausgeben

    Anzeige der SESSION Werte
    array(5) {
    ["sUsername"]=>
    string( "Admin"
    ["iLastAccessTime"]=>
    int(1402471325)
    ["sStartLogin"]=>
    string(9) "login"
    ["iCountryId"]=>
    string(0) ""
    ["iFormularChallenge"]=>
    int(1527378765)
    Heisst, die CountyID wird nicht auf 1 gesetzt und somit auch nicht übergeben.
    Ich muss gestehen, ich kenne mich mit Objekten nicht aus, da wir das Script übernommen haben. Ich bin noch Anfänger und dachte ich kann das so bereinigen.

    Mein Grundgedanke war: wenn man auf Seite 1 kein Land wählt, übergebe ich einfach ein Standardland was auf alle Fälle angelegt ist. Das sollte Deutschland mit der CountyID = 1 sein. Dann sollte der Fehler auf Seite 2 wenn auf Seite 1 kein Land gewählt wurde nicht mehr erscheinen, da ja ein Wert vorhanden ist

    Wenn auf Seite 1 kein Land gewählt wird erscheint auf Seite 2 der Fehler
    Notice: Trying to get property of non-object in /documents/hoteledit.php5 on line 38

    Es liegt ja wohl daran das da nichts übergeben wird weil ja
    ["iCountryId"]=> string(0) ""
    Wenn ich ein land auswähle erscheint das:
    ["iCountryId"]=> string(1) "1"

    Was mache ich falsch???

  • #2
    Hallöchen,

    sollte die Bedingung nicht umgekehrt lauten?

    PHP-Code:
    if( ! isset($_SESSION['CountryId'])){
        
    $countryId 1// Standardwert setzen
    } else{
        
    $countryId $_SESSION['CountryId'];
    }

    // Tu etwas mit $countryId
    $country $countries->findById($countryId); 
    Edit: Ach ja, die Kurzform wäre dann:
    PHP-Code:
    $countryId = isset($_SESSION['CountryId']) ? (int)$_SESSION['CountryId'] : 1
    Viele Grüße,
    lotti
    [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

    Kommentar


    • #3
      Egal Stimmt da hast du Recht. Was ich aber nicht verstehe ich bekomme immer noch Fehler.


      habe mir nochmal die GLOBALS ausgeben lassen und erhalte das hier:
      [sSql] => SELECT a.iId, b.sName FROM cta_city a, cta_city_lang_spec_attr b WHERE a.iCountryId='de' AND a.iId=b.iCityId AND b.sLang='en' GROUP BY a.iId ORDER BY b.sName
      [sResult] =>
      [oLocal] => Localization Object
      (
      [sCountryCode] =>
      [sDateFormat] =>
      [oDatabase] => Database Object
      (
      [iLink] => Resource id #32
      [sName] => db5306xxxxxx
      [sHost] => localhost
      )

      [oLocalizationList] => ObjectListDb Object
      (
      [sTableName] => cta_localization
      [oDatabase] => Database Object
      (
      [iLink] => Resource id #32
      [sName] => db5306xxxxxx
      [sHost] => localhost
      )
      Der Code auf Seite 2 ist der hier:
      PHP-Code:
         // Localization

          
      if (isset ($_SESSION["iCountryId"]))
          {
              
      $sSql "SELECT sCountryCode FROM ";
              
      $sSql.= C_COUNTRY_TABLE." ";
              
      $sSql.= "WHERE ".C_COUNTRY_TABLE.".iId='".$_SESSION["iCountryId"]."'";
              
      $oResult $GLOBALS["oDatabase"] -> getObjectFromSql($sSql);
              
      $sResult $oResult -> sCountryCode;
              
              
      $oLocal = new Localization ($sResult$oDatabase);
          } 
      ich verstehe nich warum $sResult leer bleibt

      Kommentar


      • #4
        ich scheitere nach wie vor da die Session nicht übergeben wird warum auch immer - irgend etwas ist falsch

        PHP-Code:
           // load country if known
            
        if (empty($_SESSION["iCountryId"]))    {
                        
        $_SESSION["iCountryId"] = 1// Standardwert setzen
                
        }        
                
        $oCountry = new Country ($oDatabase);
                
        $oCountry -> load ($_SESSION["iCountryId"]); 
        ich möchte gerne diesen Code so abändern das egal was passiert der Wert $_SESSION["iCountryId"] immer einen Standardwert hat damit bei übergabe an die nächste Seite meine Notices nicht auftreten weil wenn ich nämlich hier auf Seite 1 kein Land auswähle dann bleibt die Variable auch leer und fabriziert mir Fehler

        hier der orginalcode
        PHP-Code:
           // load country if known
            
        if (isset($_SESSION["iCountryId"]))
            {
                
        $oCountry = new Country ($oDatabase);
                
        $oCountry -> load ($_SESSION["iCountryId"]);
            } 
        Könnt ihr mir bitte noch einmal einen Tipp geben? Wäre super nett

        Kommentar


        • #5
          PHP-Code:
          if (!isset($_SESSION["key"])) $_SESSION["key"] = "value"
          Sollte doch eig. das tun was du willst, oder? (Also Default-Wert setzen)

          Kommentar


          • #6
            Hallo

            also ich habe es geschafft und es funktioniert auch gut

            Habe ganz unten eingefügt:
            PHP-Code:
            if    (empty ($_SESSION["iCountryId"]))
                                    
            $_SESSION["iCountryId"]="1"
            So, nun wollte ich das verfeinern indem ich nicht ein vorgegebenes Land nehme, sondern das aus dem Usernamen und den entsprechend hinterlegten Land des angemeldeten Users aus der DB. Leider gehts nicht.

            Ich denke ich habe das mit den Objekten noch nicht richtig geschnaggelt und wollte mal fragen was an den letzten beiden Zeien falsch ist.

            PHP-Code:
                if (empty ($_SESSION["iCountryId"])) 
                {
                    
            $sSql "SELECT iCountryId FROM ";
                    
            $sSql.= C_USER_TABLE." ";
                    
            $sSql.= "WHERE sUserId ='".$_SESSION["sUsername"]."'";
                    
            $oResult $GLOBALS["oDatabase"] -> getObjectFromSql($sSql);
                    
            $sResult $oResult -> iCountryId;
                    
                } 
            ich möchte quasi den Wert den ich hier auslese (also iCountryId) als $_SESSION["iCountryId übergeben damit ich das auf der nächsten Seite habe.

            Hat den Vorteil das ein Amerikaner dann USA als Land aufgeklappt bekommt whärend ich in Germany Deutschland aufgeklappt angezeigt bekomme. Jetzt momentan mit den oberen Codeüberprüfung wird bei nicht auswählen eines landes Deutschland als Standard übergeben.

            Kommentar


            • #7
              Was steht den in oResult?
              Warum nimmst du für den Wert sUserId (DB) den Wert sUsername (Session)? Ist das unpraktisches Naming oder ein Versehen?

              Kommentar


              • #8
                in oResult steht:

                [oResult] => stdClass Object
                (
                [sCountryCode] => de
                )

                wie kann ich den einfach der Seesion meine SQL Abfrageergeniss übergeben?

                Das Mit Username ist, weil diese Session überall gespeichert ist. Ich muss ja den User irgednwie indentifizieren. Und das wollte ich mit dieser Sessionvariable machen

                ich habe ürigens dieses Konstrukt als Vorlage genommen. Sorry ich bin noch Anfänger
                PHP-Code:
                 if (isset ($_SESSION["iCountryId"]))
                    {
                        
                $sSql "SELECT sCountryCode FROM ";
                        
                $sSql.= C_COUNTRY_TABLE." ";
                        
                $sSql.= "WHERE ".C_COUNTRY_TABLE.".iId='".$_SESSION["iCountryId"]."'";
                        
                $oResult $GLOBALS["oDatabase"] -> getObjectFromSql($sSql);
                        
                $sResult $oResult -> sCountryCode

                Kommentar


                • #9
                  In der Session liegt der Country-Code als Int-Value vor - in der Datenbank als CountryCode. Dementsprechend solltest du entweder das "de" (respektive den entsprechenden CC) in die Int-Representation konvertieren oder überall das selbe Format verwenden.

                  Das Mit Username ist, weil diese Session überall gespeichert ist. Ich muss ja den User irgednwie indentifizieren. Und das wollte ich mit dieser Sessionvariable machen
                  Der technische Hintergrund ist mir schon klar, aber die Namensgebung nicht ganz.
                  Handelt es sich um einen Usernamen oder eine UserId? (Ist ja in der regel nciht das selbe)

                  Kommentar


                  • #10
                    also das Land ist in der DB als CountryId = 1 hinterlegt. CountryCode ist immer zweistellig also in diesen Fall "de"
                    Aber warum bleibt meine Session den leer?
                    ["iCountryId"]=> string(0) ""


                    Als sUserId ist in diesen fall wirklich der nickname sozusagen. Im script selbst wird aber die Session
                    ["sUsername"]=> string(6) "P10000" übergeben

                    Hier mal die Struktur der Tabelle

                    iId
                    sUserId
                    sPassword
                    sSalutation
                    sName
                    sForename
                    sEmail
                    iCountryId
                    sLanguageCode
                    sPhone
                    sSignature

                    ich denke so gehts auch:
                    PHP-Code:
                        if (empty ($_SESSION["iCountryId"])) 
                        {
                            
                    $sSql "SELECT iCountryId FROM ";
                            
                    $sSql.= C_USER_TABLE." ";
                            
                    $sSql.= "WHERE sUserId ='".$_SESSION["sUsername"]."'";
                            
                    $oResult $GLOBALS["oDatabase"] -> getObjectFromSql($sSql);
                            
                    $sResult $oResult -> iCountryId;
                            
                    $_SESSION["iCountryId"] = $oResult -> iCountryId;
                        } 

                    Kommentar

                    Lädt...
                    X