为什么我的详细信息存储数据字段无法存储和显示

Why is my detail lain lain Data Field Can't Be Stored and Displayed

提问人:Fathurrochman Jati Kusuma 提问时间:9/25/2023 最后编辑:ShadowFathurrochman Jati Kusuma 更新时间:9/25/2023 访问量:34

问:

我复选框,当用户选中 lain-lain 时,它将再次弹出一个表单以给出详细信息 pic 复选框图片,但是当用户为详细信息 lain lain 表单提供另一个 desc 时,数据无法存储和显示在我的详细信息或索引上。

这是我的表单代码

<div class="row mb-3">
                                <div class="col-sm-12">
                                    <label for="pembayaran" class="col-form-label">Pembayaran</label>
                                    <div class="form-check">
                                        <input class="form-check-input" type="checkbox" id="booking"
                                            name="pembayaran[]" value="Booking">
                                        <label class="form-check-label" for="booking">Booking</label>
                                    </div>
                                    <div class="form-check">
                                        <input class="form-check-input" type="checkbox" id="dp"
                                            name="pembayaran[]" value="DP">
                                        <label class="form-check-label" for="dp">DP</label>
                                    </div>
                                    <div class="form-check">
                                        <input class="form-check-input" type="checkbox" id="cbth"
                                            name="pembayaran[]" value="CBTH">
                                        <label class="form-check-label" for="cbth">CBTH</label>
                                    </div>
                                    <div class="form-check">
                                        <input class="form-check-input" type="checkbox" id="angsuran"
                                            name="pembayaran[]" value="Angsuran">
                                        <label class="form-check-label" for="angsuran">Angsuran ke</label>
                                    </div>
                                    <div class="form-check">
                                        <input class="form-check-input" type="checkbox" id="ket"
                                            name="pembayaran[]" value="KET">
                                        <label class="form-check-label" for="ket">KET</label>
                                    </div>
                                    <div class="form-check">
                                        <input class="form-check-input" type="checkbox" id="lainlain"
                                            name="pembayaran[]" value="Lain-lain">
                                        <label class="form-check-label" for="lainlain">Lain-lain</label>
                                    </div>
                                </div>
                            </div>
                            <div id="lainlain-form" style="display: none;">
                                <div class="row mb-3">
                                    <div class="col-sm-12">
                                        <label for="lainlaininput" class="col-form-label">Detail Lain-lain</label>
                                        <input type="text" class="form-control" id="lainlaininput"
                                            name="lainlaininput" placeholder="Masukkan detail lain-lain">
                                    </div>
                                </div>
                            </div>
                            <script>
                                // Dapatkan semua elemen checkbox
                                var checkboxes = document.querySelectorAll('input[type="checkbox"]');

                                // Tambahkan event listener untuk setiap checkbox
                                checkboxes.forEach(function(checkbox) {
                                    checkbox.addEventListener('change', function() {
                                        // Jika checkbox yang sedang diubah adalah checkbox yang telah dicentang, nonaktifkan yang lainnya
                                        if (this.checked) {
                                            checkboxes.forEach(function(otherCheckbox) {
                                                if (otherCheckbox !== checkbox) {
                                                    otherCheckbox.disabled = true;
                                                }
                                            });
                                        } else {
                                            // Jika checkbox yang sedang diubah tidak dicentang, aktifkan yang lainnya
                                            checkboxes.forEach(function(otherCheckbox) {
                                                otherCheckbox.disabled = false;
                                            });
                                        }
                                    });
                                });
                            </script>
                            <script>
                                // Dapatkan elemen checkbox "Lain-lain"
                                var lainlainCheckbox = document.getElementById('lainlain');

                                // Dapatkan elemen form tambahan
                                var lainlainForm = document.getElementById('lainlain-form');

                                // Tambahkan event listener ke checkbox "Lain-lain"
                                lainlainCheckbox.addEventListener('change', function() {
                                    // Jika checkbox "Lain-lain" dicentang, tampilkan form tambahan
                                    if (this.checked) {
                                        lainlainForm.style.display = 'block';
                                    } else {
                                        // Jika checkbox "Lain-lain" tidak dicentang, sembunyikan form tambahan
                                        lainlainForm.style.display = 'none';
                                    }
                                });
                            </script>

这是我的控制器代码

<?php

namespace App\Http\Controllers;

use App\Exports\ExportKwitansi;
use App\Models\Kwitansi;
use Exception;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;

class KwitansiController extends Controller
{
    protected $kwitansis;

    public function __construct()
    {
        $this->kwitansis = Kwitansi::all();
    }

    public function index(Request $request)
    {
        if ($request->has('search')) {
            $kwitansis = Kwitansi::where('nomor_kwitansi', 'LIKE', '%' . $request->search . '%')
                ->orWhere('nama_lengkap', 'LIKE', '%' . $request->search . '%')
                ->get();

            if ($kwitansis->count() == 0) {
                session()->flash('error', 'Kwitansi tidak ditemukan');

                return redirect('/kwitansi');
            }
        } else {
            $kwitansis = Kwitansi::all();
        }

        return view('kwitansi.index', [
            'kwitansis' => $kwitansis,
        ]);
    }

