我想解决的主要问题是当有人想要访问管理面板时检查用户会话.我创建了MY_Controller类并将其放在库中.
class MY_Controller extends CI_Session {
public $logged_in = FALSE;
public function __construct() {
parent::__construct();
$this->is_logged_in();
}
public function is_logged_in()
{
$logged = $this->userdata('user_id');
$this->logged_in = ($logged) ? TRUE : FALSE;
}
function sessdestroy() {
$this->session->sess_destroy();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的登录页面.我创建了一个重定向到管理面板(仪表板)的按钮,以测试会话检查是否有效.
class Login extends CI_Controller {
function __construct() {
parent::__construct();
}
public function index() {
$this->load->view('view_login');
if(isset($_POST['redirect'])) {
redirect('admin');
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是管理员控制器,我检查用户会话是否存在.
class Admin extends MY_Controller {
function construct() {
parent::__construct();
}
function index() {
if($this->is_logged_in()) {
$this->dodadi_destinacija();
}
else redirect('login'); …Run Code Online (Sandbox Code Playgroud) 我想保持这个简短.我不知道我的术语是否正确,但我从Codeigniter手册Vol.1中得到了这个例子.
if (count($args) > 1 || is_array($args[0]))
Run Code Online (Sandbox Code Playgroud)
我多次遇到这个问题.根据数据类型,不同的测试更合适.有些测试会以意想不到的方式失败.
如何确定最合适,最可能最简洁的测试?
为了清楚起见我正在寻找一种最有效的方法来测试一个对象/变量是否可以使用,无论数据类型如何,如果可能的话.
此外,我不希望该解决方案仅适用于示例中的列表.它应该广泛适用.
我有简单的模型,需要将数据插入到我的表中.当我使用sql和查询时,一切正常,但当我尝试使用插入函数时,我得到一个错误,我需要使用设置?
我的数据库中的id是自动增量,日期是时间戳
class Article extends CI_Model {
private $id;
private $title;
private $text;
private $date;
public function __construct()
{
$this->load->database();
}
public function save_article($title,$text)
{
$this->title=$title;
$this->text=$text;
$this->id='';
$this->load->helper('date');
$this->date=now();
print_r($this);
//"INSERT INTO article VALUES ('','".$title."','".$text."',NOW())")
$this->db->insert('articles',$this);
}
}
Run Code Online (Sandbox Code Playgroud)
Article Object([id:Article:private] => [title:Article:private] => rrrrrrrrrrr [text:Article:private] => rrrrrrrrrrrrrrrrrr [date:Article:private] => 1351680951)
发生数据库错误
您必须使用"set"方法更新条目.
文件名:C:\ Program Files(x86)\ EasyPHP-12.1\www\blog\system\database\DB_active_rec.php
行号:1174
所以我在我的控制器中有这个代码块(我知道,db的东西应该在模型中..我会在那里工作后转移它).在数据库中搜索"订阅"并在视图中回显.这样可行.但是,在我看来,我想添加一个IF语句,如下面的第二个代码块 - 但它不起作用.建议?换句话说,您如何在视图中编写IF语句?很确定这个query部分是不正确的......
// displays current subscription in view
$userid = $this -> session -> userdata('user_id');
$this -> db -> select('subscription');
$this -> db -> where ('id', $userid);
$query = $this -> db -> get('subscriptions');
if($query -> result() == TRUE) // if subscription exists for user, display:
{
foreach ($query->result() as $row)
{
$data['packagename'] = $row->subscription;
}
}
Run Code Online (Sandbox Code Playgroud)
在视图中:
<?php if($query -> result() == TRUE) : ?>
<? echo $packagename; ?>
<?php endif ?>
Run Code Online (Sandbox Code Playgroud) 我编写的Web应用程序具有很少的访问级别/组(未登录,工作人员,经理,管理员).
对于访问控制,我在这里使用类似于最佳答案的东西:
仅在Codeigniter中将特定页面限制为登录用户的最佳做法是什么?
现在我必须创建下载页面,只允许下载允许用于specyfic文件的组.现在我只为允许的用户显示链接,但我想我必须以某种方式隐藏真实的文件位置,因为浏览器会记住文件URL,任何人都可以在注销后没有任何问题地下载文件.
我想在类中声明一个私有变量,我希望在我的所有类中访问它而不使用参数将其传递给另一个函数.我有以下场景
class One extends CI_Controller {
private $name;
public function index () {
$name = $this->input->post('name');
$this->validate();
}
public function validate() {
echo $name;
}
}
Run Code Online (Sandbox Code Playgroud)
但我上面的$ name变量给出了一个错误说法variable $name is undefined.
如果是,那么在PHP中是否可能如何?
我有一个视图$all_set上的数组,其中包含一些ids.now我想在控制器中使用表单submit.for传递此数组,我使用j子编码和解码.
在我看来:
<?php $all_set=json_encode($all_set); ?>
<input type="hidden" name="all_set" value="<?php echo serialize($all_set); ?>">
Run Code Online (Sandbox Code Playgroud)
上面的值包含(正如我在页面源中看到的):
<input type="hidden" name="all_set" value="s:26:"{"0":"1","5":"2","13":"3"}";">
Run Code Online (Sandbox Code Playgroud)
现在在控制器上:
$result=$this->input->post('all_set');
$result= unserialize($result);
$result=json_decode($result);
print_r($result); die;
Run Code Online (Sandbox Code Playgroud)
这给了我错误,我没有在控制器上获得任何数组.错误:
Message: unserialize() [function.unserialize]: Error at offset 0 of 5 bytes
Run Code Online (Sandbox Code Playgroud)
为什么会这样?请帮忙.
I have following two function, and I would like to know, is there any way I can combine them into one.
function galerija_get_all(){
$q = $this->db->get('galerija');
return $q = $q->result_array();
}
function galerija_get_all_slike(){
$q = $this->db->get('slike');
return $q = $q->result_array();
}
Run Code Online (Sandbox Code Playgroud)
And in my view file I have this code:
<?php foreach ($galerija as $gal): ?>
<figure>
<?php foreach ($galerija_slike as $img): ?>
<?php if ($gal['id_galerija'] == $img['galerija_id']): ?>
<?php endif ?>
<?php endforeach ?>
<img src="" >
<figcaption></figcaption>
</figure> …Run Code Online (Sandbox Code Playgroud) 在控制器类中,我有这个功能:
public function index(){
$this->load->helper('url');
$data['title'] = 'News archive';
$this->load->view('news/index', $data);
}
Run Code Online (Sandbox Code Playgroud)
我加载了帮助URL,因为我在news/index中使用了anchor().所以看起来在父函数中加载helper就足够了,我不必在news/index中加载它.
所以我的问题是CI下面发生了什么让我这样做?是load->查看一个函数,还是粘贴在$ data上执行新闻/索引的结果?load-> view如何识别已在索引中加载的helper url?我仍然试图理解CI框架的工作原理.
还有什么是在我们需要的时候在构造函数或每个函数中加载帮助器的最佳位置?
我通过application/config/database.php文件在CodeIgniter中启用了查询缓存,并且它工作正常.我然后禁用它,并注释掉文件夹路径.当我重新启用缓存并取消注释文件夹路径时,缓存将无法正常工作.
我试过其他目录.这是本地和Web服务器上的问题.
$db['default']['cache_on'] = TRUE;
$db['default']['cachedir'] = './application/cache/';
Run Code Online (Sandbox Code Playgroud)
这些是我的database.php设置.我试过删除'.' 从字符串的开头.我也尝试删除尾部和前面的斜杠.
任何帮助将非常感激.谢谢.
编辑:我知道该文件夹是可写的,因为存储整页缓存工作.