Ankündigung

Einklappen
Keine Ankündigung bisher.

Werte in einen Droopdown doppelt

Einklappen

Neue Werbung 2019

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

  • Catzenjaeger
    hat ein Thema erstellt Werte in einen Droopdown doppelt.

    Werte in einen Droopdown doppelt

    Hallo,

    in einen Script habe ich den Fehler, das wenn die usersprache auf English gestellt ist die werte in einen Dropdown doppelt angezeigt werden. Wenn ich die Sprache des Users auf Deutsch stelle dann ist es wieder ok.

    Ich weiss nicht wo ich suchen soll der Code beinhaltet soweit ich das ehe keinen Fehler. ich weiss auch nicht wo ich suchen soll. Könnt ihr mir auf die Sprünge helfen?

    ich habe mir mal alle Session variablen ausgeben lassen die dort vorkommen
    Anzeige der SESSION Werte
    array(1 {
    ["sUsername"]=> string(6) "Username"
    ["iLastAccessTime"]=> int(1404121234)
    ["sStartLogin"]=> string(9) "login"
    ["iCountryId"]=> string(1) "1"
    ["sLang"]=> string(2) "en"
    ["sSelectOfferState"]=> string(3) "all"
    ["sSelectOfferPeriod"]=> string(2) "14"
    ["sSelectOfferCity"]=> string(3) "all"
    ["bChecked"]=> string(0) ""
    ["bActive"]=> string(7) "checked"
    ["bActive1"]=> string(7) "checked"
    ["sSelectOfferCountry"]=> string(1) "8"
    ["sLangOffer"]=> string(2) "en"
    ["s_sFunctionArea"]=> string(1 "ManageOfferRequest"
    ["sCurrency"]=> string(3) "THB"
    ["sCountryCode"]=> string(2) "th"
    ["sSelectOfferWorkState"]=> string( "newoffer"
    ["s_sHotelType"]=> string( "Business"

    Hier der Quelltext
    PHP-Code:
    <div id=functionarea><h1>Manage offer requests</h1><form action="/offer_action.php5" name="hotellist" method=post accept-charset=""><table id=contenthotelreport><caption>Send E-Mail to selected hotels</caption><tr>    <thAction</th>    <th></th></tr><tr>    <td>        <select name=u_sAction  style="width:200px;">                <option value='request'>Request an offer</option>                <option value='reminder'>Send a reminder</option>        </select>    </td>    <td><input name="oActionButton" type="submit" value="Prepare E-Mail "></td></tr></table><div class=errorstyle2 style="visibility:hidden"></div><table id=contenthotelreport style="margin-bottom:0px;"><caption Hotel selection<br></caption><tr>    <th style="width:15px;"></th>    <th>Country</th>    <th>City</th>    <th>Period</th>    <th>State</th>    <th>Only displayed items</th></tr><tr>    <td><input type="checkbox" id='bChecked' name='u_bChecked' value="checked"  onclick="submit()" ></td>    <td>        <select name=u_sSelectOfferCountry  onchange="submit()" style="width:150px;">
                    <
    option value='11' >Belgium</option>
                    <
    option value='11' >Belgium</option>
                    <
    option value='2' >Brazil</option>
                    <
    option value='2' >Brazil</option>
                    <
    option value='4' >China</option>
                    <
    option value='4' >China</option>
                    <
    option value='1' >Germany</option>
                    <
    option value='1' >Germany</option>
                    <
    option value='7' >Great Britain</option>
                    <
    option value='7' >Great Britain</option>
                    <
    option value='22' >India</option>
                    <
    option value='22' >India</option>
                    <
    option value='9' >Indonesia</option>
                    <
    option value='9' >Indonesia</option>
                    <
    option value='6' >Japan</option>
                    <
    option value='6' >Japan</option>
                    <
    option value='24' >Malaysia</option>
                    <
    option value='24' >Malaysia</option>
                    <
    option value='21' >Netherland</option>
                    <
    option value='21' >Netherland</option>
                    <
    option value='19' >Singapore</option>
                    <
    option value='19' >Singapore</option>
                    <
    option value='26' >South-Korea</option>
                    <
    option value='13' >Spain</option>
                    <
    option value='13' >Spain</option>
                    <
    option value='10' >Switzerland</option>
                    <
    option value='10' >Switzerland</option>
                    <
    option value='23' >Taiwan</option>
                    <
    option value='23' >Taiwan</option>
                    <
    option value='8' selected>Thailand</option>
                    <
    option value='8' selected>Thailand</option>
                    <
    option value='5' >USA</option>
                    <
    option value='5' >USA</option>
                    <
    option value='25' >Vietnam</option>
                    <
    option value='25' >Vietnam</option>
            </
    select>    </td>    <td
    ich denke der passende Code im Script ist dieser hier:
    PHP-Code:
    // Select countries
      
    $sSql "SELECT iId, sCountryCode, sName, sCurrency ";
      
    $sSql.= " FROM ".C_COUNTRY_TABLE." a, ".C_USER_COUNTRY_TABLE." b ";
      
    $sSql.= " WHERE a.iId = b.iCountryId AND b.sUserId='".$_SESSION["sUsername"]."'";
      
    $sSql.= " ORDER BY sName ";
      
    $aCountries $oDatabase->getArrayFromSql($sSql);

      
    $aTplVar["aSelectCountry"][0]["sText"]="";
            
      
    $i 1;
        foreach (
    $aCountries as $iKey => $oCountry)
      {
        
    $aTplVar["aSelectCountry"][$i]["sName"]= $oCountry->sName;
        
    $aTplVar["aSelectCountry"][$i]["sValue"]= $oCountry->iId;
            if (
    $_SESSION["sSelectOfferCountry"]==$oCountry->iId)
            {
                
    $aTplVar["aSelectCountry"][$i]["sSelected"]='selected';
                
    $sCurrency=$oCountry->sCurrency;
                
    $_SESSION["sCurrency"]=$oCountry->sCurrency;
                
    $_SESSION["sCountryCode"]=$oCountry->sCountryCode;
                    
    $aTplVar["sCurrency"] = getCurrencyString($oCountry->sCurrency);
        }
                
        
    $i++;
      } 

  • Catzenjaeger
    antwortet
    Die Software stammt nicht von mir - wie haben die übernommen und müssen die sofern es möglich ist betreuen und kleinere Fixe selbst machen.

    Die Fehler Beschreibung war korrekt. Wenn ich die Sprache gewechselt habe in meinen Settings war das weg. Aber warum auch immer scheint ja jetzt zu gehen. Ich denke das kam davon das ich die DB am Wochenende eingespielt habe. ich denke da ist mir das passiert

    Einen Kommentar schreiben:


  • erc
    antwortet
    Qualitäts Software vom feinsten. Ist die Fehlerbeschreibung eigentlich falsch gewessen (hast du statt der Sprache den User gewechselt?) oder verstecken sich da noch mehr tolle Fehler drin?

    Mach in usercountry aus den beiden Feldern ein Primär Schlüssel, damit können keine doppelten Einträge hinzugefügt werden.

    Einen Kommentar schreiben:


  • Catzenjaeger
    antwortet
    Zitat von lstegelitz Beitrag anzeigen
    Dann nochmal zu C_USER_COUNTRY_TABLE... taucht dort für einen User mehrmals der gleiche Countrycode auf? Und zufällig für Südkorea nur einmal?
    OMG du bist der Held des tages - aus unerklärlichen Umständen waren eine user doppelt drin so auch deren werte

    DANKE DANKE DANKE FÜR EUREN SUPPORT

    Einen Kommentar schreiben:


  • Catzenjaeger
    antwortet
    -- Tabellenstruktur für Tabelle `countries`
    --

    CREATE TABLE IF NOT EXISTS `countries` (
    `iId` int(11) NOT NULL AUTO_INCREMENT,
    `iContinentId` int(10) unsigned NOT NULL DEFAULT '0',
    `sName` varchar(30) NOT NULL DEFAULT '',
    `sLanguageCode` char(2) NOT NULL DEFAULT '',
    `sCountryCode` char(2) NOT NULL DEFAULT '',
    `sMap` varchar(30) DEFAULT NULL,
    `sFreigabe` varchar(10) DEFAULT NULL,
    `sHFreigabe` varchar(10) DEFAULT NULL,
    `iX` int(10) unsigned DEFAULT NULL,
    `iY` int(10) unsigned DEFAULT NULL,
    `sPolygon` text,
    `sMapping` varchar(10) DEFAULT NULL,
    `fLongitude` float(10,7) DEFAULT NULL,
    `fLatitude` float(10,7) DEFAULT NULL,
    `iZoomLevel` int(11) DEFAULT NULL,
    `sCurrency` char(3) DEFAULT NULL,
    `sDistanceUnit` varchar(5) DEFAULT NULL,
    `sMapType` varchar(10) DEFAULT NULL,
    PRIMARY KEY (`iId`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ;
    -- Tabellenstruktur für Tabelle `usercountry`
    --

    CREATE TABLE IF NOT EXISTS `usercountry` (
    `sUserId` varchar(20) NOT NULL DEFAULT '',
    `iCountryId` int(11) NOT NULL DEFAULT '0'
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    Dann nochmal zu C_USER_COUNTRY_TABLE... taucht dort für einen User mehrmals der gleiche Countrycode auf? Und zufällig für Südkorea nur einmal?

    Einen Kommentar schreiben:


  • erc
    antwortet
    Poste mal bitte von beiden Tabellen die Struktur (Mit phpmyadmin SHOW CREATE TABLE tabellen_name oder über Tabelle -> Export -> und dort die Struktur exportieren)

    Einen Kommentar schreiben:


  • Catzenjaeger
    antwortet
    doch der Code ist gekürzt - welchen benötigst du denn?
    Ich daschte der part wo das Dropdown abgeftragt wird reicht

    Einen Kommentar schreiben:


  • erc
    antwortet
    Und der Code oben ist auch original, nicht gekürzt oder so? Ich seh da nämlich nix was in Richtung
    In der tabelle der Länder ist jedem land ein Countrycode zugeorndet zb DE für Deutschland. Jedes land hat eine Hauptsprache. So ist zB China = englisch zugeordnet. ich denke daher kommt der doppelte code weil china EN und CN hat
    geht. Wenn das der Orginalcode ist bin ich ratlos.

    Ein unbeabsichtiges Kreuzprodukt würde 1. nicht zu 35 Datensätzen führen (siehe auch erstes Posting -> Südkorea) und 2. sehe ich kein Zusammenhang mit der ausgewählten Sprache.

    Doppelte Datensätze in einer der Tabellen würden bei jeder ausgewählten Sprache probleme machen.

    Einen Kommentar schreiben:


  • Catzenjaeger
    antwortet
    ja die Werte scheinen auch schon doppelt zu sein

    Noch einmal zur Erklärung:

    das ist eine Seite wo sich ein bestimmter Nutzerkreis buchbare Hotels anzeigen lassen kann. Zirka 10 Leute haben Asdminrechte und einen entsprechenden Zugang. In deren profilen kann man angeben ob er deutsch oder englisch als Sprache haben will (zb für die Buttons und sonstigen texte im template).

    In der tabelle der Länder ist jedem land ein Countrycode zugeorndet zb DE für Deutschland. Jedes land hat eine Hauptsprache. So ist zB China = englisch zugeordnet. ich denke daher kommt der doppelte code weil china EN und CN hat

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    Und ich glaube es geht sehr wohl um die vom User eingestellt Sprache, zumal Catzenjaeger es im Eingangspost explizit erwähnt:
    Zitat von Catzenjaeger Beitrag anzeigen
    Hallo,

    in einen Script habe ich den Fehler, das wenn die usersprache auf English gestellt ist die werte in einen Dropdown doppelt angezeigt werden. Wenn ich die Sprache des Users auf Deutsch stelle dann ist es wieder ok.

    Einen Kommentar schreiben:


  • erc
    antwortet
    Zitat von lstegelitz Beitrag anzeigen
    Soweit sind wir schon, hatte ich bereits in #2 angedeutet und es wurde von Catzenjaeger auch bestätigt in #3
    Sicher das du verstanden hast um was es geht? Die Tabelle hat nix mit der Sprache des Nutzers zu tun, die Tabelle bestimmt auf welche Länder der Nutzer Zugriff hat. Sind dort 5 Einträge für den Nutzer vorhanden, bekommt der Nutzer auch nur 5 Länder zur Auswahl (und nicht n doppelte). Der Query ist korrekt, also muss der Fehler bei den Daten liegen oder bei der Ausgabe. Aus dem Bauch raus würde ich sagen es liegt bei der Ausgabe... da auch noch völlig unklar ist was die Sprache des Nutzers damit zu tun hat.

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    Soweit sind wir schon, hatte ich bereits in #2 angedeutet und es wurde von Catzenjaeger auch bestätigt in #3

    Einen Kommentar schreiben:


  • erc
    antwortet
    Und was hat der Code nun mit der Sprache zu tun die der User auswählt!?

    Füg mal
    PHP-Code:
    //unter $aCountries = $oDatabase->getArrayFromSql($sSql); einfügen
    var_dump($aCountries); 
    in deinen Code ein und schau ob die Werte dort auch doppelt enthalten sind. Der Query sieht nämlich in Ordnung aus. Entweder sind die Daten in der Datenbank schon falsch, oder der Fehler passiert bei der Ausgabe.

    Einen Kommentar schreiben:


  • Catzenjaeger
    antwortet
    in der C_USER_COUNTRY_TABLE werden die Länder freigegeben, die der User sehen darf. In der normalen C_COUNTRY_TABLE stehen die Länder die im System angelegt sind.

    (ist eine Hotelsuche)

    Einen Kommentar schreiben:

Lädt...
X