PHP mysqli fetch_row-迭代多条记录
3天来,我一直在搞这个,研究和实验:是时候寻求帮助了 我有一段代码用于在数据库表上循环的日程表显示页面,每个约会类型循环一次。它收集一周内该类型的所有约会,并连续返回,如下所示:PHP mysqli fetch_row-迭代多条记录,php,mysqli,Php,Mysqli,3天来,我一直在搞这个,研究和实验:是时候寻求帮助了 我有一段代码用于在数据库表上循环的日程表显示页面,每个约会类型循环一次。它收集一周内该类型的所有约会,并连续返回,如下所示: +------+------+-----+-----+-----+-----+-----+-----+-----+------+ | Name | Year | Mon | Tue | Wed | Thu | Fri | Sat | Sun | Purp | +------+------+-----+-----+---
+------+------+-----+-----+-----+-----+-----+-----+-----+------+
| Name | Year | Mon | Tue | Wed | Thu | Fri | Sat | Sun | Purp |
+------+------+-----+-----+-----+-----+-----+-----+-----+------+
| IST | NA | 9-4 | | | | | | | ABC |
+------+------+-----+-----+-----+-----+-----+-----+-----+------+
| OT | NA | | 8-2 | 8-2 | 8-2 | 8-2 | | | DEF |
+------+------+-----+-----+-----+-----+-----+-----+-----+------+
我的代码完全按照我的要求工作,但有一个致命的缺陷。如果一个“名称”有多行,我会将其作为我的行:
+------+------+-----+-----+-----+-----+-----+-----+-----+------+
| Name | Year | Mon | Tue | Wed | Thu | Fri | Sat | Sun | Purp |
+------+------+-----+-----+-----+-----+-----+-----+-----+------+
| IST | NA | 9-4 | | | | | | | ABC |
+------+------+-----+-----+-----+-----+-----+-----+-----+------+
| OT | NA | | 8-2 | 8-2 | 8-2 | 8-2 | | | DEF |
+------+------+-----+-----+-----+-----+-----+-----+-----+------+-+-----+-+-+-+-+-+-----+
| MTG | | 1-2 | | | | | | | | | 1-2 | | | | | | GHI |
| | | | | | | | | | | | | | | | | | JKL |
+------+------+-----+-----+-----+-----+-----+-----+-----+------+-+-----+-+-+-+-+-+-----+
因此,它不是插入适当的,而是创建一组全新的。这真的很令人沮丧,因为我确信这是一件简单的事情,但我看不出来…:(
代码:
$apptnamestop=array(“IST”、“OT”、“MTG”、“TR-CN”、“EVENT”、“EN”、“REC”、“TO”);
$daysofweek=数组(“1”、“2”、“3”、“4”、“5”、“6”、“0”);
foreach($apptnamestop作为$name){
打印stru_repeat($tab,8)。“\n”;
打印str_repeat($tab,9)。“$name\n”;
打印stru_repeat($tab,9)。“不适用\N”;
$getdataquery=“选择appointmentName作为名称
,appointmentType为type,appointmentStartDateTime为sdt
,任命EndDateTime为edt,任命目的为purp
从T点开始
其中AppointmentStaffiedStart类似“{$\u SESSION['user\u id']}%”
和任命名称=“$name”
和(任命StartDateTime>=日期(CURDATE(),INTERVAL)(9-IF(DAYOFWEEK(CURDATE())=1,8,DAYOFWEEK(CURDATE()))天)
和任命EndDateTimequery($getdataquery)
或触发\u错误(“错误消息:($mysqli->错误,E_用户_错误);
$datarowcnt=$getdataqueryresults->num\u行;
如果($datarowcnt>0){
而($row=$getdataqueryresults->fetch_row()){
$rows[]=$row;
}
foreach($行作为$行){
$title=$row[0];
$type=$row[1];
$sdt=$row[2];
$edt=$row[3];
$purp=$row[4];
$c=7;
如果($type==1){
$typew=“强制性”;
}否则{
$typew=“选修”;
}
$sparts=爆炸(“,$sdt”);
$eparts=爆炸(“,$edt”);
$tdiff=getTimeDiff($sparts[1],$eparts[1]);
foreach($daysofweek作为$day){
如果($title==$name){
如果($day==date('w',strottime($sparts[0])){
如果($sparts[0]=$eparts[0]){
打印str_repeat($tab,9)。“$sparts[1]-$eparts[1]
($tdiff)-$typew\n”;
$c--;
}否则{
$s=strottime($sparts[0]);
$e=strottime($eparts[0]);
对于($i=$s;$i 0){
$c--;
打印stru_repeat($tab,9)。“\n”;
}
}
}
}
$rc++;
}否则{
foreach($daysofweek作为$day){
打印stru_repeat($tab,9)。“\n”;
}
}
打印stru_repeat($tab,9)。“$purp\n”;
$purp=“”;
打印“\n”;
}
新行从这里开始:
foreach ( $apptnamestop as $name) {
print str_repeat($tab, 8) . "<tr>\n";
print str_repeat($tab, 9) . "<td class=\"td1s\">$name</td>\n";
如果您希望在找不到匹配的数据库行时跳过表行的创建,请将行创建语句完全移动到内部循环中;这样,它将仅在找到数据库行时运行
作为最后一个注意事项,考虑实现一个视图模板系统;通过将逻辑代码与显示代码分离,您可以很容易地修改任何一个而不会破坏另一个代码。您的代码将来变得更容易阅读和修改。
谢谢乔治!!我最终重构了该代码的整体,但这是ANSWE。r这让我走上了正确的道路…我很感激!!foreach ( $apptnamestop as $name) {
print str_repeat($tab, 8) . "<tr>\n";
print str_repeat($tab, 9) . "<td class=\"td1s\">$name</td>\n";
$rowCounter = 0;
foreach ($rows as $row) {
if ($rowCounter > 0) {
print "</tr>\n"; // Close the previous table row
print str_repeat($tab, 8) . "<tr>\n";
print str_repeat($tab, 9) . "<td class=\"td1s\">$name</td>\n";
print str_repeat($tab, 9) . "<td class=\"td1s\">N/A</td>\n";
}
$rowCounter++;
// Remainder of the loop code goes here
...
}