• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Laravel 8.x - walidacja danych przesłanych AJAXem

0 głosów
811 wizyt
pytanie zadane 20 października 2021 w PHP przez Pico Obywatel (1,330 p.)
zamknięte 22 października 2021 przez Pico

Witam, mam taki problem. Przesyłam dane z pewnego formularza za pomocą ajaxa do funkcji w kontrolerze. Walidacja działa do momentu w którym spełnię wszystkie warunki potrzebne do przejścia dalej i wtedy nagle kod się nie wykonuje.

Kod HTML:

<div class="alert alert-danger print-error-msg" style="display:none">
        <ul></ul>
    </div>
<form id="add_vat_form">
    @csrf
    <table style="width: 50%; margin-left:50%; margin-bottom: 20px;">
        <tr>
            <th style="width: 50%; text-align: right;">Sprzedawca</th>
            <th style="width: 50%; text-align: right;">Klient</th>
        </tr>
        <tr>
            <td style="text-align: right;" class="form-inline">
                <div class="form-group">
                  <label for="exampleInputName2">  Nazwa: </label>
                  <input type="text" name="seller" class="form-control" placeholder="Nazwa">
                </div>
            </td>
            <td style="text-align: right;" class="form-inline">
                <div class="form-group">
                  <label for="exampleInputEmail2">  Nazwa: </label>
                  <input type="text" name="client" class="form-control" placeholder="Nazwa">
                </div>
            </td>
        </tr>
        <tr>
            <td style="text-align: right;" class="form-inline">
                <div class="form-group">
                  <label for="exampleInputName2">  NIP: </label>
                  <input type="text" name="seller_nip" class="form-control" placeholder="NIP">
                </div>
            </td>
            <td style="text-align: right;" class="form-inline">
                <div class="form-group">
                  <label for="exampleInputEmail2">  NIP: </label>
                  <input type="text" name="client_nip" class="form-control" placeholder="NIP">
                </div>
            </td>
        </tr>
        <tr>
            <td style="text-align: right;" class="form-inline">
                <div class="form-group">
                  <label for="exampleInputName2">  Miejscowość: </label>
                  <input type="text" name="seller_city" class="form-control" placeholder="Miejscowość">
                </div>
            </td>
            <td style="text-align: right;" class="form-inline">
                <div class="form-group">
                  <label for="exampleInputEmail2">  Miejscowość: </label>
                  <input type="text" name="client_city" class="form-control" placeholder="Miejscowość">
                </div>
            </td>
        </tr>
        <tr>
            <td style="text-align: right;" class="form-inline">
                <div class="form-group">
                  <label for="exampleInputName2">  Ulica: </label>
                  <input type="text" name="seller_street" class="form-control" placeholder="Ulica">
                </div>
            </td>
            <td style="text-align: right;" class="form-inline">
                <div class="form-group">
                  <label for="exampleInputEmail2">  Ulica: </label>
                  <input type="email" name="client_street" class="form-control" placeholder="Ulica">
                </div>
            </td>
        </tr>
        <tr>
            <td style="text-align: right;" class="form-inline">
                <div class="form-group">
                  <label for="exampleInputName2">  Kod pocztowy: </label>
                  <input type="text" name="seller_postcode" class="form-control" placeholder="Kod pocztowy">
                </div>
            </td>
            <td style="text-align: right;" class="form-inline">
                <div class="form-group">
                  <label for="exampleInputEmail2">  Kod pocztowy: </label>
                  <input type="email" name="client_postcode" class="form-control" placeholder="Kod pocztowy">
                </div>
            </td>
        </tr>
    </table>
    <table class="table table-bordered">
        <tr>
            <th >Nazwa produktu</th>
            <th style="width: 7%;">Liczba produktów</th>
            <th style="width: 10%;">Cena jednostkowa netto</th>
            <th style="width: 10%;">Wartość całkowita netto</th>
            <th style="width: 10%;">Stawka VAT</th>
            <th style="width: 7%;">Kwota VAT</th>
            <th style="width: 10%;">Cena jednostkowa brutto</th>
            <th style="width: 10%;">Wartość całkowita brutto</th>
            <th style="width: 5%;">Akcje</th>
        </tr>
        <tbody id="products_table">
            <tr id="1">
                <td><input type="text" class="form-control" name="name[]" id="name1" placeholder="Nazwa produktu"></td>
                <td><input type="number" class="form-control" onchange="count_changed(1)" name="count[]" id="count1" value="1" placeholder="Liczba produktów"></td>
                <td><input type="text" class="form-control" onchange="change_brutto(1)" name="price_netto[]" id="price_netto1" value="0.00" placeholder="Cena netto"></td>
                <td><input type="text" class="form-control" name="summary_netto[]" id="summary_netto1" value="0.00" placeholder="Wartość całkowita netto" readonly></td>
                <td class="input-group"><input type="text" class="form-control" onchange="vat_changed(1)" name="vat_rate[]" id="vat_rate1" value="23" placeholder="Stawka VAT">
                    <span class="input-group-addon">%</span>
                </td>
                <td><input type="text" class="form-control" name="vat_price[]" id="vat_price1" value="0.00" readonly></td>
                <td><input type="text" class="form-control" onchange="change_netto(1)" name="price_brutto[]" id="price_brutto1" value="0.00" placeholder="Cena brutto"></td>
                <td><input type="text" class="form-control" name="summary_entity[]" id="summary1" value="0.00" readonly></td>
                <td><button type="button" onclick="delete_product(1)" class="btn btn-alert">Usuń</button></td>
            </tr>
        </tbody>
    </table>
    <button type="button" id="add_product" style="margin-bottom: 20px;" class="btn btn-primary">Dodaj produkt</button>
    <table class="table table-bordered">
        <tr>
            <th style="width: 38%; text-align: right;"></th>
            <th style="text-align: left;">Cena netto:</th>
            <th style="text-align: left;">Cena VAT</th>
            <th style="text-align: left;">Cena brutto:</th>
        </tr>
        <tr>
            <td style="width: 38%; text-align: right;">Razem do zapłaty: </td>
            <td style="text-align: left;"><input class="form-control" type="text" id="final_netto" name="final_netto" value="" readonly></td>
            <td style="text-align: left;"><input class="form-control" name="final_vat" id="final_vat" type="text" value="" readonly></td>
            <td style="text-align: left;"><input class="form-control" name="final_brutto" id="final_brutto" type="text" value="" readonly></td>
        </tr>
    </table>
    <button type="success" id="add_product" style="margin-bottom: 20px;" class="btn btn-submit btn-success">Zapisz fakturę</button>
