1

我有一个表达式引擎 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 的数据库连接字符串?

4

2 回答 2

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

于 2012-07-08T16:46:57.800 回答
0

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

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

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

当我使用 CodeIgniter 时。

此外,$_POST[]当您可以使用 CodeIgniter 的自动加载的 Input 类时,为什么还要使用呢?

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

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

于 2012-07-08T12:00:02.897 回答