2012-05-14 4 views
0

OOP쪽으로 필사적으로 이동하려고하지만 사용하려고 할 때 주위를 감쌀 수 없습니다. 나는 기계공을 얻지 만 그들을 사용할 때는 클릭하지 않는 것입니다. 현재 시나리오가 OOP 접근 방식에 익숙하다면 궁금합니다.PHP OOP vs 인라인

3 페이지가 있습니다. Details.php는 두 개의 side div를 보여줍니다. 사용자가 메모를 추가 할 수있는 곳과 MySQL에 저장된 이전 메모를 볼 수있는 곳. 그들은 Details.php의 AJAX 기능을 통해 메모를 추가하고 메모를 가져올 수 있습니다. javascript 함수는 add_notes.php를 호출하여 메모를 데이터베이스에 추가하고 load_notes.php를 호출하여 Jquery .load()를 통해 페이지에 메모를로드하고 div를 새로 고치기 위해 새 메모를 제출할 때도 메모를로드합니다.

나는 초보자이지만이 코드를 구성하는 데 더 좋은 방법이 있다고 생각합니다. 나는 프레임 워크를 살펴볼 것이지만,이 프로젝트에서 이미 무릎 깊숙이 있으므로 OOP 아이디어를 더 잘 찾아내는 방법이나 유효성 검사를 가능한 한 능률적으로 수행 할 방법을 찾고있다. 모든 의견이 도움이됩니다!

DETAILS.PHP

<script type="text/javascript"> 
$(document).ready(function(){ 
//When loading page load notes/messages tables and then reload when ajax is done   
$('#note_holder').load('load_notes.php?subcat=<? echo $subcat;?>'); 
    //onclick handler send message btn 
    $("#notes_submit").click(function(){ 
     $(this).closest('form').submit(function(){ 
      return false; 
     }); 
     var frm = $(this).closest('form');    
     var data = $(frm).serialize(); 
      if($(frm).valid()){         
        $.post( 
          "../php/add_notes_ajax.php", 
          data, 
          function(data){        
           $('#note_holder').load('load_notes.php?subcat=<? echo $subcat;?>'); 
          } 
        ); 
      } 
    });   
}); 
</script> 

<div style="float:left; margin-left:15px;"> 
    <form name="messages1" class="form" id="myforma" method="post" action="#" enctype="multipart/form-data"> 
     <fieldset style="width:500px; height:400px; overflow:auto; font-size:11px;"> 
      <legend>Click to View Previous Notes/Messages</legend>    
      <div style="height:350px; overflow:auto;" class="note_holder" id="note_holder"> 
      <!--This div is being called from the ajax script to load add_notes_ajax.php-->    
      </div>   
     </fieldset> 
     <div style="margin-top:20px;"></div> 
    </form>  
</div> 

<div style=" float:right;"> 
    <form name="notes" class="notes" id="notes" method="post" action="#" enctype="multipart/form-data"> 
    <fieldset style="width:300px; height:400px;"> 
     <legend>Enter a Note</legend> 
     <div style="margin-top:00px;"></div> 
     <div> 
    <textarea rows="20" cols="20" style="height:300px; width:290px;" name="notes"></textarea> 
    <input type="submit" name="notes_submit" id="notes_submit" value="Submit Note" class="button" /> 
    <input type="hidden" name="subcat" value= "<?php echo $subcat; ?>" /> 
     </div> 
    </fieldset> 
    <div style="margin-top:20px;"></div> 
    </form> 
</div> 

ADD는 AJAX.PHP

<?php 
include_once('../bootstrap.php'); 
include_once('../site_globals/common_functions.php'); 
include_once('../site_globals/common_queries.php'); 
include_once('../php/gump.class.php'); 
page_protect(); 
error_reporting(0); 

$firstname = filter($_SESSION['user_name']); 
$myid  = filter($_SESSION['user_id']); 

// All the variables from the submission form 
$notes  = filter($_POST['notes']); 
$subcat = filter($_POST['subcat']); 

