【问题标题】:Search Data not outputting the correct results搜索数据未输出正确结果
【发布时间】:2014-06-23 19:00:42
【问题描述】:

此表单是一个搜索表单,允许用户使用脚本为下拉框的场地和类别字段搜索事件,以及作为用户输入文本框的价格和事件标题,如关键字所示通过代码显示输入的内容与数据库中的字段匹配 它应该输出该事件的所有相关信息 如果在任一搜索字段上进行了任何匹配,则复选框允许用户识别他们想要搜索的标准,如果复选框字段未勾选则 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);

?>

【问题讨论】:

  • 你的 $sql2 查询在哪里?
  • 好问题,知道如何在我的 php 代码中实现它吗?

标签: php html mysql


【解决方案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,则会执行第一个条件。

  • 我的建议是使用 单选按钮 而不是 复选框,希望您能理解这一点。

【讨论】:

    【解决方案2】:

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

    试试&lt;input type="checkbox" name="S_catDes" value="checked"&gt;

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

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-16
      • 1970-01-01
      相关资源
      最近更新 更多