Dropdown Abhängigkeiten

  • Dropdown Abhängigkeiten

    Hi zusammen,

    Ich habe eine TXT Datei (kann hierfür keine DB nutzen) die Daten im folgenden Format vorhält:

    COUNTRY;COUNTRYCODE;CITY;CITYCODE

    Okay .... Nun möchte ich in meinem Formular Drei Dropdown Felder haben. Wenn ich eine Auswahl im Country Feld getroffen habe sollen alle zu diesem Land gehörenden Citycodes im zweiten Dropdown dargestellt werden. Die aus der Auswahl getroffenen Codes (COUNTRYCODE und CITYCODE) sollten in einer (oder meinetwegen in zwei) variablen verfügbar sein.

    Ich spiele mich damit seit mehr als 5 Stunden ... ich habe einige Ansätze gefunden, die meisten über Javascript - dort wiederum kann ich meine Datei nicht einbinden (oder bin zu doof zu) .... ein Teufelskreis - gerne erarbeite ich mir die Lösung selbst, momentan sieht es jedoch so aus als wäre es schlichtweg ohne JS und ohne MySQL nicht möglich so etwas nur mit PHP und einer Textdatei zu verwirklichen.

    Wer hat Ideen dazu? Codeschnipsel? Anleitungen?

    Merci vorab,
    [confused] Matthias
    Das Leben ist binär - du bist eine 1, oder eine 0
  • hi!

    es geht schon ohne db

    als erstes müsstest du die txt datei einlesen, am besten zeilenweise mit der file() funktion

    -> http://selfphp.de/funktionsreferenz/dateisystem_funktionen/file.php

    dann wie in dem beispiel mit einer schleife jede zeile durchgehen und mit

    Quellcode

    1. array2[$x] = explode(';',$array[$x]);


    die einzelnen werte in ein zweites array einlesen. dieses wird dann zu einem mehrdimensionalen array, bei dem du mit array2[$x][$y] mit $x auf die jeweilige zeile und mit $y auf das jeweilige element der aktuellen zeile zugreifen kannst

    du musst dann das erste dropdown feld erzeugen und als value den passenden index wert nehmen... diesen übergibst du an eine js funktion die wiederum die 2 dropdown box erzeugt...

    das sollte reichen :)

    mfg da BendIt
    .:Reden Ist Schweigen und Silber Ist Gold:.

    real programmers don't comment their code: if it was hard to write, it should be hard to read!
  • ich seh schon .... ich hätte meine Klappe halten sollen, wusste ja nicht das es so "umfangreich" ist diese Funktion so darzustellen ... nu steh ich da .... die obige Beschreibung ist zwar eigentlich ned schlecht, aber verwirklichen kann ich Sie nicht ... daher meine Bitte ob mir dabei jemand helfen könnte?

    Matthias [very confused]
    Das Leben ist binär - du bist eine 1, oder eine 0
  • Hi!

    So, nachdem es mit einem Textfile für mich einfach nicht lösbar war hier nun also meine Lösung mit einer MySQL - Bitte nicht schlagen .... der Code ist schrecklich, vielleicht kann mir jemand helfen daraus vernünftigen Code zu machen.

    Quellcode

    1. <?php
    2. @mysql_connect("localhost","root","") or die("Connection not established");
    3. @mysql_select_db("provisioning") or die("Database not found");
    4. $get_country = "SELECT countryname, countrycode from codes GROUP BY countrycode";
    5. $res_country = mysql_query($get_country);
    6. while($country = mysql_fetch_object($res_country))
    7. {echo "<option value=\"".$country->countryname."\">".$country->countryname."</option>";}
    8. echo "<option selected>".$_GET[country]."</option>";
    9. echo "<select name=\"city\">";
    10. $get_city = "SELECT cityname, citycode from codes WHERE countryname LIKE"."'".$_GET[country]."'";
    11. $res_city = mysql_query($get_city);
    12. while($city = mysql_fetch_object($res_city))
    13. {echo "<option value=\"".$city->cityname."\">".$city->cityname."</option>";}
    14. echo "<option selected>".$_GET[city]."</option>";
    15. echo "<input type=\"submit\" name=\"\" value=\"Add Number\">";
    16. echo "</select>"."</form>";
    17. $get_number = "SELECT countrycode from codes WHERE countryname LIKE"."'".$_GET[country]."' LIMIT 1";
    18. $res_number = mysql_query($get_number);
    19. while($number = mysql_fetch_object($res_number))
    20. {
    21. $ccode = $number->countrycode;
    22. }
    23. $get_number1 = "SELECT citycode from codes WHERE cityname LIKE"."'".$_GET[city]."'";
    24. $res_number1 = mysql_query($get_number1);
    25. while($number1 = mysql_fetch_object($res_number1))
    26. {
    27. $citcode = $number1->citycode;
    28. }
    29. echo $ccode.$citcode;
    30. ?>
    Alles anzeigen


    Matze
    Das Leben ist binär - du bist eine 1, oder eine 0
  • und der code funzt so wie du das hier gepostet hast und der macht auch das was du wolltest???

    Mal im vergleich, mit text datei

    Quellcode

    1. <?PHP
    2. $datei = "countrycodes.txt";
    3. $array = file($datei);
    4. for($x=0;$x<count($array);$x++){ // beispiel von selfphp
    5. $array2[$x] = explode(';',$array[$x]);
    6. }
    7. for($y=0;$y<count($array2);$y++){
    8. for($z=0;$z<count($array2[$y]);$z++){
    9. echo $array2[$y][$z] . '<br>';
    10. }
    11. }
    12. ?>
    Alles anzeigen


    ungetestet der code, sollte aber funzn und dir alle ellemente von jeder zeile ausgeben... daran solltest du sehen wie du weiter damit arbeiten kannst...

    da wo jetzt die ausgabe mit echo erfolgt könntest du ein assoziatives array anlegen auf das du dann mit $array['CITYCODE'] oder $array['COUNTRYCODE'] zugreifen kannst...

    db würde ich nur nehmen wenn ich vorher weis das sich die anzahl der einträge praktisch immer ändern kann, neue hinzukommen oder welche gelöscht werden. oder wenn es mehrere hunder/tausend einträge sind.



    mfg da BendIt
    .:Reden Ist Schweigen und Silber Ist Gold:.

    real programmers don't comment their code: if it was hard to write, it should be hard to read!
  • Hi!

    Das "Problem" bei der Version mit der Textdatei ist halt folgendes:

    Die Daten liegen so vor:

    Countryname;Countrynumber;Areaname;AreaNumber;CityName;CityNumber
    Germany;49;;Munich;89


    So .... wenn ich nun alles in Array's auftrenne ... dann meine erste Dropdown bilde und daraus was selektiere .... wie sage ich ihm das er anhand meiner ersten Auswahl aus dem zweiten Array nur die dazugehörigen Areas listen soll ... und das ganze dann noch eine Ebene tiefer mit den City's....

    Die MySQL ist nicht optimal aber sie läuft ... meine Frage war eben wie man den Code nun "kürzen" oder vernünftig machen kann .... ahjaaa ... laufen tut er übrigens .... :)
    Das Leben ist binär - du bist eine 1, oder eine 0
  • naja das hast du wohl vergessen zu erwähnen... in dem fall wäre es doch etwas zu viel aufwand die sache über txt dateien zu machen...

    wegen code optimieren, kann ich dir nur den hinweis geben bei google mal nach ein paar grundlagen tutorials zu suchen die dir vermitteln wie man übersicht und struktur rein bringt.

    es wäre jetzt bissl viel (zumindest mir is das zuviel da ich auch noch eigene projekte habe, sry) beim urschleim anzufangen...

    tu dir selber den gefallen und informier dich darüber... das ist eine lohnende investition!

    vor allem schau mal mit nem html validator über die ausgabe die das skript erzeugt. wenn du in deim post nicht etwas vergessen hast, werden sicher ein haufen fehler kommen, das tags fehlen und/oder nicht ordnungsgemäß abgeschlossen werden.

    siehe deine erste while schleife wo du die <option> tags erzeugst und füllst.... da fehlt z.b. das <select> tag drumrum...

    hoffe das hilft dir ein wenig....


    so long da BendIt
    .:Reden Ist Schweigen und Silber Ist Gold:.

    real programmers don't comment their code: if it was hard to write, it should be hard to read!
  • Hi!

    Den select Tag habe ich ausgelassen .... hier mal der komplette Code:

    Quellcode

    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    2. <html>
    3. <head>
    4. <title>Unbenanntes Dokument</title>
    5. </head>
    6. <body>
    7. <form name="country" action="drop5.php">
    8. <select name="country" onChange="document.forms['country'].submit()">
    9. <?php
    10. @mysql_connect("localhost","root","") or die("Connection not established");
    11. @mysql_select_db("provisioning") or die("Database not found");
    12. $get_country = "SELECT countryname, countrycode from codes GROUP BY countrycode";
    13. $res_country = mysql_query($get_country);
    14. while($country = mysql_fetch_object($res_country))
    15. {echo "<option value=\"".$country->countryname."\">".$country->countryname."</option>";}
    16. echo "<option selected>".$_GET[country]."</option>";
    17. echo "<select name=\"city\">";
    18. $get_city = "SELECT cityname, citycode from codes WHERE countryname LIKE"."'".$_GET[country]."'";
    19. $res_city = mysql_query($get_city);
    20. while($city = mysql_fetch_object($res_city))
    21. {echo "<option value=\"".$city->cityname."\">".$city->cityname."</option>";}
    22. echo "<option selected>".$_GET[city]."</option>";
    23. echo "<input type=\"submit\" name=\"\" value=\"Add Number\">";
    24. echo "</select>"."</form>";
    25. $get_number = "SELECT countrycode from codes WHERE countryname LIKE"."'".$_GET[country]."' LIMIT 1";
    26. $res_number = mysql_query($get_number);
    27. while($number = mysql_fetch_object($res_number))
    28. {
    29. $ccode = $number->countrycode;
    30. }
    31. $get_number1 = "SELECT citycode from codes WHERE cityname LIKE"."'".$_GET[city]."'";
    32. $res_number1 = mysql_query($get_number1);
    33. while($number1 = mysql_fetch_object($res_number1))
    34. {
    35. $citcode = $number1->citycode;
    36. }
    37. echo $ccode.$citcode;
    38. ?>
    39. </body>
    40. </html>
    Alles anzeigen


    Aber gut, dann werde ich mal zusehen wie ich weiterkomme... irgendwie kriege ich das schon hin ... :)

    Matze
    Das Leben ist binär - du bist eine 1, oder eine 0
  • naja, ist ja nicht böse gemeint oder so.

    aber learning by doing ist immernoch die beste methode um was zu lernen :)
    außerdem ist es ja ehrensache selbst herauszufinden wie man was lösen kann. das man nicht alles wissen kann sollte klar sein, dafür gibt es ja solche foren. aber die grundlagen sollten schon da sein, da das ja nicht nur dem "hilfesuchenden" hilft, sondern auch den "helfenden" :) aber wenn du weiter dran bleibst wirst du das auch problemlos schaffen. bis jetzt funzt es ja wie du sagst.

    meine skripte sahen am anfang auch so aus -.-"

    deshalb, frag weiter wenn du hilfe brauchst und dir wird auch geholfen....

    in diesem sinne

    da BendIt
    .:Reden Ist Schweigen und Silber Ist Gold:.

    real programmers don't comment their code: if it was hard to write, it should be hard to read!