//Insert Notes into the database 

    $stmt = $dbh->prepare(' 
     INSERT INTO `notes` 
      (date , sub_cat_id , notes) 
     VALUES 
      (:date , :subcat , :notes) 
      '); 
    $stmt->bindValue('subcat', $subcat); 
    $stmt->bindValue('date', date('Y-m-d H:i:s')); 
    $stmt->bindValue('notes', $notes); 
    $stmt->execute();  

echo "This note was added successfully"; 
exit; 

?> 

을 말한다. LOAD NOTES.PHP 그것은 절대적으로

<table width="100%"> 
    <thead style="text-align:left; "> 
    <tr style="font-size:14px; font-weight:bold;"> 
     <!-- <th><input class="check-all" type="checkbox" /></th>--> 
     <th>Date</th> 
     <th >Contents</th> 
     <th>Preview/Print</th> 
    </tr> 
    </thead> 
    <?php while ($messages_row = mysql_fetch_object($messages_res)):?> 
    <tr> 
    <td><a target="_blank" href="../site_hospital_files/thread.php?question_id=<?php echo $messages_row->question_id;?>"><?php echo substr($messages_row->reply, 0, 20) . '...';?></a></td> 
    <td><?php echo date('Y-m-d', strtotime($messages_row->date_added));?></td> 
    <td><a href="../site_hospital_files/pdf_messages_notes.php?msg_id=<?php echo $messages_row->question_id;?>&amp;var1=<?php echo $subcat;?>">Create PDF</a></td> 
    </tr> 
    <?php endwhile;?> 
    <?php while($notes_row = $notes_res->fetch(PDO::FETCH_ASSOC)):?> 
    <tr> 
    <td><?php echo $notes_row[date]; ?></td> 
    <td><?php echo substr($notes_row[notes], 0, 50).'...';?></td> 
    <td><a href="pdf_messages_notes.php?note_id=<?php echo $notes_row->sub_cat_id; ?>&var1=<?php echo $subcat;?>">View</a></td> 
    </tr> 
    <?php endwhile;?> 
</table> 
+0

이 시점에서 나는 그것에 대해 너무 걱정하지 않을 것입니다. 항상 개선 할 수있는 방법이 있지만, 현재하고있는 일은 나쁘지 않습니다. PDO를 사용하고 있습니다. –

+2

...하지만 왜 'mysql_fetch_object'가 무작위입니까? – deceze

+1

그리고이 질문은 http://codereview.stackexchange.com에 더 적합합니다. 여기서는 그렇지 않습니다. – deceze

답변

3

. MySQL과 다른 관계형 데이터베이스의 관계 특성을 감안할 때, PHP 오브젝트와 mysql 테이블의 코드 표현을 정의하는 것은 매우 쉽다. 이 지나치게 간단한 클래스를 고려

<?php 
    class Note { 
     private $id 
     private $text; 
     private $insert_dt; 
     private $update_dt; 
    } 
?> 

를이 더 잘 구성하고 코드베이스 주변의 코드 중복 사냥 할 필요없이 기능을 다시 사용할 수 있습니다 수행 할 수 있습니다 무엇. 예를 들어 모든 노트에 대해 삽입 날짜를 모든 페이지에서 특정 방식으로 인쇄하기를 원한다고 가정 해보십시오. 어떻게하면 좋을까요? 잠재적으로 사이트의 모든 페이지를 변경해야합니다.

우리가 세터와 게터를 적절하게 정의했다면 이는 매우 단순한 작업이됩니다. 난 단지 1 (매우 명백한) 위치에 형식의 반환 문자열을 교체해야한다 :

<?php 
    class Note { 
     // ... 
     public function getFormattedInsertDate() { 
      return date("M, Y", $this->insert_dt); 
     } 
    } 
?> 

인정 하듯이,이 모두는 작은 규모에 소요되는 매우 과도한 시간과 같다. 나는 광범위한 OO 경험이 있었을 때 대학에서 나 자신을위한 개인 사이트를 구축 한 것을 기억합니다. 당시 PHP를 배우고 있었고 사이트에서 인라인 코드를 사용하는 경향이있었습니다. 잘 작동하고, 매우 빠르고 가볍습니다. 지나치게 "무거운"느낌이 들기 때문에 나는 웹 프레임 워크를 이해하지 못했습니다.

유지 관리 중 문제가 발생하면 문제가 발생합니다. 6 개월 또는 몇 년 후 코드로 돌아 가면이 호출이 어디에 있었는지 파악하거나 버그를 수정하기 위해 8 개 장소에서 코드를 변경해야하는 이유를 알아냅니다. 이것들은 나쁜 커플 링으로 인한 감정입니다 - 코드베이스에서 응집력.

다행스럽게도 많은 프레임 워크는 수년 동안이 문제를 지원할뿐만 아니라이를 권장하고 강화하기 위해 수년 동안 급성장 해 왔습니다. 만약 당신이 아니라면 CakePHP 나 코드 이그니 터 (Code Igniter)를 살펴 보길 강력히 권합니다. 이들은 블로그 웹 사이트를 만드는 과정을 안내하는 우수한 입문 자습서를 제공 할뿐만 아니라이 개념을 잘 정리하는 프레임 워크를 쉽게 이해하기 쉽습니다.

이 정보가 도움이되기를 바랍니다. 내가 무엇이든 놓친다면 나에게 알려줘. 그러면 나는 이것을 필요에 따라 업데이트 할 것이다.

+0

도움 주셔서 감사합니다 벤! 그래서 제 예제에서는 모든 것을 하나의 클래스로 옮깁니 까? 자바 스크립트와 모든 것을 하나의 클래스에 넣은 다음 echo $ newnote-> show_notes(); 메인 페이지에? 이런, 나는 내가 수업을 사용할 때를 이해하는 것에 가깝지만 약간의 이유 때문에 거기에 도착할 수 없다고 느낀다. –

+1

진정한 목표는 Model-View-Controller로 나아가는 것입니다. 그러나 다시 간단히 말하면, 데이터베이스를 가져 오면 테이블에 클래스가 있어야한다고 말하고 싶습니다. 클라이언트 언어 (html, css, js)를 자신의 파일에 보관하십시오. 제안한대로 데이터가 필요할 때 간단히 클래스를 참조하십시오. –

+0

좋아, 그게 많이 도움이된다. 감사! 프레임 워크를 시작했으면 좋았을 텐데 첫 번째 프로젝트가 너무 커질 것으로 예상하지 못했습니다. 이제 나는 무릎이 깊어서 올바른 방향으로 움직이는 방법을 찾아야합니다. 조언은 도움이됩니다. –