搜索数据未输出正确的结果

时间:2014-05-07 01:00:32

标签: php html mysql

此表单是一个搜索表单,允许用户使用场地和类别字段搜索事件,这些字段作为下拉框编写,价格和事件标题作为用户输入文本框,如关键字所示,通过代码显示输入与数据库中的字段匹配它应该输出该事件的所有相关信息,如果在任一搜索字段上进行了任何匹配,则复选框允许用户识别他们想要搜索的标准,如果是复选框字段尚未检查,则SQL查询将不会搜索具有该对应字段的关键字。

问题是,一切似乎都运行正常,但如果Venue和Category字段仅用于搜索事件,则似乎没有显示任何结果。但是,如果我选择其他字段,则输出正确,包括场地和类别字段。

数据库:http://i.imgur.com/d4uoXtE.jpg

HTML表格

<form name="searchform" action ="PHP/searchfunction.php" method = "post" >
<h2>Event Search:</h2>
Use the Check Boxes to indicate which fields you watch to search with
<br /><br />
<h2>Search by Venue:</h2>

<?php
echo "<select name = 'venueName'>";
$queryresult2 = mysql_query($sql2) or die (mysql_error());
while   ($row = mysql_fetch_assoc($queryresult2))  {
echo "\n";
$venueID = $row['venueID'];
$venueName = $row['venueName'];
echo "<option value ='$venueName'";
echo ">$venueName</option>";
}# when the option selected matches the queryresult it will echo this

echo "</select>";
echo" <input type='checkbox' name='S_venueName'>";
mysql_free_result($queryresult2);
mysql_close($conn);
?>

<br /><br />
<h2>Search by Category:</h2>
<?php
include 'PHP/database_conn.php';

$sql3 ="SELECT catID, catDesc
FROM te_category";

echo "<select name = 'catdesc'>";
$queryresult3 = mysql_query($sql3) or die (mysql_error());
while   ($row = mysql_fetch_assoc($queryresult3))  {
echo "\n";
$catID = $row['catID'];
$catDesc = $row['catDesc'];
echo "<option value = '$catDesc'";
echo ">$catDesc </option>";
}

echo "</select>";
mysql_free_result($queryresult3);
mysql_close($conn);
?>
<input type="checkbox" name="S_catDes">
<br /><br />

<h2>Search By Price</h2>
<input type="text" name="S_price" />
<input type="checkbox" name="S_CheckPrice">
<br /><br />

<h2>Search By Event title</h2>
<input type="text" name="S_EventT" />
<input type="checkbox" name="S_EventTitle">
<br /><br />
<input name="update" type="submit" id="update" value="Search">

</form>

处理表格数据的PHP代码

<?php
include 'database_conn.php';


$venuename = $_POST['venueName']; //this is an integer
$catdesc = $_POST['catdesc']; //this is a string
$Price = $_POST['S_price'];
$EventT = $_POST['S_EventT'];

#the IF statements state if the tickbox is checked then search with these enquires
if (isset($_POST['S_VenueName'])) {

$sql = "SELECT * FROM te_venue WHERE venueName= '$venuename'";

}


if (isset($_POST['S_catDes'])) {

$sql = "SELECT * FROM te_category WHERE catID=  '$catdesc'";

}

if (isset($_POST['S_CheckPrice'])) {

$sql = "SELECT * FROM te_events WHERE (eventPrice LIKE '%$Price%')";

}

if (isset($_POST['S_EventTitle'])) {

$sql = "SELECT * FROM te_events WHERE (eventTitle LIKE '%$EventT%')";

}


$queryresult = mysql_query($sql) or die (mysql_error());
while ($row = mysql_fetch_assoc($queryresult))
{
    echo "Event Title: "; echo $row['eventTitle'];
    echo "<br />";
    echo "Event Description: "; echo $row['eventDescription'];
    echo "<br />";
    echo "Event Venue "; echo "$venuename";
    echo "<br />";
    echo "Event Category "; echo "$catdesc";
    echo "<br />";
    echo "Event Start Date "; echo $row['eventStartDate'];
    echo "<br />";
    echo "Event End Date "; echo $row['eventEndDate'];
    echo "<br />";
    echo "Event Price "; echo $row['eventPrice'];
    echo "<br /><br />";
}

mysql_free_result($queryresult);
mysql_close($conn);

?>

2 个答案:

答案 0 :(得分:1)

尝试使用至少 MySQLi 而不是弃用 MySQL 。你可以试试这个:

<强> database_conn.php

<?php

