PHP / MySQL新手在这里。
我设法开发了一个网页,通过在线教程显示我的数据库中的信息。现在,我只想为用户添加一种过滤该信息的方法。我理解如何使用WHERE过滤它,但我无法弄清楚如何让用户更新该信息。
这是我试过的:
$query_rsLodging = "SELECT name, address, city FROM lodging WHERE lodging.city = '". $searchVar . "' ORDER BY lodging.name";
然后我尝试使用jumpmenu将信息传递给变量:
<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>
页面使用附加的网址重新加载,但不会影响结果。但是,在查询上方放置以下代码会:
$searchVar = "Miami"
显然,我没有正确地将信息传递给变量,但我觉得我很接近。
问题:让我的用户过滤数据库结果的最佳方式是什么(最好通过下拉菜单)?
答案 0 :(得分:1)
要将查询字符串变量放入PHP范围,请使用$ _GET和$ _POST。
在您的情况下,您推送$searchVar = "Miami"
的位置将其替换为$searchVar = $_GET['searchVar']
。
正如我之前写的那样,Boby tables会吃掉你的数据库。 Read here how to avoid sql injection
答案 1 :(得分:1)
可能你必须从超级全局数组$ _GET:
获取$ searchVar<? $searchVar = $_GET['searchVar'] ?>
PHP不直接从查询字符串中读取变量,因为它是安全问题。
答案 2 :(得分:0)
您需要使用Javascript和AJAX将信息发送回服务器。
PHP在服务器上执行,PHP呈现HTML并将HTML发送到客户端。然后完成PHP脚本的执行。客户端收到HTML后,浏览器会呈现HTML并将结果显示给用户。用户与HTML的组件交互(例如下拉列表)。关键是,尽管看起来很像,PHP在任何HTML执行之前都会完全执行。因此,客户端和HTML之间的交互并不像您最初想象的那么容易。
那就是说,这是许多人遇到并解决的常见问题;解决方案是以AJAX的形式出现的,其中在HTML客户端上运行的Javascript向服务器发送动态请求,可以在PHP中执行以检索数据,然后返回到客户端Javascript,然后可以格式化数据并适当修改页面。
还有另一种方法可以做到这一点,但是用户体验稍微不那么愉快;您可以让HTML页面使用您希望在服务器上选择的数据返回服务器,然后PHP可以读取POST变量并从那里进行查询。它更简单,但问题是用户体验不太愉快,因为需要刷新整个页面。
答案 3 :(得分:0)
您的<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'