好的,我现在有一个测试页面,它只是测试我的积分系统。几乎当用户按下按钮时,就会给他们 5 分。现在的问题是每次我刷新页面时用户都会获得 5 分。这怎么了?如果有必要,我可以发布库和模型功能。这是 Controller 和 View :
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 Controller :
<?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);
}
}
}
最佳答案
要修复您所遇到的问题,只需检查 Controller 中页面是否有提交的帖子而不仅仅是刷新:
你可以使用这个:
if($_POST)
{
// do something
}
或者
更好的方法是使用 AJAX 调用并且根本不刷新页面。这可能是最好的解决方案。
要在 Codeigniter 中执行 AJAX 发布,您只需在 Controller 中调用公共(public)函数并回显要返回的值,我会使用 JSON。
jQuery 使这在客户端变得非常简单:http://api.jquery.com/jQuery.ajax/
关于php - Codeigniter:每次刷新页面时都会运行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12444318/