代码点火器/表达式引擎 - 将多行插入自定义数据库表

时间:2012-07-08 11:56:40

标签: php codeigniter expressionengine

我有一个表达式引擎CMS,它列出了一系列成员,并允许用户对每个成员进行投票并添加注释。然后,我需要将所有这些成员作为单独的行提交到我在EE安装中创建的自定义数据库表中。我不确定如何调用从EE提交的表单。这是我的代码:

FORM

<tr>
    <td><input type="text" name="user[0][name]" value=""></td>
    <td><input type="text" name="user[0][party]" value=""><br></td>
    <td><input type="text" name="user[0][marks]" value=""></td>
    <td><input type="text" name="user[0][comments]" value=""></td>
</tr>
<tr>
    <td><input type="text" name="user[1][name]" value=""></td>
    <td><input type="text" name="user[1][party]" value=""><br></td>
    <td><input type="text" name="user[1][marks]" value=""></td>
    <td><input type="text" name="user[1][comments]" value=""></td>
</tr>

提交代码:

foreach($_POST['user'] as $user)
{
    $this->db->insert('mytable', $user);
}

但是如何从EE表单中调用这个php代码呢?它只是一个简单的<form action="url.php">?我如何设置PHP代码以利用EE的数据库连接字符串?

2 个答案:

答案 0 :(得分:1)

Aditya并不遥远,你只需要实例化EE。因此,对于您的表单,将结果页面/模板定位为普通的html,例如:<form action="/form-result">(或其他),那么快速而肮脏的方式就是将PHP包含在接收表单的模板中。

在该页面上(接收表单),具有以下内容(模板必须启用PHP):

<?php
$EE =& get_instance();
$postUsers = $EE->input->post('user');

foreach($postUsers as $user) {
    // Extra Cleaning
    $user = $EE->db->escape_str($user);
    $user = $EE->security->xss_clean($user);
    // Fields and values to save to DB
    $dbFields = array(
        'user' => $user['name'],
        'party' => $user['party'],
        'marks' => $user['marks'],
        'comments' => $user['comments']
    );
    // Prefix variable used for good practice, but could hard code
    $EE->db->insert($EE->db->dbprefix . 'mytable', $dbFields);
}
?>

我已经展示了重新创建数组的长方法,以便在您想要修改或添加更多字段时发送到数据库,但您可以简单地将$ user(清理后)传递给数据库,因为数组将具有相同的结构。

如果是表单发送的多个POST变量(而不是你所暗示的数组),你需要这样的东西:

foreach($_POST as $var) {
    $postUsers = $EE->input->post($var);

更理想的解决方案是开发一个插件,该插件可以从生成的模板中调用以触发上述内容,或者可以通过使用EE中内置的ACT安全功能来“监听”要提交的相应表单的扩展名。 。但这可能会为您的需求增加不必要的复杂程度。

答案 1 :(得分:0)

  

但是如何从EE表单中调用这个PHP代码?

我通常用以下方式引用它们:

<form action="<?php echo base_url('form_processing_controller') ?>">

当我使用CodeIgniter时。

此外,为什么在使用CodeIgniter的自动加载的输入类时可以使用$_POST[]

$this->input->post('item_name')

...因此,CI负责为您过滤掉一些恶意活动。查看用户指南:http://codeigniter.com/user_guide/libraries/input.html