用户从php MySQL数据库过滤结果


User filtered results from php MySQL database

PHP/MySQL新手在此

我设法开发了一个网页,显示信息从我的数据库通过以下在线教程。现在,我只想为用户添加一种过滤信息的方式。我知道如何使用WHERE过滤它,但我不知道如何让用户更新该信息。

这是我尝试的:

$query_rsLodging = "SELECT name, address, city FROM lodging WHERE lodging.city = '". $searchVar . "' ORDER BY lodging.name";

然后我尝试使用跳跃菜单将信息传递给变量:

<form name="form" id="form">
<select name="jumpMenu" id="jumpMenu" onChange="MM_jumpMenu('parent',this,0)">
  <option value="#">Sort by...</option>
  <option value="directory.php?searchVar=Miami">Miami</option>
  <option value="directory.php?searchVar=Miami Beach">Miami Beach</option>
</select></form>

页面重新加载附加的URL,但不影响结果。但是,将下面的代码放在查询上面就可以了:

$searchVar = "Miami"

显然,我没有正确地将信息传递给变量,但我感觉我已经接近了。

问题:什么是最好的方式让我的用户过滤我的数据库的结果(最好通过下拉菜单)?

使用$_GET和$_POST将查询字符串变量放入PHP范围。在您的示例中,将$searchVar = "Miami"替换为$searchVar = $_GET['searchVar']

就像我之前写的,婴儿表会吃掉你的数据库。阅读这里如何避免sql注入

可能你必须从超级全局数组中获得$searchVar $_GET:

<?  $searchVar = $_GET['searchVar'] ?>

PHP不直接从querystring中读取变量,因为这是一个安全问题。

您需要使用Javascript和AJAX将信息发送回服务器。

PHP在服务器上执行,PHP呈现HTML并将该HTML发送给客户端。PHP脚本就完成了执行。客户机接收到HTML后,浏览器呈现HTML并将结果显示给用户。用户与HTML的组件交互(比如下拉菜单)。关键是,不管它看起来如何,PHP在任何HTML执行之前完全执行。因此,客户端和HTML之间的交互并不像您最初想象的那么容易。

也就是说,这是一个很多人都遇到过并解决过的常见问题;解决方案是以AJAX的形式出现的,其中在客户端以HTML形式运行的Javascript向服务器发送动态请求,服务器可以在PHP中执行以检索数据,这些数据返回给客户端Javascript,然后客户端Javascript可以格式化数据并适当地修改页面。

有另一种方法可以做到这一点,它更简单,但用户体验稍微不那么愉快;您可以让HTML页面将希望在服务器上选择的数据发送回服务器,然后PHP可以读取POST变量并从那里进行查询。它更简单,但问题是用户体验不太愉快,因为整个页面需要刷新。

您的<option>标签几乎肯定有错误的值,并且您的表单没有正确构建:

<form action="mysearch.php" method="post">
<select name="jumpMenu">
   <option value="Miami">Miami</option>
   <option value="Miami Beach">Miami beach</option>
</select>
</form>

您的表单,如在您的示例中构造的,将试图做:

SELECT ... WHERE loding.city = 'directory.php?searchVar=Miami'

你应该做什么

SELECT ... WHERE lodging.city = 'Miami'