【问题标题】:CI4 Inserting ID from selected StringsCI4 从选定的字符串中插入 ID
【发布时间】:2020-12-05 03:11:17
【问题描述】:

我已经厌倦了思考如何解决这个案子。已经通过互联网搜索,从未解决。 直奔主题

这是我的 Product.php 控制器

<?php

namespace App\Controllers;

use CodeIgniter\Controller;
use App\Models\Model_product;
use App\Models\Model_category;
use App\Models\Model_status;
use App\Models\Model_supplier;

class Product extends Controller
{
    protected $helpers = [];

    public function __construct()
    {
        helper(['form']);
        $this->model_category = new Model_category();
        $this->model_product = new Model_product();
        $this->model_status = new Model_status();
        $this->model_supplier = new Model_supplier();
    }

    public function index()
    {
        $data['tbproduct'] = $this->model_product->getProduct();
        return view('product/index', $data);
    }

    public function create()
    {
        $all = [
            'tbproduct' => $this->model_product->getProduct(),
            'tbcategory' => $this->model_category->getCategory(),
            'tbstatus' => $this->model_status->getStatus(),
            'tbsupplier' => $this->model_supplier->getSupplier()
        ];
        return view('product/create', $all);
    }

    public function store()
    {
        $validation =  \Config\Services::validation();

        $data = array(
            'prod_name'     => $this->request->getPost('prod_name'),
            'prodcat_id'    => $this->request->getGet('cat_id'),
            'prod_serial'   => $this->request->getPost('prod_serial'),
            'prod_barcode'  => $this->request->getPost('prod_barcode'),
            'prodstat_id'   => $this->request->getPost('stat_id'),
            'prodsup_id'    => $this->request->getPost('sup_id'),
            'prod_image'    => $this->request->getPost('prod_image')
        );

        if ($validation->run($data, 'product') == FALSE) {
            session()->setFlashdata('inputs', $this->request->getPost());
            session()->setFlashdata('errors', $validation->getErrors());
            return redirect()->to(base_url('product/create'));
        } else {
            $model = new Model_product();
            $simpan = $model->insertProduct($data);
            if ($simpan) {
                session()->setFlashdata('Success', 'Product has been created');
                return redirect()->to(base_url('product'));
            }
        }
    }
}

这是我的模型 Model_product.php

<?php

namespace App\Models;

use CodeIgniter\Model;

class Model_product extends Model
{
    protected $table = 'tbproduct';

    public function getProduct($id = false)
    {
        if ($id === false) {
            return $this->table('tbproducts')
                ->join('tbcategory', 'tbproduct.prodcat_id = tbcategory.cat_id', 'left')
                ->join('tbstatus', 'tbproduct.prodstat_id = tbstatus.stat_id', 'left')
                ->join('tbsupplier', 'tbproduct.prodsup_id = tbsupplier.sup_id', 'left')
                ->get()
                ->getResultArray();
        } else {
            return $this->table('tbproducts')
                ->join('tbcategory', 'tbproduct.prodcat_id = tbcategory.cat_id', 'left')
                ->join('tbstatus', 'tbproduct.prodstat_id = tbstatus.stat_id', 'left')
                ->join('tbsupplier', 'tbproduct.prodsup_id = tbsupplier.sup_id', 'left')
                ->where('tbproduct.prod_id', $id)
                ->get()
                ->getRowArray();
        }
    }

    public function insertProduct($data)
    {
        return $this->db->table($this->table)->insert($data);
    }

    public function updateProduct($data, $id)
    {
        return $this->db->table($this->table)->update($data, ['prod_id' => $id]);
    }

    public function deleteProduct($id)
    {
        return $this->db->table($this->table)->delete(['prod_id' => $id]);
    }
}

这是我的视图 create.php

<?php echo view('_partials/header'); ?>
<?php echo view('_partials/sidebar'); ?>

