2

I have a checkbox with foreach data, I want to select 1 or maximum 5 row, and make the rest checkbox be uncheck and that uncheck checkbox can't be sumbitted into the database

This is the form

<form action="/po_store" method="post">
  <div class="container">
    <div class="row">
      <div class="col-md-6">
        @csrf
        <div class="form-group">
          <label>Tanggal PO</label>
          <input class="form-control" type="text" name="tanggal_po" id="datepicker">
          {!! $errors->first('tanggal_po','<span class="text-danger">:message</span>') !!}                                                                                        
        </div>
        <div class="form-group">
          <label>No Po</label>
          <input class="form-control" type="text" name="no_po">
          {!! $errors->first('no_po','<span class="text-danger">:message</span>') !!}                                                            
        </div>
        <div class="form-group">
          <label>Supplier</label>
          <select name="supplier_nama" class="form-control">
            <option value=""hidden>Pilih Supplier</option>
            @foreach ($supplier as $s)
              <option value="{{ $s->nama_supplier }}">{{ $s->nama_supplier }}</option>
            @endforeach
          </select>
        </div>
      </div>
      <div class="col-md-6">
        <div class="form-group">
          <label>Apoteker</label>
          <select name="apoteker_nama" class="form-control">
            <option value=""hidden>Pilih Apoteker</option>
            @foreach ($apoteker as $a)
              <option value="{{ $a->nama_apoteker }}">{{ $a->nama_apoteker }}</option>
            @endforeach
          </select>
        </div>
        <div class="form-group">
          <label>Keterangan</label>
          <input class="form-control" type="text" name="keterangan">
        </div>
      </div>
      <form action="{{ route('cari') }}" method="GET">
        <div class="container-fluid" style="padding-top:25px">
          <div class="row">
            <div class="col-md-11">
              <div class="form-group">
                <input type="text" name="cari" class="form-control" placeholder="Cari berdasarkan kode dan nama obat ...">
              </div>
            </div>
            <div class="form-group">
              <input type="submit" value="Cari" class="btn btn-primary">
            </div>
          </div>
        </form>
        <table class="table table-bordered">
          <tbody>
            <tr class="text-center">
              <th>Pilih</th>
              <td>Kode Obat</td>
              <td>Nama Obat</td>
              <td>Harga Obat</td>
              <td>Jumlah Obat PO</td>
              <td>Total bayar</td>
            </tr>
            @foreach ($obat as $o)
              <tr>
                <td>
                  <input type="checkbox" name="select" value="{{ $o->nama_obat }}">
                </td>
                <td>
                  <input type="text" class="form-control" name="kode_obat" value="{{ $o->kode_obat }}" readonly>
                </td>
                <td>
                  <input type="text" class="form-control" name="nama_obat" value="{{ $o->nama_obat }}" readonly>
                </td>
                <td>
                  <input id="harga" type="text" class="form-control" name="harga_obat"  value="{{ $o->harga_obat }}" onkeyup="sum()">
                </td>
                <td>
                  <input id="jumlah" type="text" class="form-control" name="jumlah" onkeyup="sum()">
                </td>
                <td>
                  <input id="total" type="text" class="form-control" name="total_harga" onkeyup="sum()" readonly>
                </td>
              </tr>
            @endforeach
          </tbody>
        </table>
      </div>
    </div>
    <button type="submit" class="btn btn-success simpan simp-po"><i class="fas fa-check"> Simpan</i></button>                
  </form>

This is the javascript to show calculate total field

function sum() {
  var harga = document.getElementById('harga').value;
  var jumlah = document.getElementById('jumlah').value;
  var hasil = parseInt(harga)*parseInt(jumlah);
  if(!isNaN(hasil)){
    document.getElementById('total').value = hasil;
  }
}

I can't submit the form especially the checkbox because the total field can't be empty. But i want just the selected checkbox get the harga field and can be submit

This is how it's looks like how the form looks like

This is my store controller

 $message = [
            'required' => '*:attribute harus diisi',
            'numeric' =>'*:attribute harus angka' ,
            'digits_between' => '*:attribute harus berisi 9 atau 13 angka'       
        ];

        $data = $request->validate([
            'tanggal_po' => ['required'],
            'no_po' => ['required'],
            'supplier_nama' => ['required'],
            'apoteker_nama' => ['required'],
            'harga' =>['numeric'],
            'select'=>['required'],
            'jumlah'=>['required'],
            'harga_obat' =>['required'],
            'total_harga'=>['required']
        ],$message);


       $select = $request->select;
       foreach($select as $s){
           $s = $request->select;
       }

        $tanggal_po = $request->input('tanggal_po');
        $no_po = $request->input('no_po');
        $supplier_nama = $request->input('supplier_nama');
        $apoteker_nama = $request->input('apoteker_nama');
        $harga = $request->input('harga');
        $jumlah = $request->input('jumlah');
        $harga_obat = $request->input('harga_obat');
        $total_harga = $request->input('total_harga');

        if(PO::create($request->only($tanggal_po,$no_po,$supplier_nama,$apoteker_nama,$select,$harga,$jumlah,$harga_obat,$total_harga))){
            $request->session()->flash('success', 'Data Berhasil Di Tambahkan');
        }else{
            $request->session()->flash('danger', 'Data Tidak Berhasil Di Tambahkan');
        }
2
  • Did you try creating separate form for each row and use js to submit the checked "form"? Commented Nov 5, 2019 at 2:03
  • @xxMrPHDxx i did'nt separate the form and using js to submit it Commented Nov 5, 2019 at 3:06

3 Answers 3

1

Maybe an idea: Your checkboxes and inputs in your row should be declared as an array, e.g. name[]:

@foreach ($obat as $o)
    <tr>
        <td>
            <input type="checkbox" name="select[]" value="{{ $o->nama_obat }}">
        </td>
        <td>
            <input type="text" class="form-control" name="kode_obat[]" value="{{ $o->kode_obat }}" readonly>
        </td>
        ...
    </tr>
@endforeach

Your validation Rule should look like:

$data = $request->validate([
    'kode_obat.*' => 'required_with:select.*,on'
    ...
],$message);

In your case i would display all vlidation errors on your form page, to check what's wrong:

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

In your controller handle the checkboxes as follows

$selects = $request->select;
foreach($selects as $select) {
    //do whatever you want
}
Sign up to request clarification or add additional context in comments.

4 Comments

i still can't submit my form, i have update my post please check it
@evvnnxx18 You also have to name the other inputs in your row as array. Best you dump & die dd($request) directly at the beginning of your controller to check what data is being passed.
@konstantikkoslow it's didn't show anything, it's just reload the page
@evvnnxx18 I've revised my answer, check it out.
0

How about to use required_with?

'total_harga'=>['required_with:yourCheckBoxName']

Comments

0
<form action="{{route('admin.post.store')}}"  method="POST" enctype="multipart/form-data">
        @csrf

  <div class="form-group">
  <input type="checkbox" id="publish" class="filled-in" name="status" value="1">
  <label for="publish">Publish</label>
  </div>   
  </form>


    public function store(Request $request)
    {

        $post = new Post();
        if(isset($request->status))
        {
            $post->status = true;
        }else {
            $post->status = false;
        }
        $post->save();
        Toastr::success('Post Successfully Saved :)','Success');
        return redirect()->route('admin.post.index');
    }

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.