</form>

Kod AJAX: 

$(document).ready(function() {
        $(".btn-submit").click(function(e){
            e.preventDefault();

            var _token = $("input[name='_token']").val();
            var seller = $("input[name='seller']").val();
            var seller_nip = $("input[name='seller_nip']").val();
            var seller_city = $("input[name='seller_city']").val();
            var seller_street = $("input[name='seller_street']").val();
            var seller_postcode = $("input[name='seller_postcode']").val();
            var client = $("input[name='client']").val();
            var client_nip = $("input[name='client_nip']").val();
            var client_city = $("input[name='client_city']").val();
            var client_street = $("input[name='client_street']").val();
            var client_postcode = $("input[name='client_postcode']").val();
            var final_netto = $("input[name='final_netto']").val();
            var final_vat = $("input[name='final_vat']").val();
            var final_brutto = $("input[name='final_brutto']").val();
            var name = [];
            $('input[name^="name"]').each(function() {
                name.push(this.value);
            });
            var price_netto = [];
            $('input[name^="price_netto"]').each(function() {
                price_netto.push(this.value);
            });
            var price_brutto = [];
            $('input[name^="price_brutto"]').each(function() {
                price_brutto.push(this.value);
            });
            var vat_rate = [];
            $('input[name^="vat_rate"]').each(function() {
                vat_rate.push(this.value);
            });
            var count = [];
            $('input[name^="count"]').each(function() {
                count.push(this.value);
            });

            $.ajax({
                url: "{{ route('add.vat') }}",
                type:'POST',
                data: {_token:_token, seller:seller, seller_nip:seller_nip, seller_city:seller_city, seller_street:seller_street, seller_postcode:seller_postcode, client:client, client_nip:client_nip, client_city:client_city, client_street:client_street, client_postcode:client_postcode, name:name, price_netto:price_netto, price_brutto:price_brutto, vat_rate:vat_rate, count:count},
                dataType: 'json',
                success: function(data) {
                    if($.isEmptyObject(data.error)){
                        alert(data.success);
                    }else{
                        printErrorMsg(data.error);
                    }
                }
            });

        });

        function printErrorMsg (msg) {
            $(".print-error-msg").find("ul").html('');
            $(".print-error-msg").css('display','block');
            $.each( msg, function( key, value ) {
                $(".print-error-msg").find("ul").append('<li>'+value+'</li>');
            });
        }
    });

