我有一个 bootstrap 4 表单,将数据发布到 PHP 页面。其中一个变量是 $_POST['age'];
我想以这样的方式使用此变量:当 $_POST['age']
等于 NULL
时,$age = 'IN("SELECTage来自配置文件")
,否则$minage = $age-3 和 $maxage = $age+3
。我尝试了以下具有不同变体的代码,但它不适用于 $_POST['age'] = NULL
$age = $_POST['age'];
$minage = $age - 2;
$maxage = $age + 3;
if($age == NULL) {
$given_age = 'IN("SELECT age FROM profiles")';
}else {
$given_age = 'BETWEEN '. $minage.' AND '. $maxage;
}
echo $given_age;
html表单如下:
<div class="form-group">
<label for="age">Preferred Age Group</label>
<select class="form-control" name="age" id="age" required>
<option data-hidden="true" value="Null">No Preference</option>
<option data-hidden="true" value="20">18-22 Years</option>
</select>
</div>
$given_age
的结果将用于 MySQL 查询。
最佳答案
您应该从 value="Null"
中删除字符串 Null 并将其保留为空,即 value=""
。如果您传递整数,则该字符串没有位置。
您可以使用isset()
查明该值是否已在 HTML 表单中输入,并采取相应措施:
if(isset($_POST['age'])) {
$age = (int) $_POST['age']; // make the value an integer
$minage = $age - 2;
$maxage = $age + 3;
$given_age = 'BETWEEN '. $minage.' AND '. $maxage;
}else {
$given_age = 'IN("SELECT age FROM profiles")';
}
如果您坚持使用 Null 作为值,那么除了 isset
之外,您还应该检查它是否等于字符串:$_POST['age'] === 'Null'
您确实应该使用参数化准备好的语句,而不是手动构建查询。它们由 PDO 提供或通过 MySQLi 。永远不要相信任何类型的输入,尤其是来自客户端的输入。即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data .
关于php - 如何使用单个发布的参数来运行 BETWEEN 或 IN(从表中选择参数)类型查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56611061/