0

私はまだMVCについて頭を悩ませようとしています.select * FROM table1を取得し、結果セットをループし、各ループでサブプロジェクト情報を見つけるためにJoinを実行することで基本的に機能するまっすぐなphp/mysqlページがあります..

しかし、これを分割してMVCで行う方法がわかりません..

コードは以下のとおりであり、正しい方向へのヘルプまたはポインターは高く評価されます!

mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");
$query="SELECT * FROM building";
$result=mysql_query($query);

$num=mysql_numrows($result);

$i=0;
while ($i < $num) {
    //for loop make a table
    //this is the heading info

    $b_id=mysql_result($result,$i,"id");
    $address=mysql_result($result,$i,"address");
    $description=mysql_result($result,$i,"description");

?>
    <table width="772px" border="0" align="center" cellpadding="5" cellspacing="0">
     <tr bgcolor="#4682B4" height="50">
      <td width="5%"></td>
      <td><font size="4" face="tahoma" color="white"><strong><? echo $address; ?><a href="http://localhost:8888/project-add.php?b_id=<? echo $b_id; ?>">Add Project</a></strong></font></td>
      <td bgcolor="#4682B4" align="center" width="50%"><input id="lnk<? echo $i; ?>" type="button" value="[+] Expand" onclick="toggle_visibility('tbl<? echo $i; ?>','lnk<? echo $i; ?>');"></td>
     </tr>
     <tr>
      <td colspan="3">
       <table width="103%" border="1" cellpadding="5" cellspacing="0" id="tbl<? echo $i; ?>" class="tbl">

        <?
        $query="SELECT project.id AS p_id, project.name AS p_name, project.description AS p_des, project.building_id as p_b_id, building.id AS b_id, building.address AS b_name
            FROM project JOIN building
            ON project.building_id = building.id
            WHERE building_id='$b_id'";
        $proj_result=mysql_query($query);
        $proj_num=mysql_numrows($proj_result);

        $j=0;
        while ($j < $proj_num) { //while 1

            $p_id=mysql_result($proj_result,$j,"p_id");
            $p_name=mysql_result($proj_result,$j,"p_name");
            $p_des=mysql_result($proj_result,$j,"p_des");
            $b_name=mysql_result($proj_result,$j,"b_name");


        ?>
        <tr>
         <td width="5%"></td>
         <td width="45%"><? echo $p_name; ?></td>
         <td width="50%" align="center">XXXXXXX</td>
        </tr>

        <?
            $j++;
        } //end while 1
        ?>
      </table>
      </td>
     </tr>
    </table>
    <?
    $i++;
}



mysql_close();
?>
4

2 に答える 2

1

既存のコードベースの上にフレームワークを追加することは決して良いことではありません。特に、CodeIgniterのように根本的に壊れているものを使用している場合。

代わりに、OOPと、このパラダイムに由来する原則と法則を調査する必要があります。SOLIDLoDのようなもの。

調べる必要があるもう1つのことは、古いmysql_*APIを削除することです。それはもう維持されていません。コミュニティは非推奨を推進し始めています。これは、ドキュメントの赤いボックスから明らかです。PDOまたはMySQLiのいずれかを使用して開始することをお勧めします。PDOを選択した場合は、ここに優れたチュートリアルがあります。

次は、HTMLをアプリケーションロジックから分離します。PHP自体は優れたテンプレート言語です。それを利用してください。この記事はそれを助けるかもしれません。

また、MVCのモデルについては、このコメントが役立つ場合があります。

于 2012-07-25T05:12:38.033 に答える
0

人々が私の解決策で叫ぶかどうかはわかりませんが、最終的に私がそれをやった方法は次のとおりです。すべての返信に感謝します

public function index()
{

    $data['building'] = $this->building_model->get_building();

    $this->load->view('templates/header', $data);

    foreach ($data['building'] as $building_item)
    {
            $data['address']  = $building_item['address'];
            $data['id']  = $building_item['id'];
            $this->load->view('building/tbl1', $data);
            $data['project'] = $this->building_model->get_project($building_item['id']);
            $this->load->view('building/tbl2', $data);
            $this->load->view('building/tbl3');             

    }

    $this->load->view('templates/footer');

}
于 2012-07-25T13:29:04.410 に答える