CodeIgniter 4 - 无法将我的 int 数据插入到我的数据库中

CodeIgniter 4 - Can't insert my int data into my database

提问人:Dragonarc 提问时间:11/10/2023 最后编辑:Dragonarc 更新时间:11/11/2023 访问量:50

问:

我在表单中输入了我的输入,我可以将所有数据输入到控制器中。

视图中的“我的表单”

<form action="/arsip/save" method="post">
                <?= csrf_field(); ?>
                <div class="mb-3">
                    <label for="nama_pemegang_hak" class="form-label">Nama Pemegang Hak</label>
                    <input type="text" name="nama_pemegang_hak" class="form-control <?= $validation->hasError('nama_pemegang_hak') ? 'is-invalid' : ''; ?>" id=" nama_pemegang_hak" value="<?= old('nama_pemegang_hak'); ?>">
                </div>
                <div class="mb-3">
                    <label class="form-label" for="nama_hak">Nama Hak</label>
                    <select class="form-select" id="nama_hak" name="nama_hak">
                        <option value="Hak Milik">Hak Milik</option>
                        <option value="Hak Guna Bangunan">Hak Guna Bangunan</option>
                        <option value="Warkah">Warkah</option>
                    </select>
                </div>
                <div class="mb-3">
                    <label for="nomor_hak" class="form-label">Nomor Hak</label>
                    <input type="text" name="nomor_hak" class="form-control <?= $validation->hasError('nomor_hak') ? 'is-invalid' : ''; ?>" id="nomor_hak" value="<?= old('nomor_hak'); ?>">
                </div>
                <div class="mb-3">
                    <label for="kelurahan" class="form-label">Kelurahan</label>
                    <input type="text" name="kelurahan" class="form-control <?= $validation->hasError('kelurahan') ? 'is-invalid' : ''; ?>" id="kelurahan" value="<?= old('kelurahan'); ?>">
                </div>
                <div class="mb-3">
                    <label for="kecamatan" class="form-label">Kecamatan</label>
                    <input type="text" name="kecamatan" class="form-control <?= $validation->hasError('kecamatan') ? 'is-invalid' : ''; ?>" id="kecamatan" value="<?= old('kecamatan'); ?>">
                </div>
                <div class="mb-3">
                    <label for="no_lemari" class="form-label">Nomor Lemari</label>
                    <input type="number" name="no_lemari" min="1" class="form-control <?= $validation->hasError('no_lemari') ? 'is-invalid' : ''; ?>" id="no_lemari" value="<?= old('no_lemari'); ?>">
                </div>
                <div class="mb-3">
                    <label for="no_rak" class="form-label">Nomor Rak</label>
                    <input type="number" name="no_rak" min="1" class="form-control <?= $validation->hasError('no_rak') ? 'is-invalid' : ''; ?>" id="no_rak" value="<?= old('no_rak'); ?>">
                </div>
                <button type="submit" class="btn btn-primary">Submit</button>
            </form>

所有数据都将收集在我的控制器中。在它通过验证后(它只是必需的,并且is_unique验证),数据将保存在数据库中。一切都很顺利,除了来自 no_lemari 和 no_rak 的数据没有保存到数据库中(在数据库中,即使我的输入不是 0,它也只放了数字 0)。

要保存到数据库中的控制器代码

$this->bukuModel->save([
            'nama_pemegang_hak' => $this->request->getVar('nama_pemegang_hak'),
            'nama_hak' => $this->request->getVar('nama_hak'),
            'nomor_hak' => $this->request->getVar('nomor_hak'),
            'kelurahan' => $this->request->getVar('kelurahan'),
            'kecamatan' => $this->request->getVar('kecamatan'),
            'no_lemari' => intval($this->request->getVar('no_lemari')),
            'no_rak' => intval($this->request->getVar('no_rak'))
        ]);

        session()->setFlashdata('pesan', 'Data berhasil ditambahkan.');

        return redirect()->to('/arsip/home');

我使用 intval 将数据类型更改为 int(当我使用 dd 检查它时它有效),但数据库中的值仍然是 0。我试过这样做

$nomor_lemari = $this->request->getVar('no_lemari');
$nomor_rak = intval($this->request->getVar('no_rak'));

并将保存中的代码更改为

'no_lemari' => $nomor_lemari,
'no_rak' => $nomor_rak

但没有什么真正改变。谁能告诉我出了什么问题,我需要改变什么?

我的表结构

my database table

php mysql 代码点火器-4

评论

1赞 Adi 11/11/2023
您的表格结构是什么样的?
0赞 Dragonarc 11/11/2023
@Adi 我添加了问题的表格结构
0赞 steven7mwesigwa 11/11/2023
只是一个说明:下次在 StackOverflow 上请求帮助时将您的源代码翻译成英文。否则,我们大多数人将无法提供任何建设性的反馈。😑 Stack Exchange 上的帖子必须是英文的吗?
1赞 Dragonarc 11/14/2023
@steven7mwesigwa,好吧,对不起。我以为这可能不是问题,因为它主要只是变量名称,但我明白你在说什么。
0赞 Simon Weber 11/15/2023
您的 bukuModel 在数组中是否有 no_lemari 和 no_rak?$allowedFields

答:

0赞 Dragonarc 11/11/2023 #1

由于我找不到数据一直为 0 的原因,因此我最终删除了 CI 保存方法并以这种方式保存了我的数据

$db = \Config\Database::connect();

    $nama_pemegang_hak = $this->request->getVar('nama_pemegang_hak');
    $nama_hak = $this->request->getVar('nama_hak');
    $nomor_hak = $this->request->getVar('nomor_hak');
    $kelurahan = $this->request->getVar('kelurahan');
    $kecamatan = $this->request->getVar('kecamatan');
    $no_lemari = (int) $this->request->getVar('no_lemari');
    $no_rak = (int) $this->request->getVar('no_rak');


    // Execute INSERT SQL query
    $db->query(
        "INSERT INTO buku (nama_pemegang_hak, nama_hak, nomor_hak, kelurahan, kecamatan, no_lemari, no_rak) VALUES (?, ?, ?, ?, ?, ?, ?)",
        [$nama_pemegang_hak, $nama_hak, $nomor_hak, $kelurahan, $kecamatan, $no_lemari, $no_rak]
    );

对于我的更新,我只是将这一行添加到我的代码中

$db = \Config\Database::connect();
$db->query("UPDATE buku SET no_lemari = ?, no_rak = ? WHERE id = ?", [$no_lemari, $no_rak, $id]);

所以整个代码变成了这个

$no_lemari = (int)$this->request->getVar('no_lemari');
$no_rak = (int)$this->request->getVar('no_rak');

        $this->bukuModel->save([
            'id' => $id,
            'nama_pemegang_hak' => $this->request->getVar('nama_pemegang_hak'),
            'nama_hak' => $this->request->getVar('nama_hak'),
            'nomor_hak' => $this->request->getVar('nomor_hak'),
            'kelurahan' => $this->request->getVar('kelurahan'),
            'kecamatan' => $this->request->getVar('kecamatan'),
            'no_lemari' => $no_lemari,
            'no_rak' => $no_rak
        ]);

$db = \Config\Database::connect();
$db->query("UPDATE buku SET no_lemari = ?, no_rak = ? WHERE id = ?", [$no_lemari, $no_rak, $id]);

好吧,所以我基本上只是使用查询暴力破解保存数据。我仍然不太明白这个问题,但强制更新数据是有效的,所以我会使用它,直到有人给我更好的答案