解析创建数组以初始化数据库行的错误

时间:2012-02-09 08:36:33

标签: codeigniter php

public function register()
{
    if(!file_exists('application/views/forum/register_view.php'))
    {            
        show_404();
    }
    $member_data=array(
                    'name'=>"<?='$_POST['register_name']'?>",
                    'email'=>"<?='$_POST['register_email']'?>",
                    'pass'=>"<?='$_POST['password']'>",
                    'activation'=>"<?=md5(uniqid(rand(),true))?>");

    $this->load->view('forums/register_view');
}

这是我的注册函数,在用户单击“注册”按钮后调用该函数 激活密钥用于在登录前激活其帐户。我将此功能保留在控制器文件夹中。这是我在模型文件夹中的内容

<?php
class Forums_model extends CI_Model
{
    public function __construct()
    {
        $this->load->database();
    }
    public function insert_member($member_data)
    {
        $this->db->insert('regmember_tb',$member_data);    
    }
}
?>

我得到的错误是

  

语法错误,意外T_ENCAPSED_AND_WHITESPACE,期待T_STRING   或T_VARIABLE或T_NUM_STRING

在member_data初始化寄存器函数。

我当前的路线配置是

$route['default_controller'] = "forums/login";
$route['blog/(:any)']='forums/login/$1';

我想知道我还可以添加什么来加载forum_model类,就像我在控制器类的构造函数中所做的那样

<?php
class Login extends CI_Controller
{
  public function __construct()
  {
        parent::__construct();
        $this->load->model('forums_model');
        $this->load->helper('form');
        $this->load->helper('email');  
  }
}
?>

4 个答案:

答案 0 :(得分:4)

你不需要所有这些"<?='...的东西。

只是

$member_data=array(
                'name'=>$_POST['register_name'],
                'email'=>$_POST['register_email'],
                'pass'=>$_POST['password'],
                'activation'=>md5(uniqid(rand(),true)));

答案 1 :(得分:3)

更改此

$member_data=array(
                'name'=>"<?='$_POST['register_name']'?>",
                'email'=>"<?='$_POST['register_email']'?>",
                'pass'=>"<?='$_POST['password']'>",
                'activation'=>"<?=md5(uniqid(rand(),true))?>");

 $member_data=array(
                'name'=>$_POST['register_name'],
                'email'=>$_POST['register_email'],
                'pass'=>$_POST['password'],
                'activation'=>md5(uniqid(rand(),true)));

答案 2 :(得分:0)

其他答案解决了语法错误。这解决了您似乎认为$member_data可以神奇地传递给模型的事实。这不可以。您必须加载模型并以insert_member作为参数调用$member_data

将以下代码添加到控制器:

$this->load->model('Forums_model', 'forum');
$this->forum->insert_member($member_data);

答案 3 :(得分:0)

如果您未在控制器中使用模型,为什么要显示模型?

我强烈反对使用原始$_POST数组。 CodeIgniter将$_POST包装到一个名为$this->input->post();的函数中。它执行sql注入和xss预防算法。它通常会清理您的输入,并确保您正在使用的是安全的。

您可以在config/config.php文件中启用全局xss过滤

if(!file_exists('application/views/forum/register_view.php'))
{            
   show_404();
}
$p = $this->input->post();
$member_data=array
(
    'name'=> $p['register_name'],
    'email'=> $p['register_email'],
    'pass'=> $p['password'],
    'activation' => md5(uniqid(rand(),true))
);

//are you going to do anything with $member_data?

$this->load->view('forums/register_view');