/* ESTABLISH YOUR CONNECTION. REPLACE THE NECESSARY DATA BELOW */

$con=mysqli_connect("YourHost","YourUsername","YourPassword","YourDatabase");

if(mysqli_connect_errno()){

echo "Error".mysqli_connect_error();
}

?>

HTML 表单:

<html>
<body>

<?php

include 'PHP/database_conn.php';

$sql2="SELECT venueID, venueName FROM te_venue"; /* PLEASE REPLACE THE NECESSARY DATA */
echo "<select name = 'venueName'>";
$queryresult2 = mysqli_query($con,$sql2);
while($row = mysqli_fetch_array($queryresult2))  {
echo "\n";
$venueID = mysqli_real_escape_string($con,$row['venueID']);
$venueName = mysqli_real_escape_string($con,$row['venueName']);
echo "<option value ='$venueName'>";
echo $venueName."</option>";
} /* when the option selected matches the queryresult it will echo this ?? */
echo "</select>";

echo "<input type='checkbox' name='S_venueName'>";

?>

<br><br>
<h2>Search by Category:</h2>

<?php

$sql3 ="SELECT catID, catDesc FROM te_category";

echo "<select name = 'catdesc'>";
$queryresult3 = mysqli_query($con,$sql3);
while($row = mysqli_fetch_array($queryresult3))  {
echo "\n";
$catID = mysqli_real_escape_string($con,$row['catID']);
$catDesc = mysqli_real_escape_string($con,$row['catDesc']);
echo "<option value = '$catDesc'>";
echo $catDesc."</option>";
}

echo "</select>";

?>

<input type="checkbox" name="S_catDes">
<br><br>

<h2>Search By Price</h2>
<input type="text" name="S_price" />
<input type="checkbox" name="S_CheckPrice">
<br><br>

<h2>Search By Event title</h2>
<input type="text" name="S_EventT" />
<input type="checkbox" name="S_EventTitle">
<br><br>
<input name="update" type="submit" id="update" value="Search">

</form>

</body>
</html>

<强> PHP

<?php

include 'database_conn.php';

$venuename = mysqli_real_escape_string($con,$_POST['venueName']); /* this is an integer */
$catdesc = mysqli_real_escape_string($con,$_POST['catdesc']); /* this is a string */
$Price = mysqli_real_escape_string($con,$_POST['S_price']);
$EventT = mysqli_real_escape_string($con,$_POST['S_EventT']);

/* SHOULD PRACTICE USING ESCAPE_STRING TO PREVENT SOME OF SQL INJECTIONS */

/* the IF statements state if the tickbox is checked then search with these enquires */

if (isset($_POST['S_VenueName'])) {

$sql = "SELECT * FROM te_venue WHERE venueName= '$venuename'";

}    

if (isset($_POST['S_catDes'])) {

$sql = "SELECT * FROM te_category WHERE catID=  '$catdesc'";

}

if (isset($_POST['S_CheckPrice'])) {

$sql = "SELECT * FROM te_events WHERE (eventPrice LIKE '%$Price%')";

}

if (isset($_POST['S_EventTitle'])) {

$sql = "SELECT * FROM te_events WHERE (eventTitle LIKE '%$EventT%')";

}  

$queryresult = mysqli_query($con,$sql);
while ($row = mysqli_fetch_array($queryresult))
{
    echo "Event Title: "; echo $row['eventTitle'];
    echo "<br />";
    echo "Event Description: "; echo $row['eventDescription'];
    echo "<br />";
    echo "Event Venue "; echo "$venuename";
    echo "<br />";
    echo "Event Category "; echo "$catdesc";
    echo "<br />";
    echo "Event Start Date "; echo $row['eventStartDate'];
    echo "<br />";
    echo "Event End Date "; echo $row['eventEndDate'];
    echo "<br />";
    echo "Event Price "; echo $row['eventPrice'];
    echo "<br /><br />";
}

mysqli_close($conn);

?>
  • 如果用户选中所有复选框怎么办?会发生什么,将使用最后一个条件。前三个条件将被最后一个条件覆盖。

  • 如果您在这些条件下使用 ELSE IF ,则会实施第一个条件。

  • 我的建议是使用单选按钮而不是复选框,并希望您在此过程中得到这个想法。

答案 1 :(得分:0)

您是否尝试打印出$ sql查询以进行调试?

试试<input type="checkbox" name="S_catDes" value="checked">

从内存复选框需要一个值字段,但我可能是错的。希望这会有所帮助。

相关问题