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

  • 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++;
      } 

  • #2
    Im SQL ist keine Einschränkung auf Sprache, vermutlich können User mehr als eine Sprache eingestellt haben. Kontrollier das doch mal, ob in C_USER_COUNTRY_TABLE pro User mehr als ein Datensatz existiert.
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      ja in dieser tabelle gibts mehrere Spalten mit Countrcodes

      sUserId iCountryId

      r1689 20
      r1689 5


      betroffener user hat mehrere Einträge in tabelle. Oben ist nur ein Stück der tabelle

      Kommentar


      • #4
        Ja, das ist dein Problem.
        Füge in die SQL Anweisung noch eine Einschränkung auf die aktuell eingestellte Sprache des Benutzers her, dann verschwinden die doppelten Einträge (sUserId "r1689" kann immer nur genau EINE Sprache aktuell eingestellt haben, aus einer Auswahl von zweien.).
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Vielleicht erklärst du mal was du da machst. Warum joinst du diese beiden Tabellen?

          Kommentar


          • #6
            In C_COUNTRY_TABLE dürfte der Klartextname eines Landes liegen, passend zur iCountryId. Normalisierung.
            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar


            • #7
              ich habe da ein Hänger

              ich denke du meinst das hier:

              Table C_COUNTRY_TABLE
              iId / iContinentId / sName / sLanguageCode / sCountryCode / sMap /

              1 / / 1 / Germany / de / de / germany.png
              19 / 3 / Singapore / en / sg / Asien.png

              Kommentar


              • #8
                Zitat von lstegelitz Beitrag anzeigen
                In C_COUNTRY_TABLE dürfte der Klartextname eines Landes liegen, passend zur iCountryId. Normalisierung.
                Soweit konnte ich mir das auchzusammenreimen, aber was ist C_USER_COUNTRY_TABLE und warum wird die Tabelle hier gejoint?!

                Kommentar


                • #9
                  @Catzenjaeger: Keine Ahnung was du uns mitteilen möchtest, aber dein Problem sind die zwei Datensätze in C_USER_COUNTRY_TABLE und die fehlende Einschränkung auf EINE Sprache in der Abfrage.

                  Nochmal: Es ist nichts dagegen einzuwenden, das ein User mehrere Sprachen zur Verfügung hat, aber auswählen kann er nur exakt eine Sprache. Und das musst du in der SQL Anweisung ebenfalls abbilden.
                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar


                  • #10
                    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)

                    Kommentar


                    • #11
                      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.

                      Kommentar


                      • #12
                        Soweit sind wir schon, hatte ich bereits in #2 angedeutet und es wurde von Catzenjaeger auch bestätigt in #3
                        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                        Kommentar


                        • #13
                          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.

                          Kommentar


                          • #14
                            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.
                            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                            Kommentar


                            • #15
                              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

                              Kommentar

                              Lädt...
                              X