foreach()循环输出数据和创建布局
我目前正在尝试创建一个班级时间表,我从我的Sql Server数据库中使用PHP进行抽取,并且试图获取布局输出以及数据,因为我正在分组资源。foreach()循环输出数据和创建布局
这些分组嵌套如:
-DAY
--TIME
---CLASS
----STUDENTS
我的电流输出工作,但,它只在第一个循环中,然后一切都变得不合时宜。我假设我的代码中有一个错误的</div>
标记,但我无法为我的生活找到它。
我的PHP代码是一个函数,delcare这样:
<div class="mainScheduleWrapper">
<?php daySchedule(); ?>
</div>
我的PHP代码是这样的:
function daySchedule() {
global $conn;
$dayScheduleQuery = 'SET DATEFIRST 1
SELECT [DAY].[DAY] AS [DAY], CLASS.CLASSTIME AS CLASSTIME, CLASSLEVEL.CLASSLEVEL AS CLASSLEVEL, CLASS.MAXSTUDENT AS MAXSTUDENT, INSTRUCTOR.FIRSTNAME AS INSTRUCTOR, STUDENT.FIRSTNAME AS STUDENTFIRST, STUDENT.SURNAME AS STUDENTLAST, STUDENT.DOB AS STUDENTDOB
FROM STUDENT JOIN BOOKING ON STUDENT.ID = BOOKING.STUDENTID JOIN CLASS ON CLASS.ID = BOOKING.CLASSID JOIN CLASSLEVEL ON CLASS.CLASSLEVELID = CLASSLEVEL.ID JOIN [DAY] ON CLASS.CLASSDAY = [DAY].ID JOIN INSTRUCTOR ON CLASS.INSTRUCTORID = INSTRUCTOR.ID
WHERE [DAY].ID = (DATEPART(dw, GETUTCDATE() AT TIME ZONE \'AUS Eastern Standard Time\'))
ORDER BY CLASS.CLASSTIME ASC, INSTRUCTOR.FIRSTNAME ASC, CLASSLEVEL.CLASSLEVEL ASC';
// COUNTERS
$t = 0;
$i = 0;
//VARIABLES FOR DAY SCHEDULE
$classDay = NULL;
$classTime = NULL;
$classInstructor = NULL;
$closeClass = false;
$closeAll = false;
$queryConnector = $conn->query($dayScheduleQuery);
foreach ($queryConnector as $schedule) {
// CLASS DAY HEADER
if ($classDay != $schedule['DAY']) {
echo '<div class="grid-1">';
echo '<h1>' . $schedule['DAY'] . '</h1>';
echo '</div><!-- Day closed! -->';
$classDay = $schedule['DAY'];
}
// CLASS TIME HEADER
if ($classTime != $schedule['CLASSTIME']) {
if($classTime != $schedule['CLASSTIME'] && $t > 0) {
$closeAll = true;
goto closeAll;
}
echo '<div class="grid-12-noGutter scheduleContainer">'; //NON-CLOSED
echo '<h1>' . 'T = ' . $t . '</h1>';
echo '<div class="grid-middle-center col scheduleTimeTab">';
// FIX 3 DIGIT MILITARY TIME
if (strlen($schedule['CLASSTIME']) < 4) {
$classScheduleTime = '0' . $schedule['CLASSTIME'];
} else {
$classScheduleTime = $schedule['CLASSTIME'];
}
echo '<p>' . date('g:i A', strtotime($classScheduleTime)) . '</p>';
echo '</div>'; //CLOSE TIME TAB
echo '<div class="innerSchedule">'; // NON-CLOSED
$classTime = $schedule['CLASSTIME'];
$t += 100;
}
// INSTRUCTOR HEADER
if ($classInstructor != $schedule['INSTRUCTOR']) {
if ($classInstructor != $schedule['INSTRUCTOR'] && $i > 0) {
$closeClass = true;
goto closeClassWrapper;
}
echo '<div class="classWrapper">';
echo '<h1>' . 'I =' . $i . 'T = ' . $t . '</h1>';
echo '<div class="grid-3-middle classHeader">';
echo '<div class="col classHeaderCell' . classLevelColour($schedule['CLASSLEVEL']) . '">' . $schedule['CLASSLEVEL'] . '</div>';
echo '<div class="col classHeaderCell">' . $schedule['INSTRUCTOR'] . '</div>';
echo '<div class="col classHeaderCell">Max' . ' ' . $schedule['MAXSTUDENT'] . '</div>';
echo '</div>';
echo '<div class="grid-4-middle" id="studentHeaders">';
echo '<div class="col"><h6>Student Name</h6></div>';
echo '<div class="col"><h6>Student Birthday</h6></div>';
echo '<div class="col"><h6>Class Level</h6></div>';
echo '<div class="col"><h6>Attendance</h6></div>';
echo '</div>';
$classInstructor = $schedule['INSTRUCTOR'];
$i += 100;
}
echo '<div class="grid-4 studentRow">';
echo '<div class="col">';
echo '<span class="studentCell">' . $schedule['STUDENTFIRST'] . ' ' . $schedule['STUDENTLAST'] . '</span>';
echo '</div>';
echo '<div class="col">';
echo '<span class="studentCell">' . $schedule['STUDENTDOB'] . '</span>';
echo '</div>';
echo '<div class="col">';
echo '<span class="studentCell">' . $schedule['CLASSLEVEL'] . '</span>';
echo '</div>';
echo '<div class="col">';
echo '<span class="studentCell">--</span>';
echo '</div>';
echo '</div>';
// GOTO TAGS
closeClassWrapper: {
if ($closeClass === true) {
echo '</div>';
$closeClass = false;
$i = 0;
}
}
closeAll: {
if ($closeAll === true) {
echo '</div>';
echo '</div>';
echo '</div>';
$closeAll = false;
$t = 0;
$i = 0;
}
}
}
}
任何帮助将不胜感激 - 即使它是来告诉我我会以完全错误的方式去解决这个问题。
最亲切的问候 迈克尔ž
我不会说你要关于它的完全错误的方式,但也有少数红旗在你的代码我跳了出来。
使用
goto
跳是不好的做法。它会影响你的程序流程并迫使你分离不应该分开的任务。您在</div>
丢失时标记了代码段“// NON CLOSED”,这是否有任何目的?你怎么知道goto
部分是可靠的?当你
echo
像<div class="col">
,不逃避双引号(如在\“为每”字符),也可以是有问题的。您的代码可能会在PHP端或HTML端受到损坏或错误解释。
像其他人一样,PHP的使用可能在这里矫枉过正。除了发送JSON外,其余的都可以通过JavaScript处理。
感谢您的领导! :)关于使用JSON,我唯一一次完成此任务是为Shopify及其模板系统为客户构建网站。任何提示,我可以找到如何实现我在用JSON做什么? – user3436334
http://php.net/manual/en/function.json-encode.php我对JSON知之甚少,这可能对你有帮助。 –
嗯......我一直在寻找一些东西,多维数组似乎也是这种类型的布局的一个不错的选择。 – user3436334
你为什么用PHP构建你的布局,这个坏主意 – meda
你能给我一些关于如何以任何其他方式从一个数据库(总是正在更新)构建这个结构的建议吗? – user3436334
当然,你需要分离关注点,你的视图应该只是一个'HTML'文件,然后用'javascript'('AJAX')向你的服务器发出请求,你应该只使用PHP来执行查询并返回'JSON数据返回给你的客户。 – meda