【问题标题】:Populate Table from more than one drop-down list从多个下拉列表中填充表格
【发布时间】:2017-10-19 13:34:52
【问题描述】:

我正在尝试在用户从下拉列表中选择选项后填充表,该选项选用此选项应根据所选选项填充表。我不确定如何才能完成这项工作,并且我已经搜索了教程等,但没有任何帮助。因此,如果有人能以某种方式提供帮助,例如小测试代码等,我会很高兴。

我正在使用 PHP,下拉列表的选项来自 MySQL 数据库,所以总而言之,一个人将从用户下拉列表中选择一个用户,然后从不同的下拉列表中选择另一个选项,然后在选择 1、2 或全部 3 个之后还会有一个日期过滤器,将根据所选值生成一个表格。

到目前为止,我还没有完成代码,因为我不知道该怎么做,但我想我需要将所有 3 个下拉列表放在一个表单中,提交后我应该生成表格,但我怎么能有更多<select> ..... </select> 中的一个 <form> 并同时提交它们。

到目前为止我所做的(我知道这是不安全的,并且 mysql_* 在 PHP7 中不再存在)但请不要批评它。

更新

//Database query for User drop-down(DD) population. 
    $sqlDD = " SELECT DISTINCT `user` FROM `users`  " ;
    $resultDD = mysql_query($sqlDD);

    //Database query for Status drop-down(DD) population.
    $sqlDDStatus =  " SELECT `status` FROM `status` WHERE `id` = 1 OR 
      `id` = 123 OR `id` = 182 OR `id` = 12 ";
    $resultDDStatus = mysql_query($sqlDDStatus); 

<form id="form1" name="form1" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">



            <select name="userSelect">

            <?php 
                 while($rowDD = mysql_fetch_array($resultDD)): 
                echo "<option value='" . htmlspecialchars($rowDD['user']) ."'>" . htmlspecialchars($rowDD['user']) ."</option>"; ?>
        <?php   endwhile; ?>


            </select>
             <!-- Second DD-list in the same form -->
            <select name="Status" style="max-width: 250px;" > 
        <?php 
                 while($rowDDS = mysql_fetch_array($resultDDStatus)):
                    echo "<option value='" . htmlspecialchars($rowDDS['status']) ."'>" . htmlspecialchars($rowDDS['status']) ."</option>"; ?>
        <?php   endwhile; ?>
            </select>
            <input type="submit" name="submit" value='Find'/>

            </form>



//Get the submited data
<?php if(isset($_POST['submit'])): ?>
            <?php echo 'This is submitted ' . $_POST['submit']; ?>
    <?php endif; ?>

我添加了 echo 'This is submitted ' . $_POST['submit']; 因为我想看看提交了什么,但它得到的只是回应 “寻找”。

有什么想法可以让我从表单中的两个表单中获取数据并根据它填充表格吗?

更新 2
在得到其他用户的回答后,我看到我的表单正确处理了数据,但我现在的问题是如何使用提交的 DDL 表单中的数据并用它们填充表格?到目前为止,我已经尝试了以下方法:

