使用表单中的多个 ID 进行更新
update with multiple ids from form
我无法摆脱这个错误注意:数组到字符串的转换,当试图验证表单中的 ID 数组时
表单代码(从数据库中获取 ID):
<tr>
<td><input type="hidden" name="order_id[]" value="<?php echo $result["order_id"]; ?>" class='form-control'></td>
处理页面:
if(isset($order_nr)) {
$args = array(
'order_id' => array('filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_FORCE_ARRAY)
);
$order_id = filter_input_array(INPUT_POST, $args);
$status = 'something';
$order->updateOrderStatus($order_id,$status);
}
else {
$functions->redirect_to("index.php");
}
数据库页面:
public function updateOrderStatus(array $order_id, $status) {
try {
$stmt=parent::query("UPDATE " . $this->tableOrders . " SET status=:status WHERE order_id=:order_id");
foreach($order_id as $id=>$value)
{
$stmt->bindParam(":status",$status, PDO::PARAM_STR);
$stmt->bindParam(":order_id",$value, PDO::PARAM_INT);
$stmt->execute();
}
return true;
} catch(PDOException $e) {
echo $e->getMessage();
return false;
}
}
name="order_id[]"
表示您正在 POST 数组,而不是字符串。
这意味着,如果提交的值为1
,那么POST数组是这样的:
$_POST['order_id'][0]=1;
但你是这样对待它的:
$_POST['order_id']=1;
所以...如果您打算验证一个 id 数组,那么您将需要迭代子数组元素并验证它们。或者...如果您只想验证单个值,则只需从您的字段名称中删除 []
。
一个demonstration of iterating with array_map()
:
$_POST['order_id'] = ['3','a','4'];
$order_id = array_map(function($v){return filter_var($v, FILTER_VALIDATE_INT);}, $_POST['order_id']);
print_r($order_id);
输出:
Array
(
[0] => 3
[1] =>
[2] => 4
)
我无法摆脱这个错误注意:数组到字符串的转换,当试图验证表单中的 ID 数组时
表单代码(从数据库中获取 ID):
<tr>
<td><input type="hidden" name="order_id[]" value="<?php echo $result["order_id"]; ?>" class='form-control'></td>
处理页面:
if(isset($order_nr)) {
$args = array(
'order_id' => array('filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_FORCE_ARRAY)
);
$order_id = filter_input_array(INPUT_POST, $args);
$status = 'something';
$order->updateOrderStatus($order_id,$status);
}
else {
$functions->redirect_to("index.php");
}
数据库页面:
public function updateOrderStatus(array $order_id, $status) {
try {
$stmt=parent::query("UPDATE " . $this->tableOrders . " SET status=:status WHERE order_id=:order_id");
foreach($order_id as $id=>$value)
{
$stmt->bindParam(":status",$status, PDO::PARAM_STR);
$stmt->bindParam(":order_id",$value, PDO::PARAM_INT);
$stmt->execute();
}
return true;
} catch(PDOException $e) {
echo $e->getMessage();
return false;
}
}
name="order_id[]"
表示您正在 POST 数组,而不是字符串。
这意味着,如果提交的值为1
,那么POST数组是这样的:
$_POST['order_id'][0]=1;
但你是这样对待它的:
$_POST['order_id']=1;
所以...如果您打算验证一个 id 数组,那么您将需要迭代子数组元素并验证它们。或者...如果您只想验证单个值,则只需从您的字段名称中删除 []
。
一个demonstration of iterating with array_map()
:
$_POST['order_id'] = ['3','a','4'];
$order_id = array_map(function($v){return filter_var($v, FILTER_VALIDATE_INT);}, $_POST['order_id']);
print_r($order_id);
输出:
Array
(
[0] => 3
[1] =>
[2] => 4
)