2011-07-22 48 views
1

私は数ヶ月前にPHPに入ったばかりで、数週間前からObject Oriented PHPに取り掛かりました。私はそれで大丈夫だと思う。クラスコンストラクタでセッション変数を設定できません

私はそれがすべて一つの小さな事を除いて非常にうまく働いているなど、ソート、

を改ページとテーブルにクエリを変換するテーブルクラスを書いているし、それは私が「デフォルトの$ _SESSIONの[をしたいですTABLE_ORDERBY ']変数を使用してTableクラスをインスタンス化します。

私は今、コンストラクタでこのようにそれを設定しています:

$_SESSION['TABLE_ORDERBY'] = $this->_arr_fetched_row_headers[1]; 

私は置き換える

$この - > _ arr_fetched_row_headers [1] 'NewsDate' のような文字列のため。それは働く(私は新しいセッションを最初に始めなければならない)。

どうすれば$ this - > _ arr_fetched_row_headers [1]を使用してセッション変数を自動的に設定できるようになりますか? processQuery()メソッドによって使用される

$ arr_fetched_rows:

Array ([0] => Array ( 
[0] => NewsID [1] => NewsTitle [2] => NewsDate) 
[1] => Array ([0] => 1753 [1] => Test2 [2] => 2011-07-05 15:26:38) 
[2] => Array ([0] => 1754 [1] => Test3 [2] => 2011-07-05 15:26:51) 
[3] => Array ([0] => 1755 [1] => Test4 [2] => 2011-07-05 15:26:51) 
[4] => Array ([0] => 1756 [1] => Test5 [2] => 2011-07-19 08:44:13) 
[5] => Array ([0] => 1758 [1] => Test8 [2] => 2011-07-19 08:44:38) 
etc...... 
[count_all_rows] => 14) 

Table.class.php(のみメソッドのカップルを示す)

<?php 
class Table 
{ 
    /* construct */ 
    public function __construct() 
    { 
     // initialise max_result 
     if(isset($_POST['maxresult'])) { 
      $_SESSION['TABLE_MAXRESULT'] = $_POST['maxresult']; 
     } 
     if(!isset($_SESSION['TABLE_MAXRESULT'])) { 
      $_SESSION['TABLE_MAXRESULT'] = 5; 
     } 

     // initialise pagination 
     if(!isset($_SESSION['TABLE_FROM'])) { 
      $_SESSION['TABLE_FROM'] = 0; 
     } 
     if(isset($_GET['page'])) { 
      $_SESSION['TABLE_FROM'] = $_GET['page'] * $_SESSION['TABLE_MAXRESULT'] - $_SESSION['TABLE_MAXRESULT'];; 
     } 
     if(!isset($_GET['page'])) { 
      $_GET['page'] = 1; 
     } 

     // initialise sorting 
     if(isset($_GET['sort']) && $_GET['sort'] == 'asc' && isset($_GET['sortby'])) { 
      $_SESSION['TABLE_ORDERBY'] = $_GET['sortby']; 
      $_SESSION['TABLE_ORDER'] = 'ASC'; 
     } 
     if(isset($_GET['sort']) && $_GET['sort'] == 'desc' && isset($_GET['sortby'])) { 
      $_SESSION['TABLE_ORDERBY'] = $_GET['sortby']; 
      $_SESSION['TABLE_ORDER'] = 'DESC'; 
     } 
     if(!isset($_SESSION['TABLE_ORDERBY']) || !isset($_SESSION['TABLE_ORDER'])) { 
      $_SESSION['TABLE_ORDERBY'] = $this->_arr_fetched_row_headers[1]; 
      $_SESSION['TABLE_ORDER'] = 'DESC'; 
     } 

    } 

    public function processQuery($arr_fetched_rows) 
    { 
     // define the $this->_arr_fetched_rows property 
     $this->_arr_fetched_rows = $arr_fetched_rows; 

     // extract the row headers from $this->_arr_fetched_rows 
     $this->_arr_fetched_row_headers = $this->_arr_fetched_rows[0]; 

     // count the row headers in $this->_arr_fetched_row_headers 
     $this->_count_row_headers = count($this->_arr_fetched_row_headers); 

     // count the total amount of rows from $this->_arr_fetched_rows 
     $this->_count_all_rows = $this->_arr_fetched_rows['count_all_rows']; 

     // count keys in $this->_arr_fetched_rows, subtract by 2 because of row headers and count_all_rows 
     $this->_count_fetched_rows = count($this->_arr_fetched_rows) - 2; 

     // create a new array without the row headers and without count_all_rows 
     for($i = 1; $i <= $this->_count_fetched_rows; $i++) { 
      $this->_arr_sent_rows[] = $this->_arr_fetched_rows[$i]; 
     } 
    } 

    *** edited out other methods *** 

    // show table 
    public function showTable() 
    { 
     // return the built table 
     return $this->buildTable(); 
    } 
} 

index.phpを

<?php 
require_once 'class/Session.class.php'; 
require_once 'class/Query.class.php'; 
require_once 'class/Table.class.php'; 

$session = new Session(); 
$query = new Query(); 
$table = new Table(); 

$result = $query->selectQuery("NewsID, NewsTitle, NewsDate", "tbl_news", "ORDER BY " . $_SESSION['TABLE_ORDERBY'] . " " . $_SESSION['TABLE_ORDER'] . " LIMIT " . $_SESSION['TABLE_FROM'] . ", " . $_SESSION['TABLE_MAXRESULT'] . " "); 

$table->processQuery($result); 
$table->renameHeaders('NieuwsID, Nieuwstitel, Publicatiedatum, Bewerk, Verwijder'); 
$table->showCheckEditDelete(true, true, true); 
$table->hideRowID(true); 
$table->enableSort(true); 
?> 
<?php echo $table->showTable(); ?> 
+0

質問ごとに1つのみ質問してください。私。 「新しいコードを書くことを検討してください。また、あなたは自分のコードについてどう思っているのか知りたいです。正しくOOPを使っていますか?また、TL; DR効果を避けるために、投稿するコードを最小限に制限してください。 –

+0

チップをありがとう、私はコードを制限しています。 – Xorp25

+2

あなたは最も重要な部分を逃しました: '_arr_fetched_row_headers'をどのように設定していますか?コンストラクタに '$ this - > _ arr_fetched_row_headers'を設定するものは何もありません! – searlea

答えて

1

イベントのあなたの順序は次のとおりです。

$table = new Table(); 
... 
$table->processQuery($result); 

processQuery_arr_fetched_row_headersを設定する関数ですが、すでに表のコンストラクタでそれを使用しようとした(new Tableが実際__construct関数を呼び出します。)

それは問題の一連の出来事です。

+0

それはかなり意味があります。これで、私は再び物事を順番に並べる方法を見つけるために、今度は行きます...ありがとう! – Xorp25

関連する問題