我正在创建一个搜索网站,用户可以通过商家名称或表格行cat1,cat2,cat3进行搜索。 “cat”行与业务名称位于同一个表中。我已经设置好了,所以如果我搜索正确的商家,我会返回商家信息。但我需要让它显示具有您搜索的类别名称的商家。
**基本上我要求的是获取搜索(php)以搜索商家名称或三种类别之一。
任何帮助,将不胜感激...这是我的代码如果您需要它(虽然我认为这应该是一个非常简单的任务,也许不是,但我不是PHP初学者)
include('config.php');
$var = $_REQUEST['search'];
$trimmed = trim($var);
$search = ucfirst($var);
$result = mysql_query("SELECT * FROM gj WHERE name like '%$search%' ORDER by name") or trigger_error(mysql_error());
$num_rows = mysql_num_rows($result);
然后我使用while循环从中获取所有代码。
while($row = mysql_fetch_array($result))
{
$id=$row['id'];
$name=$row['name'];
$phone=$row['phone'];
$website=$row['website'];
$city=$row['city'];
$address=$row['address1'];
$zipcode=$row['zipcode'];
$addressmap = preg_replace('/\s/', '+',$address);
$citymap = preg_replace('/\s/', '+',$city);
echo"
答案 0 :(得分:2)
include('config.php');
$searchfields = array('name', 'cat1', 'cat2', 'cat3', )
$cleandata = mysql_real_escape_string(trim(strtolower($_REQUEST['search'])));
$where = array();
foreach($searchfields as $field) {
$where[] = 'lcase('.$field.') like \'%.$cleandata.%\'';
}
$result = mysql_query('SELECT * FROM gj WHERE '.implode(' OR ', $where).' ORDER by name') or trigger_error(mysql_error());
$num_rows = mysql_num_rows($result);
我添加了一个变量cleandata,其中包含已清理的请求数据(以防止SQL注入)。
我创建了一个变量搜索字段,可以轻松扩展以搜索更多字段。
要搜索更多字段,只需展开数组数据:
$searchfields = array('name', 'cat1', 'cat2', 'cat3', 'cat4', )
EDIT 添加不区分大小写的
编辑添加了PDO
请注意,由于我写了这个答案,社区已经开始了古代mysql_*
的{{3}}。请参阅deprecation process?相反,您应该了解red box并使用prepared statements或PDO。如果您无法决定,MySQLi将有助于选择。如果您想学习,this article。
使用PDO重写上述答案将如下所示:
$dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass');
$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$searchfields = array('name', 'cat1', 'cat2', 'cat3', )
$where = array();
foreach($searchfields as $field) {
$where[] = 'lcase(' . $field . ') LIKE :keyword';
}
$stmt = $dbConnection->prepare('SELECT * FROM gj WHERE ' . implode(' OR ', $where) . ORDER BY name);
$stmt->execute(array(
':keyword' => '%' . trim(strtolower($_REQUEST['search'])) . '%',
));
答案 1 :(得分:-1)
让我们说,你想搜索商务名称'杰克'和类别'php' 您的请求的网址将是这样的......
http://yourdomain.com/search.php?name=Jake&category=php
你需要有一些列,这是表行的唯一标识符。在这个例子中,我使用'id'列。根据您的需要进行编辑。现在让我们设置您的查询...
$query = "SELECT * FROM `gj` WHERE name LIKE '%{$_GET['name']}%' AND `gj.id` IN ( SELECT id FROM test WHERE cat1 LIKE '%{$_GET['category']}%' OR cat2 LIKE '%{$_GET['category']}%' OR cat3 LIKE '%{$_GET['category']}%' )"; // or edit this cat1 LIKE '%{$_GET['category']}%' // to cat1 = '{$_GET['category']}' // if you want to compare exact values
使用此查询,您可以从DB
$result = mysql_query($query) or trigger_error(mysql_error());
现在用检索到的数据做任何你想做的事。
让我知道结果; - )