我对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的值吗?
答案 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数组进行任何清理。在尝试将此数据放入数据库之前,必须确保完成此操作。