【发布时间】:2017-05-10 13:02:27
【问题描述】:
我目前正在学校做一个项目,其中涉及使用表单来查询数据库。此表单有多个下拉菜单,如果用户未填写所有下拉菜单,我不确定如何查询数据库。例如,如果用户只想搜索某个职位类型而没有指定行业。
索引.HTML
<html>
<head>
</head>
<body>
<form action="test.php" method="post">
<select name="varjobtype">
<option value="nullg" disabled selected hidden>Job Type</option>
<option value="Part Time">Part Time</option>
<option value="Full Time">Full Time</option>
<option value="Contract">Contract</option>
<option value="Temporary">Temporary</option>
</select>
<select name="varindustry">
<option value="null" disabled selected hidden>Industry</option>
<option value="Accommodation and Food Services">Accommodation and Food Services</option>
<option value="Retail">Retail</option>
</select>
</form>
</body>
</html>
测试.PHP
<html>
<head>
</head>
<body>
<?php
$jobtype = $_POST['varjobtype'];
$industry = $_POST['varindustry'];
$sql = "SELECT `Job ID`, Name, Employer FROM JobListings WHERE `Job Type` = '$jobtype' AND `Industry` = '$industry' ";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
?>
<div id="<? echo $row['Job ID']; ?>" class="box">
<?
echo "Job ID: " . $row["Job ID"]. "<br>";
echo "Name: " . $row["Name"]. "<br>";
echo "Employer: " . $row["Employer"]. "<br>";
echo "</div>";
}
?>
<?
} else {
echo "0 results";
}
$conn->close();
?>
</body>
</html>
到目前为止,php 没有输出任何结果。即使用户选择其中一个下拉菜单,SQL 语句仍将显示作业,您将如何做到这一点。如果用户不与任何下拉菜单交互,是否可以使其显示所有作业?
【问题讨论】:
-
您可以尝试将默认选定字段的值替换为“%”。然后在您的查询中,您应该将 WHERE 子句中的“=”替换为“LIKE”。然后,默认值将充当通配符。 stackoverflow.com/a/804405/5884874
-
警告:当使用
mysqli时,您应该使用parameterized queries 和bind_param将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug。 切勿将$_POST或$_GET数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。