php - 使用foreach提交动态生成的表单

标签 php mysql arrays forms foreach

我创建了一个动态生成的表单,以便用户记录项目里程碑。用户可以输入里程碑的日期和描述,然后提供一个选项来添加一行来记录另一行(请参阅此图片以获取说明: https://dl.dropboxusercontent.com/u/11993667/milestones_ex.png )。然而,我在将其保存到数据库时遇到了麻烦(我在 php 方面是个菜鸟)。

该表单是使用以下函数生成的:

function create_milestones_form() {
    global $wpdb;

    $inc = array(
        'yes' => ($data['incorporated']==1)?'checked="checked"':'',
        'no' => ($data['incorporated']!=1)?'checked="checked"':'',
    );

    $site = array(
        'yes' => ($data['has']==1)?'checked="checked"':'',
        'no' => ($data['incorporated']!=1)?'checked="checked"':'',
    );

    return <<<EOHTML
    <form method='post'>

    <script type="text/javascript" src="http://upsmart.com/wp-content/plugins/upsmart_sitemanager/js/create_business_milestone.js"></script>

    <INPUT type="button" value="Add Row" onclick="addRow('dataTable')" />

    <INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" />


    <TABLE id="dataTable" width="350px" border="1">
    <TR>
        <TD><INPUT type="checkbox" name="chk[]"/></TD>
        <TD>
        <select name="month">
            <option value="1">January</option>
            <option value="2">February</option>
            <option value="3">March</option>
            <option value="4">April</option>
            <option value="5">May</option>
            <option value="6">June</option>
            <option value="7">July</option>
            <option value="8">August</option>
            <option value="9">September</option>
            <option value="10">October</option>
            <option value="11">November</option>
            <option value="12">December</option>
        </select>
        <select name="day">
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            <option value="5">5</option>
            <option value="6">6</option>
            <option value="7">7</option>
            <option value="8">8</option>
            <option value="9">9</option>
            <option value="10">10</option>
            <option value="11">11</option>
            <option value="12">12</option>
            <option value="13">13</option>
            <option value="14">14</option>
            <option value="15">15</option>
            <option value="16">16</option>
            <option value="17">17</option>
            <option value="18">18</option>
            <option value="19">19</option>
            <option value="20">20</option>
            <option value="21">21</option>
            <option value="22">22</option>
            <option value="23">23</option>
            <option value="24">24</option>
            <option value="25">25</option>
            <option value="26">26</option>
            <option value="27">27</option>
            <option value="28">28</option>
            <option value="29">29</option>
            <option value="30">30</option>
            <option value="31">31</option>
        </select>
        <select name="year">
            <option value="2013">2013</option>
            <option value="2012">2012</option>
            <option value="2011">2011</option>
            <option value="2010">2010</option>
            <option value="2009">2009</option>
            <option value="2008">2008</option>
            <option value="2007">2007</option>
            <option value="2006">2006</option>
            <option value="2005">2005</option>
            <option value="2004">2004</option>
            <option value="2003">2003</option>
            <option value="2002">2002</option>
            <option value="2001">2001</option>
            <option value="2000">2000</option>
            <option value="1999">1999</option>
            <option value="1998">1998</option>
            <option value="1997">1997</option>
            <option value="1996">1996</option>
            <option value="1995">1995</option>
            <option value="1994">1994</option>
            <option value="1992">1992</option>
            <option value="1991">1991</option>
            <option value="1990">1990</option>
        </select>
        </TD>
        <TD> <INPUT type="text" name="txt"/> </TD>
        </TR>
    </TABLE>
    <input type='submit' value='Save'/>
    </form>
EOHTML;
}

单击“保存”后,它会(或应该)使用以下函数保存到数据库中:

function create_milestones_save() {
    global $wpdb;
    $result = $wpdb->query($wpdb->prepare("REPLACE INTO upsmart_milestones
                                          (wordpress_id,month,day,year,description)
                                          VALUES(%d,%d,%d,%d,%s)",
                                          array(
                                              get_current_user_id(),
                                              $_POST['month'],
                                              $_POST['day'],
                                              $_POST['year'],
                                              $_POST['txt'],
                                          )
    ));

    if($result === false) return false;
    return true;
}

所以情况是这样的:只有一个里程碑,我可以毫无问题地保存它,但是我无法让它保存多个里程碑;这是有一定道理的,因为我没有循环任何变量。我猜测我需要将每个变量(月、日、年和 txt)作为数组发送到 create_milestones_save() ,然后使用 foreach 循环将每个条目存储在数据库中。我只是真的不确定如何在 php 中编写它。

提前感谢您的帮助。

最佳答案

输入应命名为月[]、日[]、年[]和txt[],就像复选框是chk[]一样。 例如 $_POST["month"] 将是一个数组,其中按顺序包含所有里程碑的月份。 您还应该为每个复选框指定一个唯一的值,例如递增的数字。

然后你可以像这样循环它们:

<?php
foreach ($_POST["chk"] as $chk_value)
{

    $id = (int)$chk_value; // The position of the milestone in the form

    $day = $_POST["day"][$id];
    $month = $_POST["month"][$id];
    $year = $_POST["year"][$id];
    $txt = $_POST["txt"][$id];

    // Execute query with data in $day, $month, $year and $txt
}
?>

请注意,此循环只会循环通过复选框选择的里程碑。

关于php - 使用foreach提交动态生成的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17555432/

相关文章:

php - MySQL数据库设计建议

javascript - 根据两个选择选项显示 mysql 的结果数

PHP:使用 IF 语句生成 SQL 困难

php - 使用 PHP 将数组插入 MySQL

php - 如何将 php 数组与 sql IN 运算符一起使用?

Javascript 未输入带有 .php 文件引用的函数

php - 向 WooCommerce 结账添加新的自定义字段并显示在管理订单页面和电子邮件通知中

mysql - 如何在MySQL中执行多个LEFT JOIN?

php - 按元素大小对多维数组排序

c - 如何将数组传递给外部函数?