    public function create()
    {
        $lastSerialNumber = Kwitansi::latest('nomor_kwitansi')->first();

        if ($lastSerialNumber) {
            $lastNumber = (int) substr($lastSerialNumber->nomor_kwitansi, 4);
            $nextNumber = $lastNumber + 1;
        } else {
            $nextNumber = 1;
        }

        $serialNumber = 'SMS-' . str_pad($nextNumber, 2, '0', STR_PAD_LEFT);

        return view('kwitansi.create', compact('serialNumber'));
    }

    public function store(Request $request)
    {
        try {
            $lastSerialNumber = Kwitansi::latest('nomor_kwitansi')->first();

            if ($lastSerialNumber) {
                $lastNumber = (int) substr($lastSerialNumber->nomor_kwitansi, 4);
                $nextNumber = $lastNumber + 1;
            } else {
                $nextNumber = 1;
            }

            $serialNumber = 'SMS-' . str_pad($nextNumber, 2, '0', STR_PAD_LEFT);

            $validatedData = $request->validate([
                'nama_lengkap' => 'required',
                'alamat' => 'required',
                'no_hp' => 'required',
                'terbilang' => 'required',
                'lokasi' => 'required',
                'no_kavling' => 'required',
                'type' => 'required',
                'jumlah' => 'required',
            ]);

            // Mengubah pilihan checkbox menjadi string yang dipisahkan oleh koma
            $pembayaran = implode(', ', $request->input('pembayaran'));

            // Memeriksa apakah checkbox "Lain-lain" dicentang
            // Periksa apakah kotak centang "Lain-lain" dicentang
            if ($request->has('lainlain')) {
                // Ambil data input "Lain-lain" dan tambahkan ke dalam kolom "pembayaran"
                $lainlaininput = $request->input('lainlaininput');
                $pembayaran .= ', ' . $lainlaininput;
            }
            
            $validatedData['nomor_kwitansi'] = $serialNumber;
            $validatedData['pembayaran'] = $pembayaran; // Menyimpan pilihan checkbox ke dalam kolom 'pembayaran'
            
            Kwitansi::create($validatedData);
            
            return redirect('/kwitansi');
        } catch (Exception $e) {
            session()->flash('error', $e->getMessage());

            return back();
        }
    }

    public function detail($id)
    {
        $kwitansi = $this->kwitansis->find($id);

        if (!$kwitansi) {
            session()->flash('error', 'Kwitansi tidak ditemukan');

            return redirect('/kwitansi');
        }

        return view('kwitansi.detail', compact('kwitansi'));
    }
    public function print($id)
    {
        $kwitansi = $this->kwitansis->find($id);

        if (!$kwitansi) {
            session()->flash('error', 'Kwitansi tidak ditemukan');

            return redirect('/kwitansi');
        }

        return view('kwitansi.cetak', compact('kwitansi'));
    }

    public function edit(Kwitansi $kwitansi)
    {
        return view('kwitansi.edit', compact('kwitansi'));
    }

    public function update(Request $request, Kwitansi $kwitansi)
    {
        // dd($request->all());
        try {
            $rules = [
                'nama_lengkap' => 'required',
                'alamat' => 'required',
                'no_hp' => 'required',
                'terbilang' => 'required',
                'lokasi' => 'required',
                'no_kavling' => 'required',
                'type' => 'required',
                'jumlah' => 'required',
            ];

            $validatedData = $request->validate($rules);

            // Mengubah pilihan checkbox menjadi string yang dipisahkan oleh koma
            $pembayaran = implode(', ', $request->input('pembayaran'));

            // Memeriksa apakah checkbox "Lain-lain" dicentang
            if ($request->has('lainlain')) {
                // Ambil data input "Lain-lain" dan tambahkan ke dalam kolom "pembayaran"
                $lainlaininput = $request->input('lainlaininput');
                $pembayaran .= ', ' . $lainlaininput;
            }

            $validatedData['pembayaran'] = $pembayaran; // Menyimpan pilihan checkbox ke dalam kolom 'pembayaran'

            // Update data kwitansi
            $kwitansi->update($validatedData);

            return redirect('/kwitansi')->with('success', 'Kwitansi berhasil diperbarui');
        } catch (Exception $e) {
            session()->flash('error', $e->getMessage());

            return back();
        }
    }

    public function destroy(Kwitansi $kwitansi)
    {
        Kwitansi::destroy($kwitansi->id);

        return redirect('/kwitansi');
    }

    function export_excel()
    {
        return Excel::Download(new ExportKwitansi(), 'Kwitansi.xlsx');
    }
}

这是我的表格视图代码

