Select Abfrage / Seite neu laden

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

  • Select Abfrage / Seite neu laden

    Hallo zusammen !

    Ich habe ein kleines Problem. Ich möchte gerne für User ein "Suchscript" zur Verfügung stellen, jedoch bekomme ich das nicht so hin, wie ich mir das vorstelle.

    Es gibt in der Datenbank folgende Tabellen:

    Land
    ID | Land
    Bsp.: 1 | Deutschland
    2 | Schweiz

    Region
    ID | Land (Abkürzung z.B. Deutschland = DL) | Region
    Bsp.: 1 | DL | Nordrhein-Westfalen

    Stadt
    ID | Region (Abkürzung z.B. Nordrhein-Westfalen = NRW) | Stadt
    Bsp.: 1 | NRW | Düsseldorf
    2 | NRW | Köln

    Nun soll es 4 Select Felder geben, die nach jedem auswählen die Seite neu lädt und mit der Funktion POST direkt die ergebnise in die andere Select-Box lädt.

    z.B. User wählt aus:
    Deutschland (Seite wird neu geladen)
    Nordrhein-Westfalen (Seite wird neu geladen)
    Düsseldorf

    Ich hab das mal mit "verschachtelten auswahlfeldern" versucht, jedoch klappt das leider nicht so, wie ich mir das vorstelle.

    Folgendes Script habe ich ausprobiert:

    select.php
    PHP-Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
    >
    <
    html xmlns="http://www.w3.org/1999/xhtml">
        <
    head>
            <
    title>Verschachtelte Auswahlfelder AJAX</title>
            <
    script type="text/javascript" src="jquery-1.3.2.min.js"></script>
            <
    script type="text/javascript">
            
    //<![CDATA[[
                
    var multiSelect = {
                    
    defaultOptions: {},
                    
    change: function(select) {
                        $.
    getJSON(
                            
    "ajax.php?" select.name "=" encodeURIComponent(select.value),
                            function(
    response) {
                                var 
    form select.formtext;
                                
    window.console.debug(response);
                                for (var 
    element in response) {
                                    
    select form.elements[element];
                                    
    multiSelect.clear(select);
                                    for (var 
    value in response[element]) {
                                        
    text response[element][value];
                                        
    select.options[select.options.length] = new Option(text);
                                    }
                                }
                            }
                        );
                    },

                    
    clear: function(select) {
                        for (var 
    select.options.length 10; --i) { // exclude "- Bitte .. auswählen -"
                            
    select.options[i] = null;
                        }
                    }
                }
                
            
    //]]>
            
    </script>
        </
    head>
        <
    body>
            <
    form action="" method="post">
                <
    fieldset>
                    <
    legend>Kontinent</legend>
                    <
    select name="continent" onchange="multiSelect.change(this)">
                        <
    option>Amerika</option>
                        <
    option>Asien</option>
                        <
    option>Afrika</option>
                        <
    option>Europa</option>
                        <
    option>Australien</option>
                    </
    select>
                </
    fieldset>
                <
    fieldset>
                    <
    legend>Land</legend>
                    <
    select name="country" onchange="multiSelect.change(this)">
                        <
    option value="">- Bitte auswählen -</option>
                    </
    select>
                </
    fieldset>
                <
    fieldset>
                    <
    legend>Stadt</legend>
                    <
    select name="city" onchange="multiSelect.change(this)">
                        <
    option value="">- Bitte auswählen -</option>
                    </
    select>
                </
    fieldset>
                <
    div>
                    <
    input type="submit" />
                </
    div>
            </
    form>
        </
    body>
    </
    html
    ajax.php

    PHP-Code:
     <?php 
    $data 
    = array( 
        
    "Amerika" => array( 
            
    "USA" => array( 
                
    "New York"
                
    "Los Angeles" 
            
    ), 
            
    "Kanada" => array( 
                
    "Toronto"
                
    "Vancouver" 
            

        ), 
        
    "Asien" => array( 
            
    "China" => array( 
                
    "Peking"
                
    "Shanghai" 
            

        ), 
        
    "Australien" => array( 
            
    "Australien" => array( 
                
    "Sydney"
                
    "Perth" 
            
    ), 
            
    "Neuseeland" => array( 
                
    "Wellington" 
            

        ), 
        
    "Europa" => array( 
            
    "Deutschland" => array( 
                
    "Berlin"
                
    "Karlsruhe" 
            
    ), 
            
    "Italien" => array( 
                
    "Rom"
                
    "Mailand" 
            

        ) 
    ); 

    if (isset(
    $_GET["continent"])) { 
        
    $response = array( 
            
    "country" => array_keys($data[$_GET["continent"]]), 
            
    "city"    => array() 
        ); 
        echo 
    json_encode($response); 
        exit; 

    if (isset(
    $_GET["country"])) { 
        foreach (
    $data as $continent => $countries) { 
            foreach (
    $countries as $country => $cities) { 
                if (
    $country == $_GET["country"]) { 
                    echo 
    json_encode(array("city" => $cities)); 
                    exit; 
                } 
            } 
        } 

    echo 
    json_encode(new stdClass()); 
    exit;
    Vielleicht weiß einer von euch ja, wie ich das mit MySql lösen könnte.

    LG Steffen

  • #2
    Hallo,


    Die Datenbankstruktur ist Käse. Man speichert keine Namen wenn man dazu eine eindeutige ID wo anders hat.

    Bsp:
    LAND (id, name_land, kuerzel_land)
    1, Deutschland, DE
    2, Schweiz, CH

    Region (id, name_region, land_id, kuerzel_region)
    1, Nordrhein-Westfalen, 1, NRW

    Stadt (id, name_stadt, kuerzel_region_id)
    1, Köln, 1


    So kannst du dann sehr einfach über JOIN's (siehe SQL-Forum) damit arbeiten. Für die dynamische Auswahl von Select-Feldern eignet sich jquery sehr gut.

    Kommentar


    • #3
      Nabend =)

      Danke für die gute Info, ich werde das mal versuchen. Falls es nicht klappt, werd ich mich nochmal melden

      LG Steffen

      Kommentar

      Lädt...
      X