如何使$ _POST像$ _GET一样用于搜索查询?

时间:2012-01-18 01:29:24

标签: php mysql html search post

基本上我有一个搜索查询,如果我在$ _GET中使用它,它可以正常工作,但我想为其中一个使用$ _POST(然后用json返回)。但是,我不确定如何实现这一点,以便搜索将单独查看每个单词...

这是我的搜索查询...

    SELECT  DISTINCT(auto), user_id, username, first_name, last_name, email, sex, active, ppic, time_zone, adult_filter, ((CASE WHEN `username` LIKE '%$search%' THEN 2 ELSE 0 END) + (CASE WHEN `first_name` LIKE '%$search%' THEN 1 ELSE 0 END) + (CASE WHEN `last_name` LIKE '%$search%' THEN 1 ELSE 0 END)) AS relevance
FROM users, network
WHERE `username` LIKE '%$search%' OR
  `last_name`LIKE '%$search%' 
  OR `first_name` LIKE '%$search%' 
ORDER BY relevance DESC, username LIMIT 5

所以基本上,我需要做的就是使$search = $_POST['search']能够使用此查询...有人能告诉我这是如何实现的吗?

编辑: 看起来我可以使用$ .get ...(这很有意义)而不是$ .post(这是我习惯的)并获得相同的结果。如果我错了,请随意纠正我,但是我会尝试一下,看看它是怎么回事。

3 个答案:

答案 0 :(得分:3)

使用$_REQUEST - 它包含$_GET$_POST$_COOKIE的内容。

答案 1 :(得分:3)

简短的回答是你不应该这样做。

现在,答案很长......

为什么首先要将$_POST用于读取请求?让我向您介绍HTTP上下文中安全幂等的概念。

HTML 2.0规范说:

  

如果表格的处理是幂等的(即它没有持久性   对世界状态的可观察影响),然后是形式方法   应该是GET。许多数据库搜索都没有明显的副作用   制作查询表格的理想应用程序。

关于HTTP GET

HTTP动词GET专门用于检索资源而无需更改资源。我的意思是它安全。它不会引起任何副作用。您的案例中的GET请求应该用于从数据库获取数据并显示它。现有的HTML页面,图像请求,数据库搜索等......这些都是应该使用GET进行的安全请求。

同时,幂等意味着执行请求724次将具有与执行一次相同的效果。幂等请求可能会在第一次在数据库中创建某些内容,但它不会再次执行,或者只会在下次返回对它的引用。

HTML规范继续......

  

特别是,已经建立了GET和GET的惯例   HEAD方法不应该具有采取行动的意义   除了检索。这些方法应该被认为是“安全的”。   这允许用户代理表示其他方法,例如POST,PUT   和DELETE,以一种特殊的方式,使用户了解   事实上,正在要求采取可能不安全的行动。

因此,总而言之,请您了解不应使用POST执行安全的只读操作。

答案 2 :(得分:0)

你应该研究mysql match against的相关性和几个列的匹配。

SELECT DISTINCT(auto), user_id, username, first_name, last_name, email, sex, active, ppic, time_zone, adult_filter, ((CASE WHEN `username` LIKE '%$search%' THEN 2 ELSE 0 END) + (CASE WHEN `first_name` LIKE '%$search%' THEN 1 ELSE 0 END) + (CASE WHEN `last_name` LIKE '%$search%' THEN 1 ELSE 0 END)) AS relevance
FROM users, network WHERE MATCH (username, first_name, last_name) AGAINST ('$search' IN BOOLEAN MODE) ORDER BY relevance DESC, username LIMIT 5;

ADV对$ _REQUEST的建议将用于捕获帖子和获取。

但是,您询问了搜索字词中每个字词的相关性。匹配也可以这样做,但您需要将其选为列...

SELECT MATCH (username, first_name, last_name) AGAINST ('$search') AS relevance, DISTINCT(auto), user_id, ...

不要忘记在我提供的链接中查找匹配。如果你是新手,你需要知道一些事情 - 比如要在你要搜索的列上要求myisam表和全文索引。