PHP.根据下拉框中选择的内容显示SQL表的内容


PHP. Display content of SQL table based on selection chosen in dropdown box

如果有人问我并回答了这个问题,我很抱歉,但我看了看,在任何地方都看不到。是的,我是个笨蛋。

我有一个DB,里面有三张桌子:面粉、填料和其他。

我想做的是有一个下拉列表。所以,如果用户从下拉框中选择面粉,它将显示面粉表。如果用户选择填充器,则会显示填充器表。

希望这是清楚的。我希望你能帮忙。提前谢谢。

<Form id="form1" name="form1" method="get" >
Supplies of
<select name=filler action="flour.php">
<option value="1" selected>flour</option>
<option value="2">filler</option>
<option value="3">others</option>
</select>
<input type="submit" value="Submit" />
</form>

<?php
header("Content-Type: text/html; charset=windows-1251");
@mysql_connect('localhost','root','');
@mysql_select_db('krendel');
@mysql_query('SET NAMES cp1251'); 
$res = mysql_query("SELECT * FROM `flour` ") or die(mysql_error());
$res2 = mysql_query("SELECT * FROM `filler` ") or die(mysql_error());
$res3 = mysql_query("SELECT * FROM `addit` ") or die(mysql_error());

将操作添加到表单,而不是选择元素。所以你会有

<form method="get" action="flour.php">

以及

在您的表单处理脚本(floor.php)中,您可以这样做:

switch($_GET['filler'])
{
    case '1':
       $table = 'flour';
       break;
    case '2':
       $table = 'filler';
       break;
    case '3':
    default:
       $table = 'addit';
}
$res = mysql_query("SELECT * FROM {$table}");

如果所有表都有相同的结构,请考虑组合这些表,并添加一个类型列(为了简单起见,varchar包含floor、filler或addit)。然后,您可以像这样编写查询(仍然使用$table变量名来处理上面的代码。

$res = mysql_query("SELECT * FROM table WHERE type='{$table}'");

现在,使用mysql_query并将变量连接到SQL中并不是一种好的做法——在了解更多信息时,请查看PDO和参数化查询。

一些快速而肮脏的显示代码:

<?php 
$results = array();
while($row = mysql_fetch_array($res, MYSQL_ASSOC)) { ?>
    $results[] = $row;
} 
?>
<table>
    <?php foreach($results as $result) { ?>
        <td><?php echo $result['column_name'] ?></td>
    <?php } ?>
</table>

这应该让你开始——正如我上面所说,它既快又脏。当你获得更多的知识时,你将能够改进这一点(例如,正确地将HTML与PHP分离开来——在其他模式中阅读MVC真的很有价值)。只是不要在生产系统上使用此代码!

希望这能有所帮助。

要显示表格的页面需要检查$_GET['filler']并查看值。由于您使用的是$_GET和下拉框,因此应该有一个类似于$filler_white_list = array('flower', 'filler', 'other'); 的白名单

检查$_GET['filler']的值是否在$filler_white_list数组中。如果$_GET['filler']值有效,则进行查询:

$res = mysqli_query('SELECT * FROM '.$_GET['filler'].';') or die(mysqli_error());

然后循环浏览结果集以打印到页面:

while($row = mysqli_fetch_array($res)){  
    //get the columns by using $row['column_name']
    //decide how you want to format 
}

需要注意的是:我使用了mysqli而不是mysql,因为mysql已被弃用(不再受支持),SELECT语句使用*,但最好列出列的名称,因为它更快。将下拉框的值用作数据库中表的名称不是一个好主意。你透露的关于数据库的信息越少越好。当然,如果这不是针对生产数据库的,那么也没关系。但是,我认为,即使你只是在练习,也最好考虑安全问题。此外,我将$_GET['filler']放在SELECT语句的中间,因为表的名称与下拉框相同。