2012-05-15 63 views
2

我在网上搜索了许多不同的方式,但无法找到答案,我的问题。我正在自学网站开发,并试图创建一个在线房地产网站。当我尝试搜索属性搜索多列使用PHP

我的问题就出现了。例如,我想搜索特定区域或邮政编码中的所有属性。当我尝试搜索多个字段时,如地址栏1,地址栏2,邮政编码和区域(如London SW1V)。

下面是查询我目前使用,并希望改变它的工作,我需要的方式:

SELECT property.propertyid, property.propertyname 
FROM property 
WHERE property.address_1 LIKE '%txtSearchField%' 
    OR property.address_2 LIKE '%txtSearchField%' 
    OR property.postcode LIKE '%txtSearchField%' 
    OR property.area  LIKE '%txtSearchField%' 
+1

到底是什么问题?你的查询看起来没问题。我可以确认你确实插入了正确的变量,并且没有在表格中搜索“txtSearchField”吗? – Rawkode

+0

如果你不使用连接查询,没有必要把表名的属性之前,你可以只使用属性ID,PROPERTYNAME,... – jbduzan

回答

2

在这个SQL查询构造你执行它,不管是什么txtSearchField值(即使是空的)。你也忘了美元符号$在前面这个变量txtSearchField的,这就是为什么你不能从你的输入形式的任何结果,因为你总是搜索文本txtSearchField,变量$txtSearchField的不是内容。 (我猜你使用一个带有HTML文本输入的输入表单,它被称为txtSearchField)。请记住将HTML表单的方法设置为“发布”,因为如果省略它,则默认为“get”。

如果我真的没错,你应该返工你的代码是这样的:

<?php 
    //Sanitize user input 
    $txtSearchField = filter_var($_POST['txtSearchField'], FILTER_SANITIZE_STRING); 
    //SQL query 
    $query = "SELECT property.propertyid, property.propertyname 
    FROM property 
    WHERE CONCAT(property.address_1, ' ', 
        property.address_2, ' ', 
        property.postcode, ' ', 
        property.area) LIKE '%$txtSearchField%'" //see the $ sign here 
//Finally, execute query and get result 
$result = mysql_query ($query) or die ('SQL error occured: '.mysql_error()); 
while ($array = mysql_fetch_assoc($result)) { 
    echo $result['address_1'].'/'.$result['address_2'].'/'.$result['postcode'].'/'.$result['area'].'<br/>'; 
} 
    ?> 
4

它不是有效的方法,但最简单和良好的低流量的网页:

SELECT property.propertyid, property.propertyname 
FROM property 
WHERE CONCAT(property.address_1, ' ', 
       property.address_2, ' ', 
       property.postcode, ' ', 
       property.area) LIKE '%txtSearchField%' 

这应该为你工作。