如何使用PHP和MySQL创建搜索功能?

时间:2014-05-10 18:22:14

标签: php html mysql

下面我有一个HTML搜索表单 我需要一些关于PHP和MySQL的帮助。我仍然是PHP和MySQL的新手,一位朋友告诉我,我需要使用一个WHERE语句,但是在我做过的研究中,它显示了我或者我理解这个错误。请伙计们,由于我忙于一个项目,我非常需要这个:

<form id="advanced_search" action="" class="clearfix" name="advanced_search" method="post">

以下是所有标签和文字字段,其中一些是您可以看到的选择字段:

<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
<label for="country"><b>Country</b></label>
<input type="text" name="country"><br /><br />
</div>
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
<label for="location"><b>Location</b></label>
<input type="text" name="location"><br /><br />
</div>
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
<label for="status"><b>Status</b></label>
<input type="radio" name="status" value="For Rent"><b><span style="color: #0A0000">For Rent</span></b></input><br />
<input type="radio" name="status" value="For Sale"><b><span style="color: #0A0000">For Sale</span></b></input>
</div>
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
<label for="type"><b>Type</b></label>
<input type="text" name="type"><br /><br />
</div>
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
<label for="bedrooms"><b>Bedrooms</b></label>
<input type="text" name="bedrooms"><br /><br />
</div>
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
<label for="baths"><b>Bathrooms</b></label>
<input type="text" name="baths"><br /><br />
</div>
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
<label for="min_price"><b>Min Price</b></label>
<input type="text" name="minprice"><br /><br />
</div>
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
<label for="max_price"><b>Max Price</b></label>
<input type="text" name="maxprice"><br /><br />
</div>
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
<label for="condition"><b>Condition of Use</b></label>
<input type="radio" name="condition" value="Furnished"><b><span style="color: #0A0000">Furnished</span></b></input><br />
<input type="radio" name="condition" value="Not Furnished"><b><span style="color: #0A0000">Not Furnished</span></b></input>
</div>
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">
<label for="from"><b>From The</b></label>
<input type="radio" name="from" value="Agent"><b><span style="color: #0A0000">Agent</span></b></input><br />
<input type="radio" name="from" value="Private"><b><span style="color: #0A0000">Private</span></b></input>

</div>

以下是表单的结尾,但我看到这里没有提交值:

<div class="clearfix"></div>
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12">
<a href="#" class="btn btn-inverse btnblock">SEARCHPROPERTY</a>
</div>
</form>

**Here's my PHP I just have done:**

<?php


 if(isset($_POST['search']))
{
$key=$_POST["search"];  //key=pattern to be searched
$con=mysqli_connect("saproperties","localhost"," ","my_db");

// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}


**Here by the WHERE and the LIKE, What do I have to put in there?**

$result=mysqli_query($con,"select * from properties where `column_name` like '%$key%'");

while($row=mysqli_fetch_assoc($result))
{

我在这里加入了我的价值观:

$country = $_POST['country'];
$location = $_POST['location'];
$status = $_POST['status'];
$type = $_POST['type'];
$bedrooms = $_POST['bedrooms'];
$bathrooms = $_POST['bathrooms'];
$minprice = $_POST['min_price'];
$maxprice = $_POST['max_price'];
$conditionofuse = $_POST['conditionofuse'];
$fromthe = $_POST['fromthe'];
}
}

?>

3 个答案:

答案 0 :(得分:3)

以下是用于从数据库表中搜索关键元素的示例HTML和PHP / Mysql代码

<强> HTML

<form method="GET" action="search.php">
<input type="text" name="search"/>
<input type="submit" value="search">
 </form>

PHP: search.php

<?php
if(isset($_GET['search']))
{
$key=$_GET["search"];  //key=pattern to be searched
$con=mysqli_connect("example.com","peter","abc123","my_db");

// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result=mysqli_query($con,"select * from table where `column_name` like '%$key%'"); 

while($row=mysqli_fetch_assoc($result))
{
// Print your search variables 
}

}


?>

答案 1 :(得分:2)

虽然您的问题已经被推翻了一些,但我认为这里有一些空间可以帮助您,也许还有其他人可能会遇到此页面。这里有三个组件需要查看:HTML,PHP和数据库。现在,你已经提到过你正在使用MySQL,所以我将根据它来定制我的答案。

HTML
你在那里写的HTML基本上是一个非常小的形式。请注意,它使用post方法,这有点奇怪(你可以搜索get和post方法之间的差异),这个简单的例子应该没​​问题。您可能需要在该表单中添加搜索按钮。我已经包含了一个简单的搜索式表单,我从我使用的登录表单中占用了这些表单。

<form method="post" action="?p=home" style="text-align:center">
    <input class="input-large" name="searchInput" type="password"><br>
    <button class="btn btn-success" name="searchSubmit" type="submit">Search</button>
</form>

有些类可能不一样(我在一个单独的CSS文件中定义了这些,这是另一种蠕虫,但你明白了。基本的前提是有一个输入字段和一个按钮,表格类型为post。

PHP
就PHP而言,最简单的方法是在HTML顶部简单地包含一个PHP部分。这是使用标记完成的,标记分别指示PHP部分的开始和结束。因此,对于这样的表单,我会在表单所在的同一文件的顶部使用以下内容。

//Checks to see if the user has pressed the search button
if(isset($_POST['searchSubmit'])){
    //When the user presses this button, we run a search query
}

因此,很简单,当用户按下搜索按钮时,我们使用用户在表单中提供的信息运行searchFuntion。当然,您可能希望检查用户提供的有效性输入,并且网上其他地方有很多很好的资源。请注意,$ _POST ['searchInput']将包含表单中字段的信息!

MySQL
这是一个有点棘手的地方,因为你没有发布任何关于你的数据库的东西,所以我真的不能给你任何具体的建议。话虽这么说,我可以告诉你一些你的查询应该包含什么。像这样的简单搜索的大多数查询将包含以下内容:

SELECT * FROM databaseName WHERE searchColumn LIKE '%searchterm%' LIMIT 5

这看起来有点令人困惑,所以我会把它分解。 SELECT *选择名为“databaseName”的数据库中的所有列,您必须根据自己的数据库结构进行更改。 “searchColumn”术语表示我们要搜索的列(名称,地址,内容?)。 LIKE'searchterm%'位表示我们要查找的内容,%是通配符。 There's a great stack overflow question here about wildcards to use for searching。最后,LIMIT 5限制了将返回多少结果。当然,有很多方法可以自定义一个查询,你需要多找几点才能找到适合你的方法。这只是一个例子。

您可以通过mysqli_query函数将MySQL与PHP结合使用,还有很多其他文章正在执行here 。本文还向您展示了如何使用mysql_fetch_array返回和打印结果,如下所示:

mysql_connect("your.hostaddress.com", "username", "password") or die(mysql_error()); //Connect to the the server we are going to use
mysql_select_db("Database_Name") or die(mysql_error()); //Select the database 
$data = mysql_query("YOUR QUERY HERE") ;//Create your query
or die(mysql_error()); //If the query fails, die (I'll explain below)
while($info = mysql_fetch_array( $data )) 
{ 
     //Print out your results here
}

我应该提一下,如果调用它,die命令将阻止PHP执行,并将在括号中打印消息。在这种情况下,括号中的消息是来自MySQL的错误消息。

祝你好运。

答案 2 :(得分:0)

你还没有分享你的PHP代码!!

只需编写一个select语句,然后使用外卡将搜索文本设置为搜索变量之前和之后的%,您可以通过帖子获取或获取。