我使用HTML5创建了一个玩具库的网站,主页用CSS3和服务器上维护数据库的SQL。在主页面上有两种形式。一种是将可用的玩具租给,当添加数据时,实际数据被添加到服务器上的SQL数据库中。 问题是当我需要从SQL获取数据时,我在表单上有四个下拉选项。城市,玩具类型,年龄组和可用性。用户可以选择4个选项的任意组合。如果匹配玩具可用,则应显示数据。
我有以下代码
try
{
$dbh = new PDO("mysql:host=localhost; dbname=***", "***", "***");
}
catch (Exception $e)
{
die('<p style="color:red">Could not connect to DB: ' . $e->getMessage() . '</p></body></html>');
}
if (isset($_POST["ownercity"]))
{
$city = $_POST["ownercity"]; //Asker's preferable city
$command = "SELECT * FROM Toys WHERE City=?";
$stmt = $dbh->prepare($command);
$stmt->execute(array($city));
if (isset($_POST["ownertoytype"]))
{
$type = $_POST["ownertoytype"]; //Asker's preferable toy type
$command = "SELECT * FROM Toys WHERE City=? AND Type=?";
$stmt = $dbh->prepare($command);
$stmt->execute(array($city,$type));
if (isset($_POST["agegroup"]))
{
$goodage = $_POST["agegroup"]; //Asker's age group preference
$command = "SELECT * FROM Toys WHERE City=? AND Type=? AND Agegroup=?";
$stmt = $dbh->prepare($command);
$stmt->execute(array($city,$type,$goodage));
if (isset($_POST["ownerweek"]))
{
$availability = $_POST["ownerweek"];//Asker's preference for availability
$command = "SELECT * FROM Toys WHERE City=? AND Type=? AND Agegroup=? AND Availability=?";
$stmt = $dbh->prepare($command);
$stmt->execute(array($city,$type,$goodage,$availability));
}
}
}
}
$row1 = $stmt->fetch();
if($row1)
{
while($row1 = $stmt->fetch())
{
echo "<h2 id='general'>"."Congratulations! Matching toys are available, Contact owners directly!"."</h2>";
echo "<table class='toy' id='available'><tr><th>City</th><th>Type</th>
<th>Age Group</th><th>Name</th><th>Email</th><th>Phone</th>
</tr>";
echo "<tr><td>".($row1['City'])."</td>";
echo "<td>".($row1['Type'])."</td>";
echo "<td>".($row1['Agegroup'])."</td>";
echo "<td><b>".($row1['Name'])."</b></td>";
echo "<td><b>".($row1['Email'])."</b></td>";
echo "<td><b>".($row1['Phone'])."</b></td></tr>";
echo "</table>";
}
}
else
{
echo "<h2 id='general'>"."Sorry! No matching toys are available, please try again later"."</h2>";
}
现在无论选择什么,它都会显示没有匹配的玩具可用,即使有。
我的代码有什么问题?
由于
答案 0 :(得分:0)
您可能需要查找SQL的有效语法。
SELECT * FROM Toys WHERE City=?,Type=?,Agegroup=?
在这里,您假设逗号是有效的连词。事实并非如此。有效的包括AND
和OR
。
如果要查找符合一个或多个条件的Toys
行,请使用此查询。
SELECT *
FROM Toys
WHERE (City=? OR Type=? OR Agegroup=?)
将OR
子句的序列括在括号中是一种好习惯。
答案 1 :(得分:0)
首先,正如Ollie所说,在查询中,您必须使用AND
和OR
而不是,
。
代码本身也存在问题。这些字段将始终设置,因此您应该在if语句中检查它们是否为空。
if (isset($_POST['fieldname']) && trim($_POST['fieldname']))