PHP阵列发布到Foreach中具有多个文本框的数据库中

时间:2014-08-01 10:09:48

标签: php sql arrays foreach

我对PHP很新,我对Arrays和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)

iMonMins的数组看起来像

  '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] ...... / p>

我希望我已经解释得这么好了

由于

更新:(我无法工作如何将[代码]添加到评论部分,所以我想我会更新这部分..

我在理解“$ idx =&gt; $ iUserId”部分时遇到了一些麻烦。

我按照你的建议添加了POST,这是最重要的部分(因为我无法添加它,它太大了)

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

    [iMonMins] => Array
        (
            [0] => 0
            [1] => 0
        )

所以$ idx是[0],所以在帖子[iMonMins] [$ idx] = 0时,会处理附加到UserId的值吗?

2 个答案:

答案 0 :(得分:0)

我想我有一个解决方案,你可以尝试让我知道它是否适合你。

在你的php中,你通过你的用户循环,我猜你知道怎么做然后你有一个变量在for循环中,每次在for循环中增加你可以让你的用户到的变量每一行都与他们有关。就像user1每天有第一行,user2第二行...... usern第n行。这样的事情。

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

尝试一下希望它能运作,在发布之前会尝试一下但是在这里非常忙碌的项目。

答案 1 :(得分:0)

好的,首先将此代码放在脚本的顶部,这样您就可以看到$ _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]);

}

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