将多个复选框的值和不同的输入值作为一个整体保存到数据库中
P粉807471604
P粉807471604 2023-08-31 11:17:47
[PHP讨论组]

我正在尝试将数据/值插入到我的数据库中。

它可以工作,但问题是每次我只选择第二个值/复选框时,它的其他输入值会得到第一个输入的值。

<form action="{{url('/reservation')}}" method="post">
    @csrf
    <div class="row col-12">
        <div>
            <p class='mybox text-dark'><input type="checkbox" name="prod_name[]" value="JasminBooks"/>JasminBooks</p>
        </div>
        <div>
            <input type="number" name="prod_qty[]" min="1" value="1"class="form-control ml-2">
        </div>
    <div class="row col-12">
        <div>
            <p class='mybox text-dark'><input type="checkbox" name="prod_name[]" value="KnowHowBooks"/>KnowHowBooks</p>
        </div>
        <div>
            <input type="number" name="prod_qty[]" min="1" value="1"class="form-control ml-2">
        </div>
    </div>
</form>

这是我的控制器函数的代码

public function reservation(Request $request)
{
    $data = new reservation;
    $data->name = $request->name;
    $data->email = $request->email;
    $data->phone = $request->phone;
    $data->address = $request->address;
    $data->date = $request->date;
    $data->time = $request->time;

    $products = null;
    $checked_array = $_POST['prod_name'];

    foreach($_POST['prod_name'] as $key => $value) {
        if (in_array($_POST['prod_name'][$key], $checked_array)) {
            $products .= $_POST['prod_qty'][$key]." ".$_POST['prod_name'][$key].", ";
        }
    }

    $data->products = $products;
    $data->save();
    return redirect()->back();
}

  1. 我选择第一个复选框并输入数量为5的值时,结果是“5 JasminBooks,”

  2. 当我同时选择两个复选框并在第一个复选框旁边的第一个输入框中输入数量为12,在第二个复选框旁边的第二个输入框中输入数量为7时,结果是“12 JasminBooks,7 KnowHowBooks,”
  3. 但是当我只选择第二个复选框并在数量输入框中输入13时,结果是“1 KnowHowBooks,”它取了第一个输入的默认值,而不是我在第二个输入框中插入的数量13。

我应该在我的代码中添加/更改什么?

P粉807471604
P粉807471604

全部回复(1)
P粉587780103

这是因为你是根据索引来定义你的数量字段的。如果一个输入缺失,可能会影响你的整个结果。使用值作为键:

HTML:

<div>
    <p class='mybox text-dark'><input type="checkbox" name="prod_name[]" value="JasminBooks"/>JasminBooks
    </p></div><div>
    <input type="number" name="prod_qty[JasminBooks]" min="1" value="1"class="form-control ml-2">
</div>

PHP:

$products = '';
$checked_array = $request->input('prod_name', []);
$quantities = $request->input('prod_qty', []);

foreach ($checked_array as $value) {
    if (array_key_exists($value, $quantities)) {
        $products .= "{$quantities[$value]} {$value}, ";
    }
}

// 移除末尾的 ', '
if (! empty($products)) {
    $products = substr($products, 0, -2);
} 

$data->products = $products;

P.S. 像 Bhaumik 说的那样,在 Laravel 中不要使用 $_POST

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号