gpt4 book ai didi

php - 使用复选框来过滤记录 PHP MySQL

转载 作者:行者123 更新时间:2023-11-29 21:28:24 25 4
gpt4 key购买 nike

我是 PHP 和 MySQL 新手,所以请保持你的答案简单!!!

我有一个数据库,其中列出了许多退休社区及其提供的服务。我有一系列使用 bool 值 (tinyint) 的字段,如果他们提供服务,他们会得到 1。如果他们不提供服务,他们会得到 0。

我让它显示得很好,但现在我尝试使用复选框来过滤列表。我还在按城市和州(有效)进行搜索,但是一旦我添加了复选框的代码,它就会失败。无论如何,它只是显示所有记录。这是我所拥有的:

HTML:

<form action="" method="post">
<fieldset><legend>Filter</legend>
<p><label>City:&nbsp;</label><input type="text" name="by_city" /></p>
<p><label>State:&nbsp;</label><input type="text" name="by_state" /></p>
<p>
<input type="checkbox" name="IndependentLiving" value="1" /> Independent Living<br>
<input type="checkbox" name="AssistedLiving" value="1" /> Assisted Living<br>
<input type="checkbox" name="SkilledNursing" value="1" /> Skilled Nursing<br>
<input type="checkbox" name="MemoryCare" value="1" /> Memory Care<br>
<input type="checkbox" name="ContinuingCareCommunity" value="1" /> Continuing Care Community<br>
<input type="checkbox" name="Respite" value="1" /> Short-term/Respite<br>
</p>
<p><input class="button" type="submit" name="submit" value="Search" /></p>
</fieldset>
</form>

PHP 代码:

$by_city = $_POST['by_city'];
$by_state = $_POST['by_state'];
$IndependentLiving = $_POST['IndependentLiving'];
$AssistedLiving = $_POST['AssistedLiving'];
$SkilledNursing = $_POST['SkilledNursing'];
$MemoryCare = $_POST['MemoryCare'];
$ContinuingCareCommunity = $_POST['ContinuingCareCommunity'];
$Respite = $_POST['Respite'];



mysql_select_db('CommunityList');
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$query = "SELECT * FROM Communities WHERE (City='$by_city') OR (State='$by_state') OR (IndependentLiving='$IndependentLiving') OR (AssistedLiving='$AssistedLiving') OR (SkilledNursing='$SkilledNursing') OR (MemoryCare='$MemoryCare') OR (ContinuingCareCommunity='$ContinuingCareCommunity') OR (Respite='$Respite')";
}
else {
$query = "SELECT * FROM Communities";
}
$result = mysql_query($query);

最佳答案

您在 SELECT 查询中使用 OR,这意味着 OR,因此如果至少有一个 WHERE 匹配,则将返回该记录。

你能做的是:

$postToColumnMaps = array('by_city' => 'City', 'by_state' => 'State');
$sqlWhereParts = array();
foreach ($postToColumnMaps as $postKey => $columnKey) {
if (strlen($_POST[$postKey]) > 0) {
$sqlWhereParts[] = $columnKey . ' = \'' . $_POST[$postKey] . '\'';
}
}

$sqlWhere = implode(' AND ', $sqlWhereParts);

您可以使用此过滤器,然后像

$query = "SELECT * FROM Communities WHERE " . $sqlWhere;

只是为了得到一个想法,我在没有测试的情况下对其进行了编码。还要注意 SQL 注入(inject),至少需要转义 $_POST[$postKey]

关于php - 使用复选框来过滤记录 PHP MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35398227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com