创建数组以初始化数据库行时出现解析错误


parse error in creating an array to initialize database's row

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');  
  }
}
?>

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

$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))?>");

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

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

我非常不鼓励使用原始$_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');

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

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

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