繁体   English   中英

添加检查到PHP功能?

[英]Adding a check to php function?

我有如下基本功能:

    function buy()
    {
        $item_id = ( int )$this->uri->segment( 3 );
        if ( $item_id > '0' )
        {
            $item = $this->db->where( 'shop_id', $item_id )->get( 'shop' )->row();
            if ( $item )
            {
                $player = $this->user->info( $this->user->id() );

                    if ( $player->users_money >= $item->shop_req_money && $player->users_credits >= $item->shop_req_credits)
                    {

                    $this->db->update( 'users_items', array( 'users_id' => $this->user->id(), 'users_motors_id' => '0' ), array( 'users_items_id' => $item->users_items_id ) );
                    $this->db->update( 'users', array( 'users_money' => $player->users_money - $item->shop_req_money, 'users_credits' => $player->users_credits - $item->shop_req_credits ), array( 'users_id' => $this->user->id() ) );
                    $this->db->query( 'UPDATE users SET users_money=users_money+' . $item->shop_req_money . ', users_credits=users_credits+' . $item->shop_req_credits . ' WHERE users_id=' . $this->db->escape( $item->shop_users_id ) );
                    $this->db->delete( 'shop', array( 'shop_id' => $item->shop_id ) );
                    $this->session->set_flashdata( 'success', true );

                }
                else
                    $this->session->set_flashdata( 'error', true );
            }
        }
        header( 'Location: ' . $_SERVER['HTTP_REFERER'] );
    }

并且我像这样编辑它,以添加其他检查,如果reg ip与另一个不同,并设置一个错误消息。

function buy()
{
    $item_id = ( int )$this->uri->segment( 3 );
    if ( $item_id > '0' )
    {
        $item = $this->db->where( 'shop_id', $item_id )->get( 'shop' )->row();
        if ( $item )
        {
            $player = $this->user->info( $this->user->id() );
            $players = $this->user->info( $item->shop_users_id );


                if ( $players->users_reg_ip === $player->users_reg_ip )
                {
                $this->session->set_flashdata( 'errorip', true );
                }
                elseif ( $player->users_money >= $item->shop_req_money && $player->users_credits >= $item->shop_req_credits)
                {

                $this->db->update( 'users_items', array( 'users_id' => $this->user->id(), 'users_motors_id' => '0' ), array( 'users_items_id' => $item->users_items_id ) );
                $this->db->update( 'users', array( 'users_money' => $player->users_money - $item->shop_req_money, 'users_credits' => $player->users_credits - $item->shop_req_credits ), array( 'users_id' => $this->user->id() ) );
                $this->db->query( 'UPDATE users SET users_money=users_money+' . $item->shop_req_money . ', users_credits=users_credits+' . $item->shop_req_credits . ' WHERE users_id=' . $this->db->escape( $item->shop_users_id ) );
                $this->db->delete( 'shop', array( 'shop_id' => $item->shop_id ) );
                $this->session->set_flashdata( 'success', true );

            }
            else
                $this->session->set_flashdata( 'error', true );
        }
    }
    header( 'Location: ' . $_SERVER['HTTP_REFERER'] );
}

它的工作方式基本上是这样,但我基本上是在问这是否是正确的方法,还是应该有其他类似的方法但可以做得更好? 如果对我的问题有任何评论,将不胜感激。 提前致谢!

是的,您可以将其包括在条件块中。 像这样:

if ( $players->users_reg_ip === $player->users_reg_ip) {
    // trying to buy from the same IP
    $this->session->set_flashdata( 'errorip', true );
}

elseif ( $player->users_money < $item->shop_req_money && $player->users_credits < $item->shop_req_credits) {
    // if user has not enough money and user credits is less than shop requirement credits
    // or maybe you mean OR ||
    $this->session->set_flashdata( 'error', true );

}
else {
    $this->db->update('users_items', 
        array( 'users_id' => $this->user->id(), 'users_motors_id' => '0' ), 
        array( 'users_items_id' => $item->users_items_id ) 
    );

    $this->db->update( 'users', 
        array( 'users_money' => $player->users_money - $item->shop_req_money, 
            'users_credits' => $player->users_credits - $item->shop_req_credits 
        ), 
        array( 'users_id' =>  $this->user->id() ) 
    );

    $this->db->query( 'UPDATE users SET users_money=users_money+' . $item->shop_req_money . ', users_credits=users_credits+' . $item->shop_req_credits . ' WHERE users_id=' . $this->db->    escape(     $item->shop_users_id ) );

    $this->db->delete( 'shop', array( 'shop_id' => $item->shop_id ) );
    $this->session->set_flashdata( 'success', true );
}

// instead of using referrer why not
// redirect('controller/method'); ?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM