2012-07-08 64 views
1

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

+0

[插入多行通过php数组到mysql](http://stackoverflow.com/questions/779986/insert-multiple-rows-via-a-php-array-into-mysql) – 2013-01-15 06:36:27

回答

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安全功能来触发上述结果的模板,或者为要提交的适当表单“侦听”的扩展。但是这可能会增加您的需求的不必要的复杂程度。

0

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

我通常引用它们:

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

当我使用笨。

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

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

......就这样,CI负责过滤掉一些恶意的活动为你的。看看这个用户指南:http://codeigniter.com/user_guide/libraries/input.html

+0

谢谢 - 但是它如何与Expression Engine集成? – mheavers 2012-07-08 12:04:16

+0

对不起,你是对的,我做了一个错误的假设,EE对CI很友好,它看起来很不一样!也许有什么可以帮助的吗? https://github.com/expressionengine/cookbook – 2012-07-08 12:13:57