【问题标题】:display selected rows instead of all rows when we select options from dropdown当我们从下拉列表中选择选项时,显示选定的行而不是所有行
【发布时间】:2018-03-09 10:23:08
【问题描述】:

我正在从数据库中获取值并使用以下代码显示在表格中。

<tr>                        
    <th>ORDERID</th>              
    <th>STATUS</th>             
</tr>                    
<tr>               
    <td><?php echo $orderrecords[$k]["order_id"]; ?></td>               
    <td><?php echo $orderrecords[$k]["in_transit"]; ?></td>     
</tr>

要求

下拉框的值是从表头的数据库中获取的。当用户在下拉菜单中选择选项 [示例:Undelivered] 之一时,我只需要显示具有该值的行 [示例:Undelivered]

问题

我尝试了下面的代码,现在当用户选择“未交付”时,它不会过滤具有“未交付”值的行,而是显示表中的所有行并将值显示为“未交付”列下方的所有表行.

<table>         
<tr>                        
    <th>ORDERID</th>              
    <th>

    <select id="my_select" onchange="send_option();">
      <option>Select an option</option>     
<?php

$query = "SELECT DISTINCT in_transit FROM do_order";
$result = mysqli_query ($mysqli, $query);
while ( $row = mysqli_fetch_array($result) )
  echo "<option value='" . $row['in_transit'] . "'>" . $row['in_transit'] . "</option>";
?>                                
    </th> 

</tr>

<?php

if(!empty($orderrecords)) 
  {
    foreach($orderrecords as $k=>$v) 
       {                            
?>

<tr>             
<td><?php echo $orderrecords[$k]["order_id"]; ?></td>               
<td>
<?php

if (isset($_POST['my_option'])) 
{ 
$query = "SELECT DISTINCT in_transit FROM do_order where in_transit like '" . $_POST["my_option"] . "'";
} 

$result = mysqli_query ($mysqli, $query);

while( $row = mysqli_fetch_array($result) )
  echo $row['in_transit']."<br>";

?>

</td>   
</tr>

<?php 
    $tabindex++;
  }
     }
?>

</table> 

<form method="post" action"dashboard.php" style="display:none" id="my_form">
      <input type="text" id="my_option" name="my_option"/>
</form>


<form method="post" action"dashboard.php" style="display:none" id="my_form">
      <input type="text" id="my_option" name="my_option"/>
</form>

脚本

function send_option () {
var sel = document.getElementById( "my_select" );
var txt = document.getElementById( "my_option" );
txt.value = sel.options[ sel.selectedIndex ].value;
var frm = document.getElementById( "my_form" );
frm.submit();
}

【问题讨论】:

  • 当您选择其中一个过滤器时,页面是否会重新加载?
  • @PhilippMaurer 是的,它重新加载.....

标签: php


【解决方案1】:

当然! 当您提交表单时,您的脚本将获取所有order_id 的列表,循环它,将当前元素附加到表格行的第一个&lt;td&gt;,然后测试您是否提交了特定的in_transit .这将永远是正确的,所以它会运行过滤查询:

SELECT DISTINCT in_transit FROM do_order where in_transit like '" . $_POST["my_option"] . "'"

无论order_id 是什么,第二个&lt;td&gt; 将始终是选定的$_POST["my_option"]

您正在尝试过滤输出,因此您需要将选定的my_option 传递给获取数据的查询。

因此,要解决此问题,您需要重新运行外部查询:

<?php
    if (isset($_POST['my_option'])) 
    {
       $theBigQuery = "SELECT order_id, in_transit FROM do_order where in_transit like '" . $_POST["my_option"] . "'";
    } else {
       $theBigQuery = "SELECT order_id, in_transit FROM do_order";
    }

    $result = mysqli_query ($mysqli, $theBigQuery);
    $orderrecords =  mysqli_fetch_array($result, MYSQLI_BOTH);
    if(!empty($orderrecords)) 
    {
      foreach($orderrecords as $k=>$v) 
      {                            
?>

<tr>             
   <td><?php echo $orderrecords[$k]["order_id"]; ?></td>               
   <td><?php echo $orderrecords[$k]["in_transit"]; ?></td>
</tr>

<?php 
        $tabindex++;
      }
    }
?>

【讨论】:

  • 您处理的代码处理交付状态的输出。 (第二列)它不处理一般如何打印行的逻辑。因此,您的改进不会解决问题。
  • 是的,我的错,这段代码总是会返回所有行而不进行过滤!我会更新的!
  • @vickeycolors,试试这个方法!
  • @HamzaAbdaoui 我收到了类似这里的错误:prnt.sc/iourbg 我更新了您的代码,请检查一次:pastebin.com/vqcA5xnR
  • @vickeycolors,这只是查询的问题,在我的解决方案中,我只查询 2 列,只需用您的查询更改 $theBigQuery
猜你喜欢
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 2018-04-05
  • 2015-08-15
  • 1970-01-01
相关资源
最近更新 更多