gpt4 book ai didi

php - 内爆()[函数.内爆] : Invalid arguments passed WHEN $_POST ['duration' ] == EMPTY

转载 作者:行者123 更新时间:2023-11-29 05:32:16 26 4
gpt4 key购买 nike

我有一个多选字段

<select name="duration[]" id="duration" title="Duration" multiple="multiple" size="3">
<option value="1">1 Months</option>
<option value="2">2 Months</option>
<option value="3">3 Months</option>
</select>

我的 PHP 代码内爆多个值,即 123 作为 1,2,3 并将其插入数据库。问题是该字段不是必填字段,当我将其留空时会出现错误(传递的参数无效)

下面是我的 php 代码

$duration = array();
$duration = $_POST['duration'];
if($duration)
{
foreach($duration as $value)
{
$months[] = $value;
}
}
$sql = "SELECT * FROM tbl_courses WHERE duration IN (".implode($months, ',').") ";

提前致谢

最佳答案

您遇到的两个问题是您尝试对可能不是数组的用户输入进行内爆,并且您的代码容易受到 SQL 注入(inject)攻击。

要解决这些问题,您应该首先使用 is_array() 检查它是否是一个数组,然后使用 count() 检查它是否包含任何元素,最后内爆但使用array_map() 过滤值以防止 SQL 注入(inject)。这不仅可以防止 SQL 注入(inject),还可以防止查询中的语法错误,因为必须在 IN 子句中引用字符串。

function getInt($i) {
return (int)$i;
}

$inClause = '';

if(isset($_POST['duration']) && is_array($_POST['duration']) && count($_POST['duration']) > 0)
{
$inClause = 'WHERE ';
$inClause .= implode(', ', array_map('getInt', $_POST['duration']));
}

$sql = "SELECT * FROM tbl_courses $inClause";

关于php - 内爆()[函数.内爆] : Invalid arguments passed WHEN $_POST ['duration' ] == EMPTY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13738920/

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