<?php if(isset($_POST['submit'])): ?>
        <?php $result = mysql_query( "SELECT * FROM `users` WHERE `user` = 
        $_POST['userSelect']  AND (`id` = 1 OR `id` = 18)" );
        ?>
    <?php endif; ?>

然后在表格中

<table>
<?php  while ($row = mysql_fetch_assoc($result)) :; ?>
        <tr>
            <td><?php echo $row['user']; ?></td>
<?php endwhile; ?>
</table>

但是当我尝试它时,我没有得到任何回应。如何解决我的问题并获得想要的输出?

编辑 我认为经过一些研究后我发现了我的错误,我现在无法测试代码,但我几乎可以肯定你不能在数据库查询中使用$_POST['userSelect'],所以我只需要将$_POST['userSelect'] 分配给一些人在我在查询中使用它之前的变量。到目前为止,我已经获得了 1 个有用的小技巧......对 stackoverflow 感到非常失望......

【问题讨论】:

  • 这不是关于代码的问题,只要你连一行都不显示(--> 这不是使用 StackOverflow 的方法)。关于你的工作,自己尝试,实验,你会更快得到答案。您是否尝试过构建表单并在提交时获取其数据?您是否尝试过查询以创建表?
  • @AymDev 请查看更新后的问题。
  • 好多了!我会给出答案的。
  • 请查看 UPDATE 2 我已经修复了很多问题,但还有一些问题仍然存在,我真的很想修复它们。

标签: php mysql html-table dropdown


【解决方案1】:

这是一个用于从后端获取数据到前端的基础 HTML/PHP 页面,这应该可以帮助您入门。尝试打印数据(在 HTML 页面的 while 循环中)。

<html>
<head>
    <title></title>
</head>
<body>
    <form action="dropdown.php" method="POST">
        <select name='options'>
            <option>option 1</option>
            <option>option 2</option>>
            <option>option 3</option>>
        </select>
        <input type="submit" value="Submit">
    </form>

</body>
</html>

<?php

    $mysqli = new mysqli("localhost", "user", "password", "database");

    if ($mysqli->connect_errno) {
        echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    }else{
        if (!empty($_POST)){

            if(!empty($_POST['options'])){

                $option = $_POST['options'];

                $query = "SELECT * FROM table WHERE option='$option'";

                $res = $mysqli->query($query);

                while($data = $res->fetch_assoc()){

                    //print data to HTML page
                    print_f('%s, $s\n', $data['firstname'], $data['lastname']);

                }

            }
        }
    }

?>

【讨论】:

  • 请看我更新的问题
【解决方案2】:

您的表单可能正在工作,您只得到“查找”的原因是因为您正在打印提交按钮的value
要大致了解您的表单数据,请尝试:

echo '<pre>';
print_r($_POST);
echo '</pre>';

您将通过使用&lt;select&gt;name 属性和$_POST 来获取表单的其他值:

echo $_POST['userSelect'];
echo $_POST['Status'];

顺便说一句,您使用的是已弃用的扩展名(written here for example),建议使用MySQLiPDO(尤其推荐使用PDO)。如果您使用的是 PHP 7,mysql_connect 将无法工作,因为它已被删除。
而且我不确定 htmlspecialchars() 的使用是否与您使用的每个数据库数据相关。

PHP.net - print_r()(另见var_dump()
PHP.net - $_POST

【讨论】:

  • 遗憾的是我现在不能切换到 myslqi_。无论如何使用echo $_POST['userSelect'];echo $_POST['Status']; 确实给了我我想要的东西我现在的问题是如何使用选定的值并使用它们填充表格?我试过:&lt;?php $result = mysql_query( "SELECT * FROM users` WHERE user = $_POST['userSelect'] AND (id = 1 OR id = 18" ); ?>` 然后&lt;tr&gt; &lt;?php while ($row = mysql_fetch_assoc($result)) :; ?&gt; &lt;td&gt;&lt;?php echo $row['user']; ?&gt;&lt;/td&gt; ` 都在 标签
  • @Richard 您应该尽快将您的工作切换到 MySQLi,并保护您的代码 (WikiHow - prevent SQL injection in PHP)。如您所说,要“填充表格”,只需执行INSERT。只需学习 SQL 的基础知识,CRUD(创建读取更新删除)== INSERTSELECTUPDATEDELETE。我推荐sql.sh 了解更多:-)
  • 我知道 SQL,我不需要在数据库中插入一些东西。数据库已经填满了,我只是要求它返回一些存储在其中的数据。
  • @Richard 你写了:;(最后一个代码块,第二行),不是问题吗?
  • 写作while ($row = mysql_fetch_assoc($result)) :; ?&gt; 以这种方式关闭while 没有问题,因为我稍后以&lt;?php endwhile; ?&gt; 结束,我已经用其他输入对其进行了测试,没关系。我只是不明白为什么当我在查询中使用user = $_POST['userSelect'] 并使用它来填充我的表时,它不会产生任何输出并完全破坏代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
相关资源
最近更新 更多