<table class="table table-hover text-center" id="kwitansi-table">
            <thead>
                <tr class="bg-info">
                    <th style="width: 2rem; justify-content: center; align-items: center; cursor: pointer;"
                        id="sortNo">No.</th>
                    <th style="width: 4.5rem; cursor: pointer;" id="sortKwitansi">No. Kwitansi</th>
                    <th style="width: 6rem; cursor: pointer;" id="sortNama">Nama Lengkap</th>
                    <th style="width: 10rem;">Alamat</th>
                    <th style="width: 4.5rem;">No. HP</th>
                    <th style="width: 8.5rem;">Terbilang</th>
                    <th style="width: 4rem;">Pembayaran</th>
                    <th style="width: 4rem;">Nama Perumahan</th>
                    <th style="width: 1rem;">No. Kavling</th>
                    <th style="width: 1rem;">Type</th>
                    <th style="width: 5rem;">Jumlah</th>
                    <th style="width: 6.7rem;">Action</th>
                </tr>
            </thead>
            <tbody>
                @foreach ($kwitansis as $kwitansi)
                    <tr onclick="window.location.href='{{ route('kwitansi.detail', $kwitansi->id) }}';"
                        style="cursor: pointer;">
                        <td>{{ $loop->iteration }}</td>
                        <td>{{ $kwitansi->nomor_kwitansi }}</td>
                        <td>{{ $kwitansi->nama_lengkap }}</td>
                        <td>{{ $kwitansi->alamat }}</td>
                        <td>{{ $kwitansi->no_hp }}</td>
                        <td>{{ $kwitansi->terbilang }}</td>
                        <td>
                            @if (in_array('Lain-lain', explode(', ', $kwitansi->pembayaran)))
                                {{ $kwitansi->lainlaininput }}
                            @else
                                {{ $kwitansi->pembayaran }}
                            @endif
                        </td>
                        <td>{{ $kwitansi->lokasi }}</td>
                        <td>{{ $kwitansi->no_kavling }}</td>
                        <td>{{ $kwitansi->type }}</td>
                        <td>{{ $kwitansi->jumlah }}</td>
                        <td
                            style="padding-left: 1rem; display: flex; height: 6rem; justify-content: space-around; align-items: center">
                            <button class="btn btn-warning"
                                style="margin:0 ; padding: 6.5px 8px 6.5px 8px; border-radius: 100%;">
                                <a href="{{ route('kwitansi.edit', $kwitansi->id) }}">
                                    <img src="{{ asset('icon/pen2.svg') }}" alt=""
                                        style="width: 26px; height: 26px">
                                </a>
                            </button>
                            <form action="{{ route('kwitansi.destroy', $kwitansi->id) }}}}" method="POST"
                                class="d-inline-grid">
                                @method('delete')
                                @csrf
                                <button class="btn btn-danger" onclick="return confirm('Are you sure?')"
                                    style="margin:0 ; padding: 6.5px 8px 6.5px 8px; border-radius: 100%;">
                                    <img src="{{ asset('icon/trash3.svg') }}" alt="">
                                </button>
                            </form>
                        </td>
                    </tr>
                @endforeach
            </tbody>
        </table>

我需要将 lainlaininput 添加到我的数据库表中吗?My Database Table 调试

我希望当用户填写 Detail lain lain 输入详细信息时,它也会存储并显示在我的表格上,并且它也可以编辑

php mysql laravel 验证

评论

0赞 Lajos Arpad 9/25/2023
根据您的第二张图片,您的表中有一个 lainlaininput 字段。这只是一个例子,还是你真的有那个领域?如果存在,它是否具有您之前尝试插入的一些值?当您尝试插入带有 lain-lain 细节的记录时,您是否会遇到一些错误?
0赞 Fathurrochman Jati Kusuma 9/25/2023
@LajosArpad 它最初在表上没有 lainlaininput 字段,它只是一个插图 bcs 我感到困惑,我是否需要在我的表上添加 lainlaininput 字段

答:

1赞 Lajos Arpad 9/25/2023 #1

您将需要以某种方式存储该字段。如果您愿意,您可以为此详细信息创建一个字段,但鉴于这是一个可选字段,您可能希望使用 kwitansis 表的外键和详细信息字段为 lain-lain 创建一个表。

在这种情况下,您可以通过将 lain-lain 表左连接到 kwitansis 或通过外键单独读取来填充描述字段,具体取决于哪个最适合您的方案。此代码块

$pembayaran .= ', ' . $lainlaininput;

看起来不太好。首先,您正在获取用户输入而不对其进行验证并将其直接存储到 中,其次,将其附加到值中,而该字段不存在,也可能未指定。$validatedData

您将需要重构您的代码,我建议您也要密切关注安全性。但是,为了避免偏离我们的主题:我会创建一个带有 kwitansis 表的外键的 lainlain 表,当提交表单并传递一个 lainlain 字段时,只需将一条新记录插入到这个 lainlain 表中,指定它属于哪个 kwitansis 以及它的描述是什么。