【问题标题】:update with multiple ids from form使用表单中的多个 id 更新
【发布时间】:2018-08-18 19:27:50
【问题描述】:

我无法摆脱此错误注意:数组到字符串转换,当尝试从表单验证 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;
    }
}

【问题讨论】:

  • 请提取一个 MCVE,没有它你的问题就跑题了。
  • 我不明白你的要求。请给我一些细节
  • 哪部分不明白?您是否刚刚尝试对您不了解的部分进行一些基础研究,例如将它们扔到搜索引擎上?

标签: php multidimensional-array integer filtering superglobals


【解决方案1】:

name="order_id[]" 表示您发布的是数组,而不是字符串。

这意味着,如果提交的值为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
)

【讨论】:

  • 函数 filter_array_elements($e) { $f = filter_var($e,FILTER_VALIDATE_INT);返回 $f; } $order_id = array_map("filter_array_elements", $_POST['order_id']); print_r($order_id); $status = '某事'; $order->updateOrderStatus($order_id,$status);现在我有一个经过验证的数组并且代码正在运行
  • @razvan 我的更新答案可以接受吗?还是您真的想过滤掉(删除)不是整数的元素?
  • 你的答案对我来说是正确的答案。谢谢
猜你喜欢
  • 2023-01-08
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多