我目前正在制作一个网站,我需要一个非常先进的搜索引擎。我希望用户能够说Person @ company
或Product @ Category
。我如何检测@符号或任何特殊字符,将其过滤出来并根据返回的字符串生成各个变量。所以$a = Person
和$b = company
。PHP高级搜索
PHP高级搜索
回答
您可以使用explode()
分割字符串:
$items = explode('@', 'Person @ Company', 2);
if(count($items) === 2) {
// Person @ Company
$person = trim($items[0]);
$company = trim($items[1]);
// Do your searching here...
} else {
// Search normally, not Person @ Company.
}
非常感谢。只是通过手册来查看如何做到这一点。 – 2012-01-10 01:36:00
将它作为获取请求发送,格式为a =人& b =公司等。另一种方式正是你说的,循环查看字符串并逐个检查字符。当你遇到@符号时,你知道它前面的字母(不包括空格)是a的值,而@(不包括空格)后的所有符号都是b的值。
对不起,我试图尽可能清楚。
好的谢谢!我想将它作为POST发送,只是为了安全,所以我会在第二个选项上工作。谢谢!! – 2012-01-10 01:26:10
*发送为... POST只是为了安全* \ * facepalm \ * – 2012-01-10 01:37:32
@Joseph,作为POST请求发送内容会在相应的GET请求中增加NO SECURITY。下载Firefox的tamperdata插件作为示例,以查看用户如何操作POST请求。 – atxdba 2012-01-10 01:40:59
这是实现非常简单;
function searchForPersonAtCompany($searchQuery) {
global $db;
$queryComponents = explode('@', $searchQuery, 2);
if (count($queryComponents) != 2) {
// '@' was not specified in the search query, return an empty array.
return array();
}
$person = $queryComponents[0];
$company = $queryComponents[1];
$sql = 'SELECT p.id AS personId, c.id AS companyId FROM people p JOIN companies c ON p.company = c.id WHERE p.name LIKE :person AND c.name LIKE :company';
$stmt = $db->prepare($sql);
$stmt->bindValue(':person', $person);
$stmt->bindValue(':company', $company);
$stmt->execute();
return $stmt->fetchAll();
}
您没有指定数据库模式,所以我猜,你有一个people
表和companies
表,其中涉及到公司的表与company
场的人。
Table: People
id | name | company
--------------------------------------------
1 | Alice | 1
2 | Bob | 1
3 | Charles | 2
Table: Companies
id | name
--------------------------------------------
1 | Company A
2 | Company B
您将不得不根据您的目的调整代码,但使用我的测试数据,以下内容应该可以工作;
searchForPersonAtCompany('[email protected] A');
searchForPersonAtCompany('[email protected] B');
注:
- 这是一个非常简单的实现你的搜索,你可能会得到更好的寻找到一个基于数据库的搜索引擎,它可以处理为未来更复杂的查询。
- 我已经使用PDO作为连接到我的数据库(bindValue,exec等),你可能会使用不同的东西。
:person
和:company
只是SQL中的变量。
使用1作为极限参数是错误的。 – Ryan 2012-01-10 01:37:13
发现那个,编辑为2;) – xconspirisist 2012-01-10 01:39:23
- 1. 高级搜索使用PHP
- 2. 高级搜索,PHP和MySQL
- 3. 高级搜索
- 4. 高级搜索
- 5. 高级搜索vb.net
- 6. Jqgrid高级搜索
- 7. Sqlite高级搜索
- 8. Php/MySql'高级搜索'页面
- 9. PHP中的高级搜索选项
- 10. PHP/MySQL的高级搜索页面
- 11. 高级搜索使用Hibernate搜索
- 12. Deezer高级搜索无效
- 13. 高级搜索mysql perl
- 14. Laravel高级搜索查询
- 15. Mediawiki中的高级搜索
- 16. Yii2的高级搜索
- 17. Facebook API - 高级搜索
- 18. Zimbra webmail高级搜索
- 19. 高级搜索查询3.1
- 20. 高级订单时搜索
- 21. 在Vim中高级搜索
- 22. 展望高级搜索“urn:schemas:httpmail:datereceived”
- 23. 高级搜索solr和haystack?
- 24. 高级搜索MVC3 ASP.NET
- 25. 简单/高级搜索
- 26. 高级MySQL搜索帮助
- 27. 移动高级搜索 - Magento
- 28. 展望宏高级搜索
- 29. 制作高级搜索
- 30. 高级搜索表单?
我相信这只是一个简单的解析问题,不是'高级搜索':) – ianace 2012-01-10 02:39:40