You are not logged in.

  • Login

Saturday, May 7th 2011, 10:17am

Content

Tags

AJAX, Select, table

Abstract

Dieses Tutorial vermittelt die Kenntnisse um beliebig viele Select-Felder mit AJAX zu verbinden. Als Datenquelle werden hierbei mehrere Tabellen genutzt.

Article

1. Definition


Wir behandeln hier eine Abhandlung dieses Tutorials Select-Auswahl mit AJAX Abhängigkeit. 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

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

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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);
?>


3. Datenbank


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

SQL Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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);


4. Demo


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

Lexikon 4.1.5, developed by www.viecode.com