【问题标题】:User filtered results from php MySQL database来自 php MySQL 数据库的用户过滤结果
【发布时间】:2011-07-07 21:46:48
【问题描述】:

这里是 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"

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

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

【问题讨论】:

  • ...“在线教程”....现在我很害怕。
  • @Itay - 感谢您的提示。 @Marc - 必须在某个地方学习。

标签: php mysql database filter


【解决方案1】:

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

正如我之前写的,Boby tables 会吃掉你的数据库。 Read here how to avoid sql injection

【讨论】:

  • 哇...答案很快就来了!该解决方案非常有效。现在,如何让页面第一次显示所有记录?
  • 第一次加载页面时我可以传递一个变量来显示所有记录吗?
【解决方案2】:

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

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

PHP 不会直接从查询字符串中读取变量,因为这是一个安全问题。

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

    • Itay Moav 提供的解决方案就像上面的魅力一样。谢谢。
    【解决方案4】:

    您的&lt;option&gt; 标签几乎肯定有错误的值,并且您的表单构造不正确:

    <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'
    

    【讨论】:

    • 这是一个跳转菜单,所以编码正确。结果使用修改后的 URL 重新加载页面:http://www.mysite.com/directory.php?searchVar=miami
    猜你喜欢
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多