【问题标题】:PHP arrays from form input来自表单输入的 PHP 数组
【发布时间】:2014-10-20 18:34:36
【问题描述】:

我在从 mysql 数据库填充的 html 表中有一些数据。要将数据放入 html 表中,我做了以下操作:

$meterdetail = getMeterDetails($ticketNumber);

这会从 mysql 表中获取一些记录然后对于从数据库中检索到的每条记录,我执行以下操作..

foreach ($meterdetail as $v2) {
<tr>
    <td class='tableText'>
        <input type='hidden' name='ids[]' value='".$v2['id']."'>
        <input type='text' name='meters[]' value=''>
    </td>
</tr>

最终我在这里要做的是使用表输入中的值更新每条记录(基于 mysql 表中的 ID)。

当我点击提交按钮时,我需要逐步检查收集的每条记录,并将键入的值插入到与相关 ID 对应的 html 表单中。

要处理 $_POST 数据,我执行以下操作

if (!empty($_POST['meters']) && !empty($_POST['ids'])) {
    for ($i = 0; $i < count($_POST['meters']); $i++) {
        updateRecord($_POST['ids'][$i],$_POST['meters'][$i]);
    }
}

这似乎有效,但由于某种原因,我对这个解决方案感到不舒服,所以我的问题是:有没有更好(更优雅/更正确)的方法来做到这一点(特别是 2 $_POST 的处理数组)?是否可以创建一个以ID为键、表单输入值为对应值的关联数组?

【问题讨论】:

    标签: php html arrays forms associative


    【解决方案1】:
    $met = $_POST['meters'];
    $id = $_POST['ids'];
    
    
    
    if (isset($met) && isset($id)) 
    {
        for ($i = 0; $i < count($id); $i++) 
        {
            updateRecord($id[$i],$met[$i]);
        }
    }
    

    【讨论】:

    • 谢谢...虽然这与我所拥有的几乎相同..有没有办法我可以做类似 $_POST['id']['meter'] where id1 =>每个 id 的meter_reading..?
    • 是的,没错,但真正你正在做的是一个最佳的解决方案 w.r.t split time
    【解决方案2】:

    更好的方法是确保您的输入具有“一成不变”的名称;

    foreach ($meterdetail as $key => $v2) {
        echo "
    <tr>
        <td class='tableText'>
            <input type='hidden' name='id_".$key."' value='".$v2['id']."'>
            <input type='text' name='meter_".$key."' value=''>
        </td>
    </tr>
        ";
    }
    

    然后像这样处理后期数据:

    $ids = array();
    $meters = array();
    foreach($_POST as $name => $value) {
        if(strpos($name, 'id_') === 0) {
            $ids[substr($name, 3)] = $value;
        }
        if(strpos($name, 'meter_') === 0) {
            $ids[substr($name, 3)] = $value;
        }
    }
    
    if(count($ids) && count($meters)) {
        foreach($ids as $key => $id) {
            updateRecord($id, $meters[$key]);
        }
    }
    

    通过这种方式,您始终可以确保您在数据库中具有正在更新的伴随值。

    PS:这是概念证明...尚未测试...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多