2

わかりましたので、ポイント システムをテストするテスト ページを作成しました。ユーザーがボタンを押すと、5 ポイントが与えられます。現在の問題は、ユーザーがページを更新するたびに 5 ポイントを獲得することです。これはどうしたの?必要に応じて、ライブラリとモデル関数を投稿できます。コントローラーとビューは次のとおりです。

welcome.php ビュー:

Hi, <strong><?php echo $username; ?></strong>! <?php echo $fullname ?> is now logged in now. </br>
You have <?php echo $points; ?> Points.</br>
<?php echo anchor('/auth/logout/', 'Logout'); ?></br>
<?php echo form_open('add_points'); ?>
<?php echo form_submit('/auth/add_points/', 'Get 5 free Points!'); ?>
<?php echo form_close(); ?>
<?php echo var_dump($pointhistory); ?>

welcome.php コントローラー:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller
{
        function __construct()
        {
                parent::__construct();

                $this->load->helper(array('form','url'));
                $this->load->library('tank_auth');
                $this->lang->load('tank_auth');
        }

        function index()
        {
                if (!$this->tank_auth->is_logged_in()) {
                        redirect('/auth/login/');
                } else {
                        $data['user_id']        = $this->tank_auth->get_user_id();
                        $data['username']       = $this->tank_auth->get_username();
                        $data['fullname']       = $this->tank_auth->get_fullname();
                        $data['points']         = $this->tank_auth->get_points();
                        $data['pointhistory']   = $this->tank_auth->get_point_history();
                        $this->load->view('welcome', $data);
                }
        }
}
4

1 に答える 1

2

あなたが持っているものを修正するには、ページに更新だけでなく投稿が送信されているかどうかをコントローラーで確認してください。

これを使用できます:

if($_POST)
{
   // do something
}  

また

より良い方法は、AJAX 呼び出しを使用し、ページをまったく更新しないことです。これがおそらく最善の解決策でしょう。

Codeigniter で AJAX 投稿を行うには、コントローラーでパブリック関数を呼び出し、返される値をエコーするだけです。JSON を使用します。

jQuery を使用すると、クライアント側でこれが非常に簡単になります: http://api.jquery.com/jQuery.ajax/

于 2012-09-16T04:19:58.407 に答える