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

ql3eal8s  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(102)

我做了复选框,当用户选中lain-lain时,它会再次弹出一个表单,以给予详细的desc The Checkbox Pic,但当用户为详细的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 TableDebugging
我希望当用户填写详细的lain输入detail lain lain filled它将存储并显示在我的表上,它也可以编辑

moiiocjp

moiiocjp1#

您需要以某种方式存储该字段。如果愿意,您可以为此详细信息创建一个字段,但鉴于这是一个可选字段,您可能希望为lain-lain创建一个表,其中包含kwitansis表的外键和详细信息字段。
在这种情况下,你可以通过左连接你的lain-lain表到你的kwitansis来填充描述字段,或者通过外键单独阅读它,这取决于哪一个最适合你的场景。这个代码块

$pembayaran .= ', ' . $lainlaininput;

看起来不妙。首先,您不需要验证用户输入并直接将其存储到$validatedData中,其次,您将其附加到值中,而该字段不存在,并且可能也没有指定。
你需要重构你的代码,我建议你也要关注安全性。但是,为了避免偏离我们的主题:我会创建一个lainlain表,其中包含kwitansis表的外键,当表单提交时,传递一个lainlain字段,然后在这个lainlain表中插入一条新记录,指定它属于哪个kwitansis以及它的描述是什么。

相关问题