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


code igniter / expression engine - insert multiple rows into custom database table

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

形式

<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的数据库连接字符串?

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安全功能。但这可能会为您的需求增加不必要的复杂性。

但是我如何从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