我是一名新手CodeIgniter开发人员,当我意识到自己无法将工作变成一个非常简单的点击计数器时,我必须说我的挫折感达到了新的高度。您的想法是单击按钮并获得计算的点击次数。 这是viewcounter_view:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');?>
<html>
<body>
<?php
echo '<form action="'. base_url().'index.php/simplecounter" method="POST">';
echo '<font color="blue">Click counter:' . $counter . '</font><br/><br/>';
echo '<input type="submit" name="myform" value="Count">';
echo '</form>';
?>
</div>
</body>
</html>
如果单击表单按钮,它将调用SimpleCounter Controller:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class SimpleCounter extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->helper('url');
}
public function index() {
$myform=$this->input->post('myform');
if ($myform=='Count') {
Globals::setCounter(Globals::getCounter()+1);
}
$data['counter'] = Globals::getCounter();
$this->load->view('simplecounter_view', $data);
}
}
最后,我正在使用带有$ counter属性的Globals类来保持其价值&#34; global&#34;并可从财务主任处获取:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Globals {
private static $initialized=false;
private static $counter;
private function __construct() {}
private static function initialize() {
if (self::$initialized)
return;
self::$counter = 0;
self::$initialized = true;
}
public static function setCounter($n) {
self::initialize();
self::$counter = $n;
}
public static function getCounter() {
self::initialize();
return self::$counter;
}
}
上面的代码并没有像我预期的那样工作。点击计数器不会在每次用户点击时更新。在我看来,每次调用其中一个方法时都会重新创建Globals类,因此$ counter重置为零并且$初始化为false。
我知道可能有不同的方法(比如在config.php中定义$ counter)虽然我认为使用一个单独的类来保持$ counter更优雅。我在这里错过了什么?我在哪里弄错了?非常感谢您的帮助。
答案 0 :(得分:0)
由于HTTP是无状态协议,一旦将http响应发送到请求浏览器,所有变量都会丢失。
在计算中,无状态协议是一种通信协议 将每个请求视为与之无关的独立事务 任何先前的请求,以便通信包括独立的 请求和响应对。
您需要将计数器保存在数据库中。