Laravel Форма: Как передать скрытую информацию контроллеру без использования формы - PullRequest
1 голос
/ 10 июля 2020

Я создаю веб-сайт с каталогом, торговой системой и пользовательской валютой (в Laravel).

У меня полностью готов каталог и пользовательская валюта (по крайней мере, пока), это просто торговая система. Я так близок к завершению торговой системы, за исключением этой одной вещи, которая меня сдерживает, хотя я думаю, что это должно быть довольно просто сделать.

Каждый элемент каталога имеет уникальный идентификатор (в базе данных называется uid), и торговая система торгует предметами на основе уникального идентификатора элемента.

Вот торговая страница для справки . У меня он есть там, где, если вы установите флажок на элементе, который хотите или хотите отдать, он отправляет все проверенные uid в один массив ( Примечание: у меня есть 2 отдельных массива, один для предлагаемых предметов и один для запрашивающих элементов ).

Но у меня сейчас это так, что он получает каждый идентификатор элемента на основе ввода формы. Поскольку я не хочу, чтобы пользователи могли редактировать уникальный идентификатор элементов, мне нужен способ сделать это в бэкэнде. Я пробовал исследовать, но не зашел слишком далеко с этим.

Я новичок в laravel и создании веб-сайтов в целом, поэтому я действительно не знаю, как go вперед с этим. Я думаю, мне придется использовать JavaScript, но я не знаю, как отправлять информацию в контроллер, используя javascript. Я также слышал кодирование, а затем декодирование значений, но я тоже не знаю, как это сделать.

HTML Код (сторона предложения):

@foreach (Auth::user()->inventory()->paginate(9999) as $itemb)
                        <form class="form-horizontal" method="POST" enctype="multipart/form-data" action="{{ route('trade.s', $user->id, [$itemb->uid]) }}">
                        {{ Form::token() }}
                        <?
                        $itembb = $itemb->item_id;
                        $item =  Item::whereid($itembb)->first();
                        $yoyo = $item->selling()->orderBy('price', 'asc')->first();
                        ?>
                        @if ($item->limited == '1')
                        @if ($item->rbp()->count() > 0)
                        <div class="col-md-4" style="margin-top: 8px;display: inline-block;padding-left: 10px;">
                        <a>
                            <div class="card-body h-100" style="padding-top: 0px;padding-bottom: 0px;padding-right: 0px;padding-left: 0px;">
                        <div class="card h-100" style="border-radius: 0px; width: 120px;">
                            <img style="object-fit:cover; width: 100%; height: 50px;" src="/public/uploads/catalog/{{$item->image}}">
                            <span class="badge badge-success limited">Limited</span>
                            <div class="card-body" style="padding-bottom: 10px;padding-right: 10px;padding-left: 10px;padding-top: 10px;">
                            <h6>{{$item->title}}</h6>
                            <img style="margin-bottom: 2px;" src="{{ asset('public/img/nau.png') }}"> {{number_format($item->rbpp)}}
                            </div>
                            <div class="card-footer" style="padding-bottom: 0px;padding-top: 10px;padding-right: 0px;padding-left: 10px;">
                                (Getting uid value for each item checked)<input type="checkbox" name="out_data[]" value="{{$itemb->uid}}"> <label>Trade?</label>
                            </div>
                     </div>
                    </div>
</a>
</div>
                        @else
                        
                        @endif
                        @else
                        
                        @endif
                        @endforeach
                    </div>

Любая помощь очень приветствуется ! (Извините, если мой пост неаккуратен, скажите, пожалуйста, нужно ли мне добавить больше примеров кода.)

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Насколько я понимаю, вы опасаетесь, что люди изменят UUID элемента и попытаются «продать» другой элемент, которого нет. В этом случае вам следует работать не с самой формой, а с безопасностью в серверной части. То есть:

  1. получить UUID элемента для продажи (или массив элементов)
  2. ! Important! проверьте, что UUID каждого из элементов принадлежит конкретному вошедшему в систему пользователю.
  3. , если все элементы принадлежат пользователю a) если они ВСЕ принадлежат пользователю - сохраните их в базе данных как " продажа "для этого пользователя. б) если даже один элемент НЕ принадлежит пользователю - вернуть ошибку валидации. У них не должно быть возможности хранить товары для продажи, которых у них нет.

Из того, что я прочитал, похоже, вы пропускаете шаг 2., где вы проверяете UUID, которые получаете из формы.

Изменение формы html на «неизменяемую» было бы практически невозможно, поэтому работайте со своими ограничениями, а не против них. :)

0 голосов
/ 10 июля 2020

Можете ли вы просто включить скрытый ввод формы для каждого из элементов, содержащих uid? например,

<input type="hidden" name="uid" id="uid" value="{{ $item->uid }}">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...