<div class="content-wrapper">
    <div class="content-header">
        <div class="container-fluid">
            <div class="row mb-2">
                <div class="col-sm-6">
                    <h1 class="m-0 text-dark">Create New Product</h1>
                </div>
                <div class="col-sm-6">
                    <ol class="breadcrumb float-sm-right">
                        <li class="breadcrumb-item"><a href="/">Home</a></li>
                        <li class="breadcrumb-item active">Create New Product</li>
                    </ol>
                </div>
            </div>
        </div>
    </div>

    <div class="content">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <form action="<?php echo base_url('product/store'); ?>" method="post">
                        <div class="card">
                            <div class="card-body">
                                <?php
                                $inputs = session()->getFlashdata('inputs');
                                //$inputs_cat = isset($inputs['cat_id']) == null ? '' : $inputs['cat_id'];
                                $errors = session()->getFlashdata('errors');
                                if (!empty($errors)) { ?>
                                    <div class="alert alert-danger" role="alert">
                                        Whoops! There is something wrong, that is:
                                        <ul>
                                            <?php foreach ($errors as $error) : ?>
                                                <li><?= esc($error) ?></li>
                                            <?php endforeach ?>
                                        </ul>
                                    </div>
                                <?php } ?>

                                <div class="form-group">
                                    <label for="">Product Name</label>
                                    <input type="text" class="form-control" name="prod_name" placeholder="Enter product name" value="<?php echo isset($inputs['prod_name']); ?>">
                                </div>
                                <div class="form-row">
                                    <div class="col mb-3">
                                        <label for="">Category</label>
                                        <select class="form-control" name="cat_name" id="cat_name">
                                            <?php foreach ($tbcategory as $row) {
                                                echo '<option value="' . $row['cat_id'] . '">' . $row['cat_name'] . '</option>';
                                            } ?>
                                        </select>
                                    </div>
                                    <div class="col mb-3">
                                        <label for="">Serial Number</label>
                                        <input type="text" class="form-control" name="prod_serial" placeholder="Enter product serial number" value="<?php echo isset($inputs['prod_serial']); ?>">
                                    </div>
                                    <div class="col mb-3">
                                        <label for="">Barcode</label>
                                        <input type="text" class="form-control" name="prod_barcode" placeholder="Enter product barcode" value="<?php echo isset($inputs['prod_barcode']); ?>">
                                    </div>
                                </div>
                                <div class="form-row">
                                    <div class="col mb-3">
                                        <label for="">Status</label>
                                        <select class="form-control" name="stat_name" id="stat_name">
                                            <?php foreach ($tbstatus as $row) {
                                                echo '<option value="' . $row['stat_id'] . '">' . $row['stat_name'] . '</option>';
                                            } ?>
                                        </select>
                                    </div>
                                    <div class="col mb-3">
                                        <label for="">Supplier</label>
                                        <select class="form-control" name="sup_name" id="sup_name">
                                            <?php foreach ($tbsupplier as $row) {
                                                echo '<option value="' . $row['sup_id'] . '">' . $row['sup_name'] . '</option>';
                                            } ?>
                                        </select>
                                    </div>
                                </div>
                            </div>
                            <div class="card-footer">
                                <a href="<?php echo base_url('product'); ?>" class="btn btn-outline-info">Back</a>
                                <button type="submit" class="btn btn-primary float-right">Save</button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
<?php echo view('_partials/footer'); ?>

我想从控制器产品功能存储中插入新数据。 我有这个问题,我无法将字符串值更改为整数值

$data = array(
    'prod_name'     => $this->request->getPost('prod_name'),
    'prodcat_id'    => $this->request->getGet('cat_id'), ---->>> this is the problem
    'prod_serial'   => $this->request->getPost('prod_serial'),
    'prod_barcode'  => $this->request->getPost('prod_barcode'),
    'prodstat_id'   => $this->request->getPost('stat_id'), ---->>> and this
    'prodsup_id'    => $this->request->getPost('sup_id'), ---->>> and also this
    'prod_image'    => $this->request->getPost('prod_image')
);

如果您在 create.php 视图中看到,所有三个表都有 $row['***_id']。 我想把这三个 id 存入商店。

这是显示的错误:

mysqli_sql_exception #1048
Column 'prodcat_id' cannot be null

