2016-03-31 2 views
1

現在、単純なフォーラムを構築しようとしています。私はList_Category()のカテゴリを取得するために関数を使用しています。次に、List_SubCategory($id)List_Category()の中に呼び出して、カテゴリのサブカテゴリを取得します。しかし、私が問題を抱えているのは、もし私がechoList_SubCategory($id)からの結果であるとすると、そのサブカテゴリがコンテンツボックスの上に表示されるのではなく(それは私には意味をなさない)、ファンクション内の関数を呼び出すと、テンプレートが破損する

(ただし、1つの以上の結果を)見て: enter image description here

を、それは私がechoList_SubCategory($id)で使用している場合はどのように見えるか: enter image description here

機能:

public function List_Category() { 

    $GetCat = $this->dbc->prepare("SELECT id,name,type,minrank,mini_icon FROM categories ORDER BY id ASC"); 
    if($GetCat->execute()) { 

     $GetCat->bind_result($catid, $catname, $cattype, $catminrank, $caticon); 
     $GetCat->store_result(); 

     if($GetCat->num_rows >= 1) { 

      while($GetCat->fetch()) { 
       echo '<h3 id="CatTitle"><a href="#"><i class="'.$caticon.'"></i> '.$catname.'</a> <a href="javascript:void(0)" class="CatMin-'.$catid.'"><i class="fa fa-minus-square" id="CategoryMinim"></i></a></h3> 
        <div id="CategoryBlock" class="Cat-'.$catid.'"> 
         '.$this->List_SubCategory($catid).' 
        </div> 
        <br style="clear:both">'; 
      } 

     } 

    } else { 

     return BoardTemplate::ThrowNewAlert("error", $GetCat->error); 

    } 

} 

public function List_SubCategory($id) { 

    $GetSub = $this->dbc->prepare("SELECT id,name,attach_id FROM subcategories WHERE attach_id = ? ORDER BY id ASC"); 
    $GetSub->bind_param("i", $id); 
    if($GetSub->execute()) { 

     $GetSub->bind_result($subid, $subname, $subattach); 
     $GetSub->store_result(); 

     if($GetSub->num_rows >= 1) { 


      while($GetSub->fetch()) { 

      echo '<div id="CatSep" style="position: relative;"> 
         <i class="fa fa-comments-o" id="ReadStatus"></i> <div class="Title"><a href="#">'.$subname.'</a></div> 
         <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/78/783bd2db99ca87c20c23b2ff59427fdd8aff8329_full.jpg" class="SizeTinyAvatar" id="CatAva" style="float:right;" /> 
         <div class="Desc"> 
          <div style="float: right" id="fr"><b>Latest:</b> <a href="#">Welcome to your first fucking...</a></div><br style="clear:both"> 
          <div style="float: right" id="fr">Posted by <a href="#">Kah!</a>, 2 days ago</div> 
         </div> 

         <div id="StatsHelp"> 
          <div id="CatStats">10<br>Topics</div> 
          <div id="CatStats">10<br>Posts</div> 
         </div> 
        </div>'; 
      } 




     } else { 
      echo "no cat"; 
     } 



    } 

} 

List_Category()がその結果をエコーし​​ているので、私の現在の理論は壊れています。List_SubCategory($id)もそうしているので、エコーの中にエコーしています。ファンクション?

私は自分のHTMLや私のCSSに間違いがないことを保証することができます。 List_SubCategory($id)echoreturnに置き換えた場合、最初の画像のように見えますが、while()を無視しているように見えます。これはデータベースの最初の行しか与えないからです。

これは説明が難解でした。しかし、どんな助けもありがたいです。私はそれをどのように見せなければならないのか分かりません。

答えて

1

echoList_SubCategory()は、echoList_Category()になる前に終了しています。

文字列を直接エコーするのではなく、変数に書き込んで、List_SubCategory()関数の最後にこの変数を返す必要があります。あなたがすでに説明したように、あなたは中に戻りを置くべきではありません。

+0

ご意見ありがとうございます。変数にエコーを割り当てようとしましたが、whileループの外で変数を返しました。しかし、これはデータベース内の最後の行だけを返し、2つではありません(2があるため)。 whileループの中にリターンを置くと、最初の行だけが返されます。 –

+0

関数の先頭に変数を定義し( '$ html =" ";')、それをwhile( '$ html + =" [あなたのhtmlコード] ";')に追加する必要があります。毎回変わる。 – dtkahl

+0

これを行うと、単に "0"が出力されます –