首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多字搜索

问多字搜索
EN

Stack Overflow用户
提问于 2013-10-31 19:26:50
回答 2查看 152关注 0票数 1

我做了一个简单的搜索引擎,可以搜索我的数据库。它的工作方式是这样的:在复选框中检查要搜索的单词。结果使用表单发送。问题是它只搜索选中的最后一个单词。这意味着我要检查3个单词,它只显示最后一个单词检查的结果。这是我的表格:

代码语言:javascript
复制
<form method="POST" action="<?=$_SERVER["PHP_SELF"]?>"> 
<p>Search for: 
</p> 
Books: <input type="checkbox" name='search' value="Books"> 
Movies: <input type="checkbox" name='search' value="Movies"> 
Outdoor: <input type="checkbox" name='search' value="Outdoor"> 
Indoor: <input type="checkbox" name='search' value="Indoor"> 
</p> 
<p><input type='submit'  value='Search'></p> 
</form> 

这是生成结果的代码:

代码语言:javascript
复制
    <?php 
if(isset($_POST['search'])) 
{ 
  $connx = mysql_connect('localhost', 'USER', 'PASSWORD') or die("connx"); 
  $db = mysql_select_db('DB_NAME') or die(mysql_error()); 

  # convert to upper case, trim it, and replace spaces with "|": 
  $search = (ini_get('magic_quotes_gpc')) ? stripslashes($_POST['search']) : 
            $_POST['search']; 
  $search = mysql_real_escape_string($search); 
  $search = strtoupper(preg_replace('/\s+/', '|', trim($_POST['search']))); 

  # create a MySQL REGEXP for the search: 
  $regexp = "REGEXP '[[:<:]]($search)[[:>:]]'"; 
  $query = "SELECT * FROM `galleries` WHERE UPPER(`keywords1`) $regexp OR ". 
           "`keywords2` $regexp"; 
  $result = mysql_query($query) or die($query . " - " . mysql_error()); 

echo "<table>\n"; 
while($row = mysql_fetch_assoc($result)) 

{ 
    echo "<tr>"; 
    echo "<td><img src=../thumbs/{$row['type']}/{$row['folder']}/{$row['date']}-{$row['num']}/{$row['thumbimage']} border=1></td>";
    echo "<td>{$row['name']}</td>"; 
    echo "<td>{$row['date']}</td>"; 
    echo "<td><a href=../view.php?id={$row['id']} target=blank>View</a></td>"; 
    echo "</tr>\n"; 
  }  
} 
?> 

有人能帮我告诉我如何让搜索引擎搜索和/或显示超过一个单词的搜索结果吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-06 18:56:52

问题解决了!我替换了两行:

$search = mysql_real_escape_string($search);

$search = strtoupper(preg_replace('/\s+/',‘溶胶’,($_POST‘’search‘));

通过以下方式:

$search =内爆(‘AC.26’,$_POST‘’search‘);

现在它起作用了--只要其他人需要这些信息:)

票数 0
EN

Stack Overflow用户

发布于 2013-10-31 19:32:32

您有同名的输入字段,因此,您将得到最后一个您需要的数组,用于像name="search[]"这样的搜索字段,并通过对数组值的查询来创建循环。

代码语言:javascript
复制
Books: <input type="checkbox" name='search[]' value="Books"> 
Movies: <input type="checkbox" name='search[]' value="Movies"> 
Outdoor: <input type="checkbox" name='search[]' value="Outdoor"> 
Indoor: <input type="checkbox" name='search[]' value="Indoor"> 

像这样的东西

代码语言:javascript
复制
$regexp ="";
$searharray =$_POST['search'];
$count=count($searharray);
$index=1;
foreach($searharray as $s){

$s = (ini_get('magic_quotes_gpc')) ? stripslashes($s) :$s; 
$s= mysql_real_escape_string($s); 
$s = strtoupper(preg_replace('/\s+/', '|', trim($s))); 

$regexp .= " UPPER(`keywords1`) REGEXP '[[:<:]](".$s.")[[:>:]]'  OR  `keywords2` REGEXP '[[:<:]](".$s.")[[:>:]]'"; 
if($index<$count){
  $regexp .=" OR ";
 }
 $index++
}

 $query = "SELECT * FROM `galleries` WHERE $regexp"; 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19715021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档