我是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++;
}
试一试,希望它能工作,本想在发布之前试一下,但这里有一个项目很忙。