首先,我正在使用这个小的PDO代码片段来获取服务器上所有可用的数据库以及表的另一个函数:
每当我从db列表中选择并提交一个选项时,我都需要在下面的选择菜单中显示相应的表格。我设法用foreach显示数据库,但我有点想念为什么这不起作用。
提前感谢任何答案/解决方案:)
答案 0 :(得分:1)
请参阅下面的代码修订版,以实现您的目标。
<form method='post' action="<?php $_SERVER['PHP_SELF']; ?>">
<?php
define('PDO_USER', 'root');
define('PDO_PASS', '');
function getDatabases(PDO $pdo) {
$stmt = $pdo->query('SHOW DATABASES');
$result = $stmt->fetchAll();
$dbs = array();
foreach($result as $row) {
$dbs[] = $row['Database'];
}
return $dbs;
}
$pdo = new PDO('mysql:host=localhost', PDO_USER, PDO_PASS);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$databases = getDatabases($pdo);
// Table code
$selectedDB = (!empty($_POST['database'])) ? $_POST['database'] : null;
function getTables(PDO $pdo, $databaseName) {
if(!in_array($databaseName, getDatabases($pdo))) {
return array();
}
$stmt = $pdo->query('SHOW TABLES FROM '.$databaseName);
$result = $stmt->fetchAll();
$tables = array();
foreach($result as $row) {
$tables[] = $row['Tables_in_'.$databaseName];
}
return $tables;
}
$tables = array();
if(!empty($selectedDB)) {
$tables = getTables($pdo, $selectedDB);
}
?>
Database:
<select name='database'>
<?php foreach($databases as $row): ?>
<option value="<?php echo $row; ?>"><?php echo $row; ?></option>
<?php endforeach; ?>
</select> 
<input type='submit' name='formSubmit' value='Submit'></form>
UPDATE
<select name='formTable1'>
<?php foreach($tables as $tbName): ?>
<option value='<?php echo $tbName; ?>'><?php echo $tbName; ?></option>
<?php endforeach; ?>
</select>
几点说明:
您需要在表单标记中包含“action”属性,以便为表单提供提交的目标URL。
在原始选择中,您有2个名称属性 (name ='formDatabases []'name ='database')。你应该只有一个 每个表单元素的名称,即确定用作的表单元素 键入该特定字段的$ _POST数组。
如果您愿意,您应该只在HTML中使用“name ='var []'”格式 特定的POST项目是PHP中的数组。否则你可以 只需使用“name ='var'”