Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всё отлично. Вы мне вдвоём очень помогли, еще раз благодарю. Буду реализовывать способ от Proger_XP.
А если поставить google recaptcha на покупку каждого предмета? Прокатит?
Огромное спасибо. Действительно возможен дюп. А может быть подскажите как я могу (через какие инструменты) отправить сразу 10 запросов и купить 10 предметов по цене 1?
Если я всё правильно понял должно быть примерно так:
Нужна связь многие ко многим (реализуется в промежуточной таблице design), потому что неизвестно точно сколько будет "мебели" в квартире. Мебель - это отдельная сущность, а не свойство квартиры.
Сделаешь по другому и будет избыточная база данных. И еще к примеру ванны могут быть от разных производителей, но сделаны из тех же самых материалов и по весу одинаковые. То есть зачем хранить в базе дублированную информацию?! И так далее, и так далее. Может быть мою модель можно еще усовершенствовать.
Например вот так:
Субкатегории будут состоять из:
- Компьютеры
- Программирования
- Сети
- Кардиология
- Хирургия
- Офтальмология
Категории будут состоять из:
- Общей отдел
- Медицина
Всё между собой связано, не избыточно и может быть дополнено новыми категориями или субкатегориями в любой момент.
https://www.free-kassa.ru/ - довольно неплохо.
Здравствуйте. Я дописал один из проектов на гитхабе и может быть увидите, где есть уязвимость для любых атак? Заранее спасибо.
Часть из routes:
Route::post( 'shop/purchase/{shop}', 'Front\ShopController@postPurchase' );
Представление:
@foreach( $items as $item )
<form id="item_buy{{$item->id}}" action="{{ url( 'shop/purchase/' . $item->id ) }}" method="post" >
{!! csrf_field() !!}
<div class='news'>
<div class='shop_img'>
<a href="#"> <img src="{{ asset( File::exists( base_path( 'public/img/icons/' . $item->item_id . '.gif' ) ) ? 'img/icons/' . $item->item_id . '.gif' : 'img/icons/0.gif' ) }}" alt="{{ $item->name }}"></a>
<br> <br>
<b>Quantity, pcs.</b><br>
<input class="count" name="count" type="number" value="1" min="1" max="{{ $item->max_count }}">
<div></div>
</div>
<div class='news_content'>
<div class='news_title'>
<a href="#">{{ $item->name }}</a>
</div>
<div class='news_text'>
{!! $item->description !!}
</div>
<div class='news_info'>
Price: <b>{{ $item->price}}</b> {{ settings( 'currency_name' ) }}
</div>
<div id="news_button">
<a href="#" onclick="if(confirm('Are you sure you want to buy {{$item->name}}?\nYour current character is {{ Auth::user()->characterId() ? Auth::user()->characterName() : 'not selected.' }}.')){document.getElementById('item_buy{{$item->id}}').submit();}">{{ trans( 'shop.buy' ) }}</a>
</div>
<noscript>
<input type="submit" value="{{ trans( 'shop.buy' ) }}" />
</noscript>
</span>
</div>
</div>
</form>
Метод в контроллере:
public function postPurchase( Request $request, ShopItem $item )
{
$validator = Validator::make( $request->all(), [
'count' => 'required|numeric|min:1|max:9999'
]);
if ( $validator->fails() )
{
return redirect( 'shop' )
->withErrors( $validator )
->withInput();
}
$count = $request->input('count');
$user = Auth::user();
$item_price = ( $item->discount > 0 ) ? $item->price - ( $item->price / 100 * $item->discount ) : $item->price;
$item_price = $item_price * $count;
if ( $user->money >= $item_price )
{
if ($item->max_count >= $count)
{
$api = new API();
$mail = array(
'title' => trans( 'shop.mail_item.title', ['name' => settings( 'server_name' )] ),
'message' => trans( 'shop.mail_item.message', ['name' => $item->name, 'count' => $item->count, 'staff' => settings( 'server_name' )] ),
'money' => 0,
'item' => array(
'id' => $item->item_id,
'pos' => 0,
'count' => $count,
'max_count' => $item->max_count,
'data' => $item->octet,
'proctype' => $item->protection_type,
'expire_date' => $item->expire_date,
'guid1' => 0,
'guid2' => 0,
'mask' => $item->mask,
),
);
$api->sendMail( Auth::user()->characterId(), $mail['title'], $mail['message'], $mail['item'], $mail['money'] );
$user->money = $user->money - $item_price;
$user->save();
flash()->success( trans( 'shop.purchase_complete', ['name' => $item->name] ) );
}
else
{
flash()->error( 'The amount is too large.' );
}
}
else
{
flash()->error( trans( 'main.not_enough', ['currency' => strtolower( settings( 'currency_name' ) )] ) );
}
return redirect()->back();
}
Основная суть: Пользователь может покупать предметы, которые будут отсылаться в игру. Можно указать количество и, если денег достаточно, они отправляются.
code_bright_anywhere, огромное спасибо. Это именно то, что нужно.
При выполнении этого метода в режиме debug появляется ошибка
FatalThrowableError in VoteController.php line 69: Fatal error: Call to a member function delay() on boolean
В .env файле выставлено
QUEUE_DRIVER=sync
Может быть для обновления записи в таблице нужно использовать другие команды?!
Здравствуйте. Хочу сделать задержку в выполнении метода в контроллере. Мой код:
$user->money = ( $site->double_rewards ) ? ( $site->reward_amount * 2 ) : $site->reward_amount + $user->money;
$user->save();
В документации приведен пример, что можно сделать так:
$job = (new SendReminderEmail($user))->delay(60 * 5);
$this->dispatch($job);
Далее я попробовал:
$user->money = ( $site->double_rewards ) ? ( $site->reward_amount * 2 ) : $site->reward_amount + $user->money;
$job = ($user->save())->delay(60 * 5);
$this->dispatch($job);
И не получилось. Кто знает как это реализовать правильно? Заранее спасибо.
Страницы 1