【问题标题】:PHP sort database by domain namePHP按域名排序数据库
【发布时间】:2021-09-17 04:55:09
【问题描述】:

我有一个问题,我必须从数据库中取出域名,并创建一个 knokpu,我可以使用它按此域对数据库进行排序,也就是说,如果我点击 gmail 按钮,那么使用 gmail 的用户应该排序,如果有雅虎用户,那么当你点击雅虎按钮时,也会进行排序。 问题是我不知道如何正确地将按钮与排序相关联......我将非常感谢您的帮助。

这是我的 php 代码。

<!DOCTYPE html>
<html>
<head>
  <title>Display all records from Database</title>
</head>
<body>

<h2>All emails</h2>

<table border="2">
  <tr>
    <td>Sr.No.</td>
    <td>E-mail</td>
    <td>Delete</td>
    <td>CSV</td>
  </tr>
  <a href="?orderBy=email">
    <button>Sort By E-mail</button>
</a>
<a href="?orderBy=date">
    <button>Sort By Date</button>
</a>
<a href="?orderBy=">
    <button>Export as CSV</button>
</a>
</br>

<?php
include "php/server.php"; // Using database connection file here
$orderBy = array('email', 'date'); // create array of sort options
$order='date';  // default sort option
if (isset($_GET['orderBy']) && in_array($_GET['orderBy'], $orderBy)) {
  $order = $_GET['orderBy'];
}                              // change sort option depending on $order
$query = 'SELECT * FROM users ORDER BY '.$order;
$records = mysqli_query($db, $query);     // fetch data from database

$dom=array();


include "php/search.php";  //include search engine
if(isset($_POST["submit"])){        //if button is pressed fecth data from search
  $records = mysqli_query($db, $searchquery); 
}else{      //if not fecth data from db
  $records = mysqli_query($db, $query); 
} 
while($data = mysqli_fetch_array($records))
{
  $parts = explode('@', $data['email']);
  $domain = array_pop($parts);

?>
  <tr>  
    <td><?php echo $data['email']; ?></td>  
    <td><?php echo $data['date']; ?></td>  
    <td><a href="php/delete.php?id=<?php echo $data['id']; ?>">Delete</a></td>
    <td><a><input type="checkbox" id="horns" name="horns"></td>  
    <td><?php echo $domain; ?></td>
  </tr> 
  <tr>
  <input type="submit" name="<?php $domain; array_push($dom,$domain)?>" value="<?php echo $domain; ?>">
</tr>

<?php
}
var_dump($dom);
?>
<h3>Emails is sorting by:<?php echo $order ?></h3>
</table>
</body>
</html>

设计:

【问题讨论】:

  • 传递一个参数,告诉您排序依据,就像您为日期和电子邮件所做的那样。为什么你觉得这会有所不同?
  • @El_Vanja 我只是想不出在单击按钮时如何使给定域名的搜索工作。
  • @Natrien 您想按域排序还是按域过滤?
  • @MohdAlomar 我希望在加载数据库时,我得到其中的各种域,出现带有域名称的按钮,通过单击它们,我应该只获得这样的记录域。(因此,如果我点击 gmail.com,只会显示域为 gmail.com 的电子邮件)
  • 您需要使用pattern matching。请使用参数化查询来避免SQL Injection。请访问此答案以了解如何avoid SQL Injection

标签: php html css


【解决方案1】:

我想你的意思是,你想根据点击的电子邮件提供商按钮过滤数据?

你可以像这样添加 HTML:

...
<a href="?filterBy=gmail.com">
  <button>gmail.com</button>
</a>
<a href="?filterBy=inbox.lv">
  <button>inbox.lv</button>
</a>
<a href="?filterBy=yahoo.lv">
  <button>yahoo.lv</button>
</a>
...

在 PHP 中你需要更新这一行:

...
if (isset($_GET['orderBy']) && in_array($_GET['orderBy'], $orderBy)) {
  $order = $_GET['orderBy'];
}
$filter = "";
if (isset($_GET['filterBy'])) {
  $filter = "WHERE `email` LIKE ?";
}
$query = 'SELECT * FROM users '.$filter.' ORDER BY '.$order;
$prepare = mysqli_prepare($db, $query);
if (isset($_GET['filterBy'])) {
   $param = "%".$_GET['filterBy'];
   $prepare->bind_param('s', $param);
}
$prepare->execute();
// $records = mysqli_query($db, $query); // change this query to:
$records = $prepare->get_result();
...

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多