【问题标题】:MySQLi / PHP tables filter results queryMySQLi / PHP 表格过滤结果查询
【发布时间】:2016-11-03 04:26:05
【问题描述】:

我希望在输入要搜索的值后过滤结果,以便表头链接仅返回搜索结果。目前它返回整个表。 我该怎么做?通过将表单从 post 更改为 get?有什么想法吗?

编辑**** 我没有很好地解释自己。 通常表格会显示 20+ 条记录,可以通过单击表格标题对其进行排序。搜索完成后,我希望表头只对搜索结果进行排序。 IE。如果我搜索“Tom”,它返回了 3 个结果,我希望标题中的链接只对这 3 个返回的结果进行排序 ****

谢谢。

<?php


include 'dbconnect.php';

if(isset($_POST['search'])) {

$valueToSearch = mysqli_real_escape_string($db, $_POST['valueToSearch']);
// search in all table columns
// using concat mysql function
$sql = "SELECT * FROM contacts 
        WHERE CONCAT(FirstName, Surname, Email, HomePhone, MobPhone) 
        LIKE '%".$valueToSearch."%'";

$query = mysqli_query($db,$sql);

} else {




$orderBy = "FirstName";
$order = "asc";

 if(!empty($_GET["orderby"])) {
$orderBy = $_GET["orderby"];
}
if(!empty($_GET["order"])) {
$order = $_GET["order"];
}

$firstOrder = "asc";
$SurOrder = "asc";
$emailOrder = "desc";

if($orderBy == "FirstName" and $order == "asc") {
    $firstOrder = "desc";
}
if($orderBy == "Surname" and $order == "asc") {
    $surOrder = "desc";
}
if($orderBy == "Email" and $order == "desc") {
    $emailOrder = "asc";
}

// Build an SQL Query
$sql = "SELECT * from contacts ORDER BY " . $orderBy . " " . $order;


// Run the Query
$query = mysqli_query($db,$sql);

}

?>



    <form action="front-contact.php" method="post">
    <input type="text" name="valueToSearch" placeholder="Value To Search"><br><br>
    <input type="submit" name="search" value="Filter"><br><br>

    <form action='' method=post>
    <table border='1'>
    <tr>
    <th><a href="?orderby=FirstName&order=<?php echo $firstOrder; ?>">First Name</a></th>
    <th><a href="?orderby=Surname&order=<?php echo $surOrder; ?>">Surname</th>
    <th><a href="?orderby=Email&order=<?php echo $emailOrder; ?>">Email Address</th>
    <th>Home Number</th>
    <th>Mobile Number</th>
    </tr>

  <?php




        // Loop through each returned record and store the data in $row.. // 
    while ($row = mysqli_fetch_assoc($query)) {


    // Output the column-name of $row using the array-notation // 

        echo "<form action='' method=post>";
        echo "<tr>";
        echo "<td>".$row['FirstName']."</td>";
        echo "<td>".$row['Surname']."</td>";
        echo "<td>".$row['Email']."</td>";
        echo "<td>".$row['HomePhone']."</td>";
        echo "<td>".$row['MobPhone']."</td>";
        echo " </form>";
        echo "</tr>";

    }

       echo "</table>";


?>

【问题讨论】:

  • 您在 OP 中包含的文件的名称是什么?如果您希望它使用此代码,它应该是front-contact.php。这个代码是那个页面吗?
  • 是的,这就是页面的名称。
  • 您是否尝试过回显$_POST['search']$_POST['valueToSearch'] 的值以查看它们是否真的是您正在寻找的值?我认为提交时也没有错误,对吗?
  • 嗨迈克尔,对不起..我可能用错了这个问题。搜索和排序的结果都很好。但是一旦运行搜索查询,当单击表头对值进行排序时,它会跳转回数据库中的所有结果,而不是搜索的结果。我希望它只对搜索结果进行排序。

标签: php forms sorting mysqli


【解决方案1】:

这更有意义。谢谢你的澄清。我想知道它是否会在您排序时保留搜索结果,如果您使用搜索查询填充 valueToSearch 输入。像这样的:

<input type="text" name="valueToSearch" placeholder="Value To Search" value="<?php echo isset($valueToSearch) ? $valueToSearch : '' ?>">

当您进行初始搜索时,输入可能会被清除,因此当您对表进行排序时,它会重新查询您的数据库,但由于输入为空,它会再次提取所有数据库记录。这是我的想法。如果它不起作用,请告诉我。

【讨论】:

    【解决方案2】:

    如何在这里搜索过滤表

    <?php
    $servername="localhost";
    $username="root";
    $password="";
    $dbName="multi_login";
    $con=new mysqli($servername,$username,$password,$dbName);
    if($con->connect_error){
    	die("Connection failed:" . $con->connect_error );
    	
    }
    while($row=$result->fetch_object()){
    					$total=$row->salary*$row->tax;
    					
    					echo'<tr>
    						<td>'.$row->id.'</td>
    						<td>'.$row->name.'</td>
    						<td>'.$row->sex.'</td>
    						<td>'.$row->date.'</td>
    						<td>'.$row->salary.'</td>
    						<td>'.$row->tax.'</td>
    						<td>'.$total.'</td>
    						
    						<td>

    【讨论】:

      猜你喜欢
      • 2011-08-21
      • 2022-10-14
      • 2017-07-24
      • 2021-11-14
      • 2012-04-20
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多