Select-Auswahl mit AJAX Abhängigkeit und verschiedenen Tabellen

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Dieses Tutorial vermittelt die Kenntnisse um beliebig viele Select-Felder mit AJAX zu verbinden. Als Datenquelle werden hierbei mehrere Tabellen genutzt.
    == Definition ==
    Wir behandeln hier eine Abhandlung dieses Tutorials [wiki]Select-Auswahl mit AJAX Abhängigkeit[/wiki]. Hinweise aus dem genannten Tutorial sind vorausgesetzt.
    Als Unterschied erlauben wir das Beziehen der Daten aus anderen Tabellen.

    Das erste Feld wird damit aus der MySQL Tabelle hauptkategorie geladen, das zweite aus der Tabelle unterkategorie, usw

    == Code ==
    ajax.php
    Damit ein potentieller Angreifer keine beliebigen Tabellen auslesen kann, ist es erforderlich eine s.g. Whitelist einzuführen. Das ist eine Liste mit erlaubten Tabellennamen.
    Beim ersten Request wird der Tabellenname noch nicht übertragen, hier ist es erforderlich einen Standardwert festzulegen.

    Source Code

    1. <?php
    2. $tablename_allowed = array('hauptkategorie', 'unterkategorie', 'unterunterkategorie');
    3. $tablename_default = 'hauptkategorie';
    4. $tablename = isset($_REQUEST['name']) ? $_REQUEST['name'] : $tablename_default;
    5. // check whitelist
    6. if(!in_array($tablename, $tablename_allowed)) {
    7. die($tablename.' not allowed');
    8. }
    9. $sql = "SELECT id, text
    10. FROM ".$tablename."
    11. WHERE parentID = :id";
    12. $stmt = MyDB::getInstance()->prepare($sql);
    13. $stmt->execute(array(
    14. ':id' => isset($_REQUEST['id']) ? $_REQUEST['id'] : 0
    15. ));
    16. $return = $stmt->fetchAll();
    17. echo json_encode($return);
    18. ?>
    Display All


    == Datenbank ==
    Alle Abfragen sind wie einführend gesagt über verschiedene Tabellen aufgeteilt. Hier die Tabellenstruktur für das Beispiel:

    Source Code

    1. CREATE TABLE hauptkategorie (
    2. id int(10) unsigned NOT NULL AUTO_INCREMENT,
    3. `text` varchar(32) NOT NULL,
    4. parentID int(10) unsigned NOT NULL,
    5. PRIMARY KEY (id)
    6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    7. INSERT INTO hauptkategorie (id, text, parentID) VALUES
    8. (1, 'A', 0),
    9. (2, 'B', 0),
    10. (3, 'AA', 1),
    11. (4, 'BB', 2);
    12. CREATE TABLE unterkategorie (
    13. id int(10) unsigned NOT NULL AUTO_INCREMENT,
    14. `text` varchar(32) NOT NULL,
    15. parentID int(10) unsigned NOT NULL,
    16. PRIMARY KEY (id)
    17. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    18. INSERT INTO unterkategorie (id, text, parentID) VALUES
    19. (1, 'A', 3),
    20. (2, 'B', 4);
    21. CREATE TABLE unterunterkategorie (
    22. id int(10) unsigned NOT NULL AUTO_INCREMENT,
    23. `text` varchar(32) NOT NULL,
    24. parentID int(10) unsigned NOT NULL,
    25. PRIMARY KEY (id)
    26. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    27. INSERT INTO unterunterkategorie (id, text, parentID) VALUES
    28. (1, 'A', 1),
    29. (2, 'B', 2);
    Display All


    == Demo ==
    Eine Live Demo findet ihr unter demo.easy-coding.de/ajax/selec…ax-abhaengigkeit-tabellen. Des weiteren wird der kompletten Code hier als ZIP Archiv zur Verfügung gestellt: download.zip.

    6,172 times viewed

Comments 0

  • Torben Brodt -

    Ich habe die Tabellenstruktur ergänzt. Danke für den Hinweis.

  • gast -

    Hallo,

    wie sieht denn die jeweilige Tabellenstruktur aus. Ich habs jetzt mit mit den 3 Feldern id, parentID und text versucht. Ich kriegs aber nicht ans laufen. Würde mich über einen kleinen Tip freuen-

    Besten Dank im voraus.

    harry