Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP。根据下拉框中选择的内容显示SQL表的内容_Php_Mysql_Sql - Fatal编程技术网

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

PHP。根据下拉框中选择的内容显示SQL表的内容,php,mysql,sql,Php,Mysql,Sql,很抱歉,如果这已经被问到和回答,但我已经看了,不能看到它的任何地方。是的,我是个笨蛋 我有一个DB,有3张桌子:面粉、填料和其他 我想做的是有一个下拉列表。因此,如果用户从下拉框中选择面粉,它将显示面粉表。如果用户选择填充,则将显示填充表 希望这是清楚的。我希望你能帮忙。提前谢谢 <Form id="form1" name="form1" method="get" > Supplies of <select name=filler action="flour.php">

很抱歉,如果这已经被问到和回答,但我已经看了,不能看到它的任何地方。是的,我是个笨蛋

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

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

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

<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">

如果所有表具有相同的结构,请考虑组合表,并添加一个类型列(VARCHAR包含面粉、填料或AdDIT为简单起见)。 然后可以这样编写查询(仍然使用$table变量名来处理上述代码)

$res = mysql_query("SELECT * FROM table WHERE type='{$table}'");
使用mysql_查询并将变量连接到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>

$results[]=$row;
} 
?>
这应该让你开始了——正如我上面所说的,它既快又脏。随着你获得更多的知识,你将能够在这方面有所改进(例如,正确地将HTML从PHP中分离出来——在MVC和其他模式中,这确实值得一读)。 只是不要在生产系统上使用此代码


希望这有帮助。

将要显示表格的页面需要检查
$\u GET['filler']
并查看值是什么。因为您使用的是
$\u GET
和一个下拉框,所以您应该有一个类似以下内容的白名单:
$filler\u white\u list=array('flower',filler',other');

检查
$\u GET['filler']
的值是否在
$filler\u white\u列表中。如果
$\u 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
语句使用了
*
,但最好列出列的名称,因为它速度更快。使用下拉框的值作为数据库中表的名称不是一个好主意。您显示的数据库信息越少越好。当然,如果不是针对生产数据库,那就没关系了。但是,我认为即使你只是在练习,也最好考虑一下安全性。另外,我把
$\u GET['filler']<代码> >在代码的中间>选择< /代码>语句,因为表的名称与下拉框相同。

“动作”需要在“表单”标签上,而不是“选择”标签。我只是意识到正在发送的值是1, 2和3,而不是“面粉”、“填充物”和“其他”,所以Panoctopus的“切换语句”更好,并作为一个工作。白名单,非常感谢!
while($row = mysqli_fetch_array($res)){  
    //get the columns by using $row['column_name']
    //decide how you want to format 
}