提问人:Fathurrochman Jati Kusuma 提问时间:9/25/2023 最后编辑:ShadowFathurrochman Jati Kusuma 更新时间:9/25/2023 访问量:34
为什么我的详细信息存储数据字段无法存储和显示
Why is my detail lain lain Data Field Can't Be Stored and Displayed
问:
我复选框,当用户选中 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 输入详细信息时,它也会存储并显示在我的表格上,并且它也可以编辑
答:
1赞
Lajos Arpad
9/25/2023
#1
您将需要以某种方式存储该字段。如果您愿意,您可以为此详细信息创建一个字段,但鉴于这是一个可选字段,您可能希望使用 kwitansis 表的外键和详细信息字段为 lain-lain 创建一个表。
在这种情况下,您可以通过将 lain-lain 表左连接到 kwitansis 或通过外键单独读取来填充描述字段,具体取决于哪个最适合您的方案。此代码块
$pembayaran .= ', ' . $lainlaininput;
看起来不太好。首先,您正在获取用户输入而不对其进行验证并将其直接存储到 中,其次,将其附加到值中,而该字段不存在,也可能未指定。$validatedData
您将需要重构您的代码,我建议您也要密切关注安全性。但是,为了避免偏离我们的主题:我会创建一个带有 kwitansis 表的外键的 lainlain 表,当提交表单并传递一个 lainlain 字段时,只需将一条新记录插入到这个 lainlain 表中,指定它属于哪个 kwitansis 以及它的描述是什么。
评论