【问题讨论】:

  • 显示错误
  • 这是显示的错误 'mysqli_sql_exception #1048 Column 'prodcat_id' cannot be null' 谢谢,会在问题区更新
  • a var_dump($data); 的结果是什么?在你定义它之后。这将让您检查其内容。你也可以发一下吗?
  • 这是结果array(2) { ["prod_name"]=&gt;string(20)"asdasdasdasdasdasdas" ["prodcat_id"]=&gt;NULL } 就是这样。如果我选择了类别名称,我只希望`[“prodcat_id”] 等于 cat_id`,即 cat_id “1”等于“电子”,如果我选择了电子,那么当我存储时 prodcat_id 的值等于 1 因为我已经选择了 cat_id 的值也是 1 的 Electronic
  • 所以在你的 URL 中你需要有 ?cat_id=2 因为你使用 GET I.E.- 'prodcat_id' => $this->request->getGet('cat_id' 从 URL ), 那么你在 URL 中有那个吗?根据你所得到的,我会说它不存在。您需要确定如何获取您的 cat_id。

标签: php codeigniter codeigniter-4


【解决方案1】:

您的问题是您发送的是 cat_name 字段而不是表单中的 cat_id 字段。修复字段的名称,然后就可以了。

以下将起作用

<?php

$data = array (
    'prod_name'    => $this->request->getPost('prod_name'),
    'prodcat_id'   => $this->request->getPost('cat_name'), // ---->>> name fixed **
    'prod_serial'  => $this->request->getPost('prod_serial'),
    'prod_barcode' => $this->request->getPost('prod_barcode'),
    'prodstat_id'  => $this->request->getPost('stat_name'), // ---->>> and this **
    'prodsup_id'   => $this->request->getPost('sup_name'), // ---->>> and also this**
    'prod_image'   => $this->request->getPost('prod_image'),
);

更新: 由于这看起来很简单,但实际上这可能是骗人的,我建议接下来的步骤来解决它:

  1. 确保表单字段名称与 php 脚本中使用的名称匹配
  2. 确保您正在向服务器发送数据。您可以检查超级全局变量。像 print_r($_POST) 这样的东西就足够了。
  3. 确保从正确的来源收集数据:获取或发布

在这种情况下,错误来自mysql。为了缓解这种情况,您可以:

  1. 根据需要设置列的默认值
  2. 有条件地填充 $data 数组。如果没有 cat_id,则不要放置没有值(或 null)的索引“cat_id”

【讨论】:

  • 很抱歉,** 是我的问题的一个障碍。抱歉,如果它让人困惑。谢谢你,我会修复问题区域。
  • i 是指您实际上是从表单中发送了错误的名称。前任。您正在以 cat_name 的名义发送猫 ID
  • 谢谢豪尔赫,但它仍然是同样的问题。 Column prodcat_id cannot be null 我只希望 cat_id 后面的 cat_name 和 cat_id 将存储在 prodcat_id 哦顺便说一句,我尝试使用 getGet,getPostGet 没有任何工作
  • 检查 html 中的字段名称。绝对这些字段与您的 php 代码不匹配。
  • ohhh,我看到您从 get 中获取 cat_name,而不是从帖子中获取。答案已更新。
【解决方案2】:

谢谢你之前帮助过我。 我找到了答案。 这是我可以获取 cat_id、stat_id 和 sup_id 的正确代码。

在视图中 create.php 更改此代码

<select class="form-control" name="cat_name" id="cat_name">

进入这个

<select class="form-control" name="cat_id" id="cat_id">

这意味着您将从数据库中获取 cat_id 值,而不是 cat_name。 将 stat_name 更改为 stat_id,然后将 sup_name 更改为 sup_id。

当所有这些都发生变化时,当您从下拉框中选择值时,您可以插入具有正确 ID 号的数据库。

这是我问题的答案,谢谢你的帮助。

【讨论】:

    猜你喜欢
    • 2020-03-06
    • 1970-01-01
    • 2019-04-21
    • 2013-01-23
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多