Select-Auswahl mit AJAX Abhängigkeit und verschiedenen Tabellen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

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

    Quellcode

    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. ?>
    Alles anzeigen


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

    Quellcode

    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);
    Alles anzeigen


    == 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.

    8.335 mal gelesen

Kommentare 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