2012-07-25 46 views
0

我仍然试图让我的头绕过MVC我有一个直接的PHP/MySQL页面,基本上通过获取 select * FROM table1 然后通过循环结果集 并在每个循环中运行一个加入寻子项目信息..代码点火器 - 转换为MVC模型 - 在结果集循环内选择

,但我无法弄清楚如何分割这件事,并做到在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(); 
?> 
+0

老实说,它看起来并不像你试过什么总之,这里没有任何建议你使用Codeigniter或任何框架的东西。仅供初学者阅读用户指南,了解如何连接到数据库。你甚至还创建了一个控制器吗?阅读如何创建模型? – 2012-07-25 03:54:22

+0

如果您想了解MVC,那么使用CodeIgnater将是最后一件事。 – 2012-07-25 04:04:45

+0

嗨韦斯利 - 这不是代码点火器!对不起,我应该更清楚 - 我试图将其转换为代码点火器,但我无法弄清楚如何去模型部分! – Keiiz 2012-07-25 04:21:38

回答

1

在现有代码库的基础上添加框架从来就不是好事。特别是如果你使用的是像CodeIgniter这样基本破解的东西。

相反,你应该研究面向对象以及这种范式带来的原则和规律。例如SOLIDLoD

你应该考虑的另一件事是放弃古代的mysql_* API。它不再被维护。社区甚至开始推动deprecation,这在文档中很明显是red box。建议开始使用PDOMySQLi。如果您选择PDO,here is good tutorial

接下来的事情是:从应用程序逻辑单独的HTML。 PHP本身是一个很好的模板语言。利用它。 This article可能有帮助。

另外,关于MVC模型的主题,您可能会发现this comment会很有用。

+0

感谢您的建议,我会检查出来 – Keiiz 2012-07-25 06:36:11

+0

我真的很想听到更多关于*“像CodeIgniter那样根本破碎的东西”*。框架本身(而不是开发人员对它的使用)是以什么方式“从根本上破碎”的? – 2012-07-25 19:42:29

+0

你现在看过我的评论了吗?没有反应? – 2012-07-26 17:57:48

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'); 

}