请有人帮我这个吗?
我有2张桌子,位置和门票,到目前为止我建的是一个div中的表格,用户输入他们希望看到现场音乐表演的城市或城镇的名称。提交此表单并传递一个查询位置表的SQL语句。在另一个div中,用户搜索查询显示在屏幕上的框中。我接下来要做的是编写一个SQL语句,该语句将查找用户的查询,并根据位置ID动态显示故障单表中的相关故障单信息。
例如,用户输入'Newcastle'作为他们的搜索查询,位置表找到纽卡斯尔市,并在名为'ticket'的div中显示用户的结果..我想显示所有对应的字段来自票表的'Newcastle'。
locationID是位置表中的主键,还有3个其他列,城市,城镇和邮政编码。 票证表包括作为主键的ticketID,作为外键的locationID和其他字段,即场地,tPrice,日期和时间。我认为我遇到的问题是我不会从用户查询中传递变量,以便票证表可以查找并显示相关信息。
以下是表单的代码:
<div id="search">
<form name="searchForm" id="searchForm" class="searchForm" method="post">
<input type="text" name="citySearch" id="citySearch" class="citySearch" placeholder="Enter name city/town..." autofocus="autofocus" />
<input type="submit" name="ticketSearch" id="ticketSearch" class="ticketSearch" value="Search" />
</form>
</div>
以下是显示用户查询的代码:
<div id="locationResult">
<?php
include( 'classes/database_connection.php' );
$cSearch = $_POST['citySearch'];
$sql = "SELECT DISTINCT city FROM location WHERE city = '$cSearch'";
mysql_query($sql) or die (mysql_error());
$queryresult = mysql_query($sql) or die(mysql_error());
while ($row = mysql_fetch_assoc($queryresult)) {
$city = $row['city'];
echo $row["city"];
}
mysql_free_result($queryresult);
mysql_free_result($qResult);
mysql_close($conn);
?>
</div>
</div>
这是我想要显示故障单表中的故障单结果的地方:
<div id="ticketsResults">
<table class="ticketResult" border="0" cellspacing="5">
<tr>
<td><b>Venue</b></td>
<td><b>Price</b></td>
<td><b>Date</b></td>
<td><b>Time</b></td>
<td><b>Street View</b></td>
</tr>
<?php
include( 'classes/database_connection.php' );
$locID = $_POST['locationID'];
$citySearch = $_POST['citySearch'];
$sQL = "SELECT locationID FROM location";
//Here is where I want it to display dynamic information rather than manually type the location
$ticketSQL = "SELECT * FROM ticket NATURAL JOIN location WHERE city = 'Newcastle' ";
mysql_query($sQL) or die (mysql_error());
$qResult = mysql_query($sQL) or die(mysql_error());
mysql_query($ticketSQL) or die (mysql_error());
$result = mysql_query($ticketSQL) or die(mysql_error());
while ($row = mysql_fetch_assoc($result)) {
// $ticketID = $row['ticketID'];
$venue = $row['venue'];
$ticketPrice = $row['tPrice'];
$date = $row['date'];
$time= $row['time'];
echo "<tr>\n";
echo "<td>$venue</td>\n";
echo "<td>£$ticketPrice</td>\n";
echo "<td>$date</td>\n";
echo "<td>$time</td>\n";
echo "<td>Click to see</td>\n";
echo "</tr>\n";
}
mysql_free_result($qResult);
mysql_free_result($result);
mysql_close($conn);
?>
</table>
</div>
基本上,我想要一个根据用户查询动态显示票证的SQL语句。抱歉,大量的代码!非常感谢任何帮助。
答案 0 :(得分:1)
在你做任何其他事情之前,我认为你应该研究你的编码风格,特别是你的缩进。快速谷歌搜索应该可以做到这一点。接下来看看mysql准备好的语句,因为目前你的代码是不安全的。就像jordanm所说,它受SQL注入。
例如,如果有人输入 blah'或'x'='x 作为城市名称。您的查询将成为
SELECT DISTINCT city FROM location WHERE city = 'blah' OR 'x'='x';
基本上它允许用户使用您的查询做顽皮的事情,而您不希望这样。
以下是如何使用mysql预处理语句避免这种情况的示例:
// basic quick raw example
$mysqli = new mysqli('localhost', 'user', 'password', 'database');
$stmt = $mysqli->prepare('SELECT DISTINCT city FROM location WHERE city = ?');
$stmt->bind_param('s',$city_name);
$stmt->execute();
$stmt->bind_result($city);
while ($stmt->fetch())
{
echo $city;
}
这就是我要离开你的全部因为我想回答实际的问题(?)我需要为你编写代码。古德勒克