Я работал над некоторым кодом для создания системы меню, управляемой базой данных, в PHP, с которой я смог успешно работать уже сегодня.
Теперь, однако, эта же функция, которая успешно работала несколько часов назад, не работает должным образом.Строка PHP не построена в ожидаемом порядке
Ожидаемый выход заключается в следующем:
<div class="navbar navbar-inverse navbar-static-top">
<a href="#" id="navbar-brand-color"class="navbar-brand">Exam Practice</a>
<button class="navbar-toggle" data-toggle="collapse" data-target=".navHeader">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="collapse navbar-collapse navHeader">
<ul class="nav navbar-nav navbar-left">
<li><a href="#">Home</a></li>
<li><a href="exam_list.php">Exams</a></li>
<li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Maintenance <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="mntn_exam.php">Exams</a></li>
<li><a href="mntn_topics.php">Topics</a></li>
<li><a href="mntn_documents.php">Documents</a></li>
<li><a href="mntn_document_type.php">Document Types</a></li>
<li><a href="#">Questions</a></li>
<li><a href="#">Question Types</a></li>
<li><a href="#">Answers</a></li>
<li><a href="mntn_answer_type.php">Answer Types</a></li>
<li><a href="#">Users</a></li>
<li><a href="mntn_upload.php">Uploads</a></li>
</ul>
</li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
</ul>
</div>
</div>
И это то, что я получал раньше.
Однако теперь та же функция возвращает:
<ul class="dropdown-menu">
<li><a href="mntn_exam.php">Exams</a></li>
<li><a href="mntn_topics.php">Topics</a></li>
<li><a href="mntn_documents.php">Documents</a></li>
<li><a href="mntn_document_type.php">Document Types</a></li>
<li><a href="#">Questions</a></li>
<li><a href="#">Question Types</a></li>
<li><a href="#">Answers</a></li>
<li><a href="mntn_answer_type.php">Answer Types</a></li>
<li><a href="#">Users</a></li>
<li><a href="mntn_upload.php">Uploads</a></li>
</ul>
<div class="navbar navbar-inverse navbar-static-top">
<a href="#" id="navbar-brand-color"class="navbar-brand">Exam Practice</a>
<button class="navbar-toggle" data-toggle="collapse" data-target=".navHeader">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="collapse navbar-collapse navHeader">
<ul class="nav navbar-nav navbar-left">
<li><a href="#">Home</a></li>
<li><a href="exam_list.php">Exams</a></li>
<li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Maintenance <b class="caret"></b></a>
</li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
</ul>
</div>
</div>
РНР код порождающая выше:
function renderMenu($conn, $parentID, $accessLevel) {
// Renders the main menu
// Example use:
// renderMenu($conn, 0, 80)
// $conn = Database object
// $parentID = Which menu does this sub-menu belong to?
// $accessLevel = User's accessLevel, used to determine which menu entries should be displayed
$menuHTML = '';
$query = "SELECT * FROM tblmenu WHERE parentID='$parentID' AND accessLevel <= '$accessLevel' ORDER BY sortOrder";
if($parentID == 0) { // this should only be done for the top level
$menuHTML .= '<div class="navbar navbar-inverse navbar-static-top">';
$menuHTML .= '<a href="#" id="navbar-brand-color"class="navbar-brand">Exam Practice</a>';
$menuHTML .= '<button class="navbar-toggle" data-toggle="collapse" data-target=".navHeader">';
$menuHTML .= '<span class="icon-bar"></span>';
$menuHTML .= '<span class="icon-bar"></span>';
$menuHTML .= '<span class="icon-bar"></span>';
$menuHTML .= '</button>';
$menuHTML .= '<div class="collapse navbar-collapse navHeader">';
$menuHTML .= '<ul class="nav navbar-nav navbar-left">';
}
else {
$menuHTML .= '<ul class="dropdown-menu">';
}
$rs = mysqli_query($conn, $query);
while($row = mysqli_fetch_array($rs)) {
if($row['hasChild'] == true) {
$menuHTML .= '<li class="dropdown"><a href="'.$row['link'].'" class="dropdown-toggle" data-toggle="dropdown">'.$row['label'].' <b class="caret"></b></a>';
$menuHTML .= renderMenu($conn, $row['id'], $accessLevel);
}
else {
$menuHTML .= '<li><a href="'.$row['link'].'">'.$row['label'].'</a>';
}
$menuHTML .='</li>';
}
$menuHTML .= '</ul>';
if($parentID == 0) { // add closing div tags
$menuHTML .= '</div>';
$menuHTML .= '</div>';
}
echo $menuHTML;
}
Оказывается, что при вызове функции на себя, чтобы заполнить второй <ul>
блок, он управляет чтобы как-то добавить, скорее добавьте себя в нужное место. Я думаю, что это действительно странно, учитывая, что он работал должным образом в первую очередь, и этот блок кода не был затронут за пару комментариев и echo
заявления, чтобы помочь выяснить, что происходит.
Я был бы признателен за слушание от любого, кто столкнулся с подобным поведением и какие шаги они предприняли для его решения.
Я не прошу предложений или советов по созданию систем меню с базами данных (хотя любые советы или конструктивная критика, которые вы можете разделить, будут приняты на борт).
Я спрашиваю: «В каких ситуациях PHP добавляет значение к строке, а не добавляет ее?» и «Какие шаги я могу предпринять в будущем, чтобы избежать этого?»
Для чего стоит страница, размещаемая в XAMPP, и просматриваемая локально на ПК с Windows 8.1 с установленными последними обновлениями. Страница была протестирована как в Firefox, так и в Chrome (последние версии каждого из них) без разницы между результатом.
Заранее спасибо за вашу помощь,
Phillip
Что делает 'renderMenu()' do? –
@ mike.k его функция используется для визуализации меню. –
@Phillip вы можете показать записи таблицы 'tblmenu'? –