PHP数组Post到数据库与多个文本框在Foreach


PHP Array Post Into Database with Multiple textboxes in Foreach

我是PHP的新手,我对数组和Foreach有点困惑。

我目前正在做一个项目,我们有很多团队,每个团队都有一定数量的人,我们在数据库中有。

我有一个foreach设置,其中用户可以选择一个团队,它将显示每个用户在团队一行与文本框为一周的每一天。

<?php  foreach ($aTeam AS $iUserId => $aAgent){ ?>
<tbody>
    <tr class="<?php 
        echo $aAgent['iStatusId']==0?'low_light':
        'high_light';
        ?>">
        <td><?php  echo FilterOut::HTML($aAgent['sName']); ?></td>
<td style="display: none;"><input width="0px" type="hidden" name="iUserId[]" value="<?php  echo $aAgent['iUserId']; ?>" /></td>
<td><input id="iMonMins" name="iMonMins[]" type="text" value="<?php  echo $aAgent['iMon']   ?>" /></td>
<td><input id="iTuesMins" name="iTueMins[]" type="text" value="<?php  echo $aAgent['iTues']    ?>" /></td>
<td><input id="iWedMins" name="iWedMins[]" type="text" value="<?php  echo $aAgent['iWed']    ?>" /></td>
<td><input id="iThursMins" name="iThurMins[]" type="text" value="<?php  echo $aAgent['iThurs']    ?>" /></td>
<td><input id="iFriMins" name="iFriMins[]" type="text" value="<?php  echo $aAgent['iFri']    ?>" /></td>
<td><input id="iSatMins" name="iSatMins[]" type="text" value="<?php  echo $aAgent['iSat']    ?>" /></td>
<td><input id="iSunMins" name="iSunMins[]" type="text" value="<?php  echo $aAgent['iSun']    ?>" /></td>
<?php  var_dump($aForm) ?>
</tr>
</tbody>

每个人将有一个指定的金额在每个文本框,然后我想上传到数据库,但我真的不明白他们是如何相互关联的。

对于两个用户(用户数量通常最多为20人),数组看起来是这样的

'iUserId' => 
    array (size=2)
      0 => string '42' (length=2)
      1 => string '180' (length=3)

imonmin的数组看起来像

  'iMonMins' => 
    array (size=2)
      0 => string '99' (length=2)
      1 => string '18' (length=2)

iTuesMins的数组看起来像

  'iTueMins' => 
    array (size=2)
      0 => string '300' (length=1)
      1 => string '324' (length=1)

我不会把它们都打印出来,因为你可能会明白。

然后我将它们分别放入一个数组

$oUser->Update_AgentHours($aForm['iUserId'], $aForm['iMonMins'], $aForm['iTueMins'], $aForm['iWedMins'], $aForm['iThurMins'], $aForm['iFriMins'], $aForm['iSatMins'], $aForm['iSunMins']);

然后在一个函数中调用它来上传到数据库

function Update_AgentHours($iUserId, $iMonMins, $iTueMins, $iWedMins, $iThurMins, $iFriMins, $iSatMins, $iSunMins) {
    {
        $sSql = 'UPDATE cfg_users SET `iMon` = '''.$iMonMins.''', `iTues` = '''.$iTueMins.''', `iWed` = '''.$iWedMins.''', `iThurs` = '''.$iThurMins.''', `iFri` = '''.$iFriMins.''', `iSat` = '''.$iSatMins.''', `iSun` = '''.$iSunMins.'''  WHERE `iUserId` = '''.$iUserId.''';';
        $this->oDb->query($sSql);   
        }
    }

起初我没有把每个文本框作为一个数组,所以它只上传最后一行的文本框,我读到我需要把每个文本框放入一个数组,这样我就可以循环并上传它们。

我只是不明白每个数组是如何相互链接的?

我真的很想说:

UPDATE "mydatabase" SET iMon = $aForm[iMonMins[0]], iTue = $aForm[iTueMins[0]] WHERE iUserId = $aForm[iUserId[0]]
UPDATE "mydatabase" SET iMon = $aForm[iMonMins[1]], iTue = $aForm[iTueMins[1]]  WHERE iUserId = $aForm[iUserId[1]]

但是我不明白我怎么能把第一个userid[0]应该是每分钟的第一个[0],然后第二个[1]应该是每分钟的第二个[1]…

我希望我已经解释得足够好了

感谢

更新:(我不能工作如何添加[code]到评论部分,所以我想我只是更新这部分..

我有一点麻烦理解"$idx=>$iUserId"部分。

我按照你的建议添加了POST,这是顶部的部分(因为我不能全部添加,它太大了)

POST ARRAYArray
(
    [iTeamId] => 0
    [iUserId] => Array
        (
            [0] => 42
            [1] => 180
        )
    [iMonMins] => Array
        (
            [0] => 0
            [1] => 0
        )

所以$idx是[0],所以在post [iMonMins][$idx] = 0,这将处理附加到UserId的值?

首先将这段代码放在脚本的顶部,这样您就可以看到$_POST数组,然后运行页面并点击提交。

echo '<pre>POST ARRAY' . print_r($_POST,true) . '</pre>';

这将转储post数组,以便您查看将要处理的数据。

现在读取所有的数据,你可以通过$_POST['iUserid'] foreach,并使用userid的索引来寻址所有其他数组,这样你就可以保持一切有序,像这样。

foreach( $_POST['iUserid'] as $idx => $iUserid ) {
    //  now we will get one iUserid each time round the loop 
    //  and a idx identifying which occurance of the array we are on
    //  so now collect the day information for that user
    // First you must ensure you sanitize the data in the $_POST array
    // if its not already being done
    $oUser->Update_AgentHours(
                      $iUserId, 
                      $_POST['iMonMins'][$idx], 
                      $_POST['iTuesMins'][$idx], 
                      $_POST['iWedMins'][$idx], 
                      $_POST['iThurMins'][$idx], 
                      $_POST['iFriMins'][$idx], 
                      $_POST['iSatMins'][$idx], 
                      $_POST['iSunMins'][$idx]);
}
大注意

我没有对$_POST数组进行任何清理。在尝试将此数据放入数据库之前,必须确保已完成此操作。

我想我有一个解决方案,你可以试试,如果它对你有效,请告诉我。

在你的php你循环通过你的用户与每个我猜你知道如何做,然后你有一个变量外的for循环,每次增量与变量循环,你可以让你的用户有属于他们的每一行。像user1有每天的第一行,user2有每天的第二行…用户第n行。像这样。

$i = 0;
foreach($aForm[iUserId] as $user)
{
    UPDATE "mydatabase" SET iMon = $aForm[iMonMins][$i], iTue = $aForm[iTueMins][$i] WHERE iUserId = $user;
$i++;
}

试一试,希望它能工作,本想在发布之前试一下,但这里有一个项目很忙。