我正在尝试根据包含多个下拉框的表单构建查询。我试过谷歌搜索解决方案,但未能取得任何成功,我目前正在'数据库查询失败',我不确定这是因为我的查询构造错误或表单输入未正确传输到了php文件。对此我提出的任何帮助都会令人惊讶,因为此刻我真的陷入困境。
<form action="search.php" method=post>
<select id="dung-name-select" name="dung-select">
<option name="" disabled selected hidden>Name</option>
<option value="*">All</option>
<option value="Black Rock Hold">Black Rock Hold</option>
<option value="Court of Stars">Court of Stars</option>
<option value="Darkheart Thicket">Darkheart Thicket</option>
<option value="Eye of Azshara">Eye of Azshara</option>
<option value="Halls of Valor">Halls of Valor</option>
<option value="Maw of Souls">Maw of Souls</option>
<option value="Neltharions Lair">Neltharions Lair</option>
<option value="The Arcway">The Arcway</option>
<option value="Vault of the Wardens">Vault of the Wardens</option>
</select>
<select id="dung-loc-select" name="loc-select">
<option name="" disabled selected hidden>Location</option>
<option value="*">All</option>
<option value="Valsharah">Valsharah</option>
<option value="Suramar">Suramar</option>
<option value="Azsuna">Azsuna</option>
<option value="Stormheim">Stormheim</option>
<option value="Highmountain">Highmountain</option>
</select>
<select id="dung-rating-select" name="rate-select">
<option name="" disabled selected hidden>Rating</option>
<option value="*">All</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>
<input type="submit" value="Go">
</form>
<?php
$dungeon = $_POST["dung-select"];
$location = $_POST["loc-select"];
$rate = $_POST["rate-select"];
//Database Query
$query = "SELECT * FROM dungeon where Name = $dungeon and Location = $location and Rating = $rate";
$result = mysqli_query($connection, $query);
if (!$result) {
die("Database query failed.");
}
?>
注意:php代码与表单位于一个单独的文件中。
答案 0 :(得分:1)
您需要将变量与查询的字符串部分连接起来,最终得到一个完整的查询。所以:
$query = "SELECT * FROM dungeon where Name = ".$dungeon." and Location = ".$location." and Rating = ".$rate;
我相信你也可以使用:
$query = 'SELECT * FROM dungeon where Name = {$dungeon} and Location = {$location} and Rating = {$rate}';
无论哪种方式,除非我弄错了,否则您只需在查询中传递变量名称。
答案 1 :(得分:0)
您需要使用一些调试技巧来找到问题的根源。
首先,您可能想要检查您的数据是否正确地提供给PHP部分。您可以添加:
print_r($_POST);
在PHP文件中显示$ _POST变量的内容。
对于SQL查询也是如此,显示它可能很有用。这将允许您读取它,或将其复制到SQL管理器以进行测试。
这样可以解决问题:
echo $query."<br/>";
我们希望这会对你有所帮助:)。
答案 2 :(得分:0)
不要在标记中使用name属性,如果你想要第一个没有值的选项那么使用
<option value="">Name</option>
试试这个:
<select id="dung-name-select" name="dung-select">
<option value="" disabled selected hidden>Name</option>
<option value="*">All</option>
<option value="Black Rock Hold">Black Rock Hold</option>
<option value="Court of Stars">Court of Stars</option>
<option value="Darkheart Thicket">Darkheart Thicket</option>
<option value="Eye of Azshara">Eye of Azshara</option>
<option value="Halls of Valor">Halls of Valor</option>
<option value="Maw of Souls">Maw of Souls</option>
<option value="Neltharions Lair">Neltharions Lair</option>
<option value="The Arcway">The Arcway</option>
<option value="Vault of the Wardens">Vault of the Wardens</option>
</select>
答案 3 :(得分:0)
感谢那些发布的但是我找到了一个解决方案似乎正在我的测试工作中我改变的是在php的查询创建部分我添加了一个if elseif语句,它将基于用户输入更改查询构造以过滤它。
if ($dungeon == "*" && $location == "*" && $rate == "*") {
$query = "SELECT * FROM dungeon";
} elseif ($dungeon == "*" && $location == "*") {
$query = "SELECT * FROM dungeon WHERE Rating = '$rate'";
}
使用此功能,我可以在需要应用过滤器时进行过滤。我也意识到像$ rate这样的变量需要包含在''之前,我之前缺少。
答案 4 :(得分:0)
除了TCooper的回答,如果你使用单引号,双引号:
会更好$query = 'SELECT * FROM dungeon WHERE Name = '".$dungeon."' AND Location = '".$location."' AND Rating = '".$rate."';
编辑:还有合适的SQL套管!