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

  • Catzenjaeger
    hat ein Thema erstellt Fehler mit isset abfabgen und Standardwert übergeben.

    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???

  • Catzenjaeger
    antwortet
    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;
        } 

    Einen Kommentar schreiben:


  • Kagu-chan
    antwortet
    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)

    Einen Kommentar schreiben:


  • Catzenjaeger
    antwortet
    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

    Einen Kommentar schreiben:


  • Kagu-chan
    antwortet
    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?

    Einen Kommentar schreiben:


  • Catzenjaeger
    antwortet
    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.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • Catzenjaeger
    antwortet
    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

    Einen Kommentar schreiben:


  • Catzenjaeger
    antwortet
    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

    Einen Kommentar schreiben:


  • lottikarotti
    antwortet
    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

    Einen Kommentar schreiben:

Lädt...
X