Kod PHP:

    public function add_vat(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'seller' => 'required',
            'seller_city' => 'required',
            'seller_street' => 'required',
            'seller_postcode' => 'required',
            'client' => 'required',
            'client_city' => 'required',
            'client_street' => 'required',
            'client_postcode' => 'required',
            'name.*' => 'required',
            'price_netto.*' => 'required',
            'price_brutto.*' => 'required',
            'vat_rate.*' => 'required',
            'count.*' => 'required',
        ]);

        if ($validator->passes())
        {
            $data = $request->all();
            $Vat = Vat::create([
                'seller' => $data['seller'],
                'seller_nip' => $data['seller_nip'],
                'seller_city' => $data['seller_city'],
                'seller_street' => $data['seller_street'],
                'seller_postcode' => $data['seller_postcode'],
                'client' => $data['client'],
                'client_nip' => $data['client_nip'],
                'client_city' => $data['client_city'],
                'client_street' => $data['client_street'],
                'client_postcode' => $data['client_postcode'],
                'final_price_netto' => $data['final_netto'],
                'final_price_vat' => $data['final_vat'],
                'final_price_brutto' => $data['final_brutto']

            ]);

            $vat_id = $Vat->id;
            foreach($data['name'] as $key => $value)
            {
                Product::create([
                    'name' => $value,
                    'price_netto' => $data['price_netto'][$key],
                    'price_brutto' => $data['price_brutto'][$key],
                    'vat_rate' => $data['vat_rate'][$key],
                    'vat_id' => $vat_id,
                    'count' => $data['count'][$key]

                ]);
            }
            return response()->json(['success'=>'Added new records.']);
        }
        $data = $request->all();
        return response()->json(['error'=>$request->input('name')]);

    }

 

komentarz zamknięcia: Problem rozwiązany. Odpowiedź w komentarzu
komentarz 21 października 2021 przez CubeStorm Pasjonat (15,020 p.)
Co zwraca konsola przeglądarki?
komentarz 21 października 2021 przez CubeStorm Pasjonat (15,020 p.)
Lub logi Laravela w folderze /storage
komentarz 21 października 2021 przez Pico Obywatel (1,330 p.)

@CubeStorm, W sensie że konsola od Java scripta czy że laravel wyrzuca jakieś błędy? Ogólnie też zauważyłem że jeśli zostawię samą wiadomość z sukcesem to dział, czyli nie działa coś w dodawaniu do bazy danych, ale nie wiem co bo zanim zacząłem używać ajaxa to wszystko było w porządku

komentarz 22 października 2021 przez CubeStorm Pasjonat (15,020 p.)
Konsola w przeglądarce. Laravel ma swoje logi w folderze storage, tam wyrzuca jakieś błędy jeśli coś na backendzie się nie powiedzie.
komentarz 22 października 2021 przez Pico Obywatel (1,330 p.)
Ogólnie problem rozwiązany dzięki zajrzeniu do logów. Okazuje się że przez roztargnienie, nie wysyłałem wszystkich zmiennych w ajaxje do kontrolera i wyrzucał błąd kiedy próbowałem uzyskać wartość której nie ma.

Podobne pytania

+1 głos
1 odpowiedź 489 wizyt
0 głosów
0 odpowiedzi 276 wizyt
pytanie zadane 21 maja 2021 w PHP przez Grzegorz Mikina Dyskutant (8,060 p.)
0 głosów
1 odpowiedź 641 wizyt
pytanie zadane 15 października 2017 w PHP przez Blue Obywatel (1,180 p.)

93,629 zapytań

142,551 odpowiedzi

323,052 komentarzy

63,134 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 1936p. - dia-Chann
  2. 1916p. - DziarnowskiJ
  3. 1886p. - Łukasz Piwowar
  4. 1868p. - CC PL
  5. 1842p. - Maurycy W
  6. 1841p. - raydeal
  7. 1840p. - Adrian Wieprzkowicz
  8. 1782p. - rucin93
  9. 1701p. - rafalszastok
  10. 1588p. - Tomasz Bielak
  11. 1521p. - Michal Drewniak
  12. 1491p. - Rafał Trójniak
  13. 1444p. - robwarsz
  14. 1257p. - ssynowiec
  15. 1208p. - Mariusz Fornal
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...