2015-06-09 3 views
1

Я работал над некоторым кодом для создания системы меню, управляемой базой данных, в 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

+0

Что делает 'renderMenu()' do? –

+0

@ mike.k его функция используется для визуализации меню. –

+0

@Phillip вы можете показать записи таблицы 'tblmenu'? –

ответ

1

Вы используете renderMenu() рекурсивно, но это вторя выход вместо того, чтобы вернуться. Он должен вернуть $menuHTML; вместо эхо-сигнала.

+0

Большое спасибо, это было именно то, что мне нужно было исправить. Я, должно быть, изменил эту строку и не понял ее, когда позже был устранен неполадки. –

Смежные вопросы