== 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.
Alles anzeigen
== Datenbank ==
Alle Abfragen sind wie einführend gesagt über verschiedene Tabellen aufgeteilt. Hier die Tabellenstruktur für das Beispiel:
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.
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
- <?php
- $tablename_allowed = array('hauptkategorie', 'unterkategorie', 'unterunterkategorie');
- $tablename_default = 'hauptkategorie';
- $tablename = isset($_REQUEST['name']) ? $_REQUEST['name'] : $tablename_default;
- // check whitelist
- if(!in_array($tablename, $tablename_allowed)) {
- die($tablename.' not allowed');
- }
- $sql = "SELECT id, text
- FROM ".$tablename."
- WHERE parentID = :id";
- $stmt = MyDB::getInstance()->prepare($sql);
- $stmt->execute(array(
- ':id' => isset($_REQUEST['id']) ? $_REQUEST['id'] : 0
- ));
- $return = $stmt->fetchAll();
- echo json_encode($return);
- ?>
== Datenbank ==
Alle Abfragen sind wie einführend gesagt über verschiedene Tabellen aufgeteilt. Hier die Tabellenstruktur für das Beispiel:
Quellcode
- CREATE TABLE hauptkategorie (
- id int(10) unsigned NOT NULL AUTO_INCREMENT,
- `text` varchar(32) NOT NULL,
- parentID int(10) unsigned NOT NULL,
- PRIMARY KEY (id)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
- INSERT INTO hauptkategorie (id, text, parentID) VALUES
- (1, 'A', 0),
- (2, 'B', 0),
- (3, 'AA', 1),
- (4, 'BB', 2);
- CREATE TABLE unterkategorie (
- id int(10) unsigned NOT NULL AUTO_INCREMENT,
- `text` varchar(32) NOT NULL,
- parentID int(10) unsigned NOT NULL,
- PRIMARY KEY (id)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
- INSERT INTO unterkategorie (id, text, parentID) VALUES
- (1, 'A', 3),
- (2, 'B', 4);
- CREATE TABLE unterunterkategorie (
- id int(10) unsigned NOT NULL AUTO_INCREMENT,
- `text` varchar(32) NOT NULL,
- parentID int(10) unsigned NOT NULL,
- PRIMARY KEY (id)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
- INSERT INTO unterunterkategorie (id, text, parentID) VALUES
- (1, 'A', 1),
- (2, 'B', 2);
== 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.
10.075 mal gelesen
Torben Brodt -
Ich habe die Tabellenstruktur ergänzt. Danke für den Hinweis.