@Danila534

Ошибка в коде или нет?

Должна производится оплата , после "игроку" переводится определенная вещь, вещь отправляется, а вот деньги не снимаются.
код
public  function  Alm1(Request $request)
    {
		if(!Auth::check())
            return back()->withErrors('Необходимо авторизоваться, перед открытием магазина!');


       $account = Auth::user();
	           $user1 = DB::connection('ddtank')->table('Sys_Users_Detail');
        $user = DB::connection('ddtank')->table('Sys_Users_Detail')->where('UserName', $account->name)->select('UserID', 'NickName', 'State', 'Money', 'GP')->get()->first();

        if($user->State == 1)
            return back()->withErrors("Необходимо выйти с игры прежде чем покупать вещи!");
if($user->Money < 2000000){
return back()->withErrors("Недостаточно алмазов");
}
$user->Money -= 250000;


	

        $alm = DB::connection('ddtank')->table('Sys_Users_Goods')->insertGetId(
            [
                'UserID' => 0,
                'BagType' => 0,
                'TemplateID' => 0,
                'Place' => -1,
                'Count' => 1,
                'Color' => "",
                'StrengthenLevel' => 0,
                'AttackCompose' => 0,
                'DefendCompose' => 0,
                'LuckCompose' => 0,
                'AgilityCompose' => 0,
                'IsBinds' => true,
                'IsUsed' => false,
                'BeginDate' => Carbon::now(),
                'ValidDate' => 0,
                'IsGold' => false,
                'goldValidDate' => 30,
                'latentEnergyCurStr' => "0,0,0,0",
                'latentEnergyNewStr' => "0,0,0,0",
                'latentEnergyEndTime' => Carbon::now(),
            ]
        );	
	
        try
        {


        DB::connection('ddtank')->table('User_Messages')->insert(
            [
                'SenderID' => 0,
                'Sender' => env('IM_SENDER', "Administration"),
                'ReceiverID' => $user->UserID,
                'Receiver' => $user->NickName,
                'Title' => "Покупка Магазина Алмазов",
                'Content' => "В игру были переведены купленные вещи из магазина алмазов!",
                'Type' => 52,
                'Remark' => "Gold:0,Money:0,Annex1:$alm,Annex2:,Annex3:,Annex4:,Annex5:,GiftToken:0",
                'Annex1' => "$alm",
                'Annex2' => "",
                'Annex3' => "",
                'Annex4' => "",
                'Annex5' => "",
            ]
        );

        $account->save();
        return back()->with('success', ['Вы успешно приобрели вещь!']);

			$user->save();
        }
        catch (\Exception $exception)
        {
            return back()->withErrors("Произошла ошибка, обратитесь к администратору!");
        }
    }
  • Вопрос задан
  • 328 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Encoders
Вы выходи из функции и не сохраняете user
Вроде надо сделать так
$user->save();
return код далее....
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
В этом коде нет ошибок.
Ошибки есть в сообщениях на русском языке. В целом понятно, что автор имел в виду, но языка он не знает, и пишет с ошибками.

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

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

Я понимаю что автор накопал где-то код готовой игры, и, не имея вообще никаких знаний, пытается что-то под себя переделывать.
Я понимаю, что сама по себе идея неплохая - все так начинали.
Но смотреть без кровавых слез на этот "код", на это изнасилование фреймворка - в принципе невозможно.
Ответ написан
@acwartz
Тут должна быть ваша реклама.
Кусок кода не тот.
Нужно смотреть что делает user.save или account.save т.к. списание суммы есть:
$user->Money -= 250000;
но далее нигде больше не фигурирует в т.ч. в запросах.
Ничего более путного "ну вот почему-то не снимается" ответить пока не получится вам, т.к. нет кодв отвечающего за сохранение состояния или реакции на изменение поля класса user/account.

Ах да, деньги вы списываете, но при ошибке не возвращаете обратно.
Чтобы вы не делали в случае ошибки, транзакцию нужно откатывать и не писать ничего в базу. А у вас ни туда ни сюда. 50 человек вам с поддержку напишут, получите головняк на пару суток, не справитесь, получите отток клиентов за "развод" т.к. деньгу списали а чебурашку не продали.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы