2014-10-28 42 views
1

我在concrete5中創建了一個自定義塊,它從數據庫中獲取所有工作者的數組並將其傳遞到視圖中。該模塊也使用時,該塊被添加到一個頁面(它的一個WHERE的SQL語句,即PARENT_ID = 261的一部分),這是我在塊控制功能,它被賦予一個參數:concrete5自定義塊不傳遞數組查看

public function view() 
{ 
    $db = new mysqli(WP_SERVER, WP_USERNAME, WP_PASSWORD, WP_DATABASE); 

    if($db->connect_errno > 0) 
    { 
     echo '<!-- Unable to connect to database [' . $db->connect_error . '] -->'; 
    } 
    else 
    { 

     $SQL_ENTRIES = "SELECT * FROM `wp_posts` WHERE post_type = 'page' AND ".$query." order by replace(post_title,'£','LZ') asc"; 

     if(!$entries_result = $db->query($SQL_ENTRIES)) 
     { 
     echo '<!-- There was an error running the query [' . $db->error . '] -->'; 
     } 
     else 
     { 
      $entries = array(); 
      while($row = $entries_result->fetch_assoc()) $entries[] = $row; 

      $SQL_META = "SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (SELECT ID FROM `wp_posts` WHERE post_type = 'page' AND ".$query.")"; 

     if(!$meta_result = $db->query($SQL_META)) 
     { 
      echo '<!-- There was an error running the query [' . $db->error . '] -->'; 
     } 
     else 
     { 
      $metas = array(); 
      while($row = $meta_result->fetch_assoc()) 
      { 
      if (!isset($metas[$row['post_id']])) $metas[$row['post_id']] = array(); 
      $metas[$row['post_id']][] = $row; 
      } 

      $updated_entries = array(); 
      foreach ($entries as $entry) 
      { 
      if (isset($metas[$entry['ID']])) 
      { 
       foreach ($metas[$entry['ID']] as $meta) 
       { 
       $entry[$meta['meta_key']] = $meta['meta_value']; 
       } 
      } 
      $updated_entries[] = $entry; 
      } 
      $this->set('updated_entries', $updated_entries); 
     } 
     }  
    }  
} 

而且在我查看文件:

$get = $updated_entries; 
echo json_encode($get); 

它列出了什麼,這是奇怪的,因爲當功能被放置在視圖文件中,它會列出一切正常。任何幫助?

回答

0

我的猜測是因爲你的代碼使用了$query變量,但是這個沒有在函數的任何地方定義。如果此代碼在您的視圖文件中起作用,那麼我打賭$query變量是在視圖本身中設置的。或者可能是您傳入數據庫連接的常量是WP_SERVERWP_USERNAMEWP_PASSWORDWP_DATABASE?那些來自哪裏?

附註:我真的希望這$query已妥善轉義避免sql注入。如果您只是從$ _GET或$ _POST獲取一些參數並將它們輸入$query,那麼您的安全漏洞很大。

+0

WP常量工作正常,我做了另一個SQL查詢,它輸出一切很好。雖然我沒有'$ query'參數,所以也許就是這樣。但是在視圖中,'$ query'也沒有設置,因爲它的一個塊參數被激活並且在建立塊之後保存到db表中。哦,只有管理員可以更改'$ query'參數,所以不用擔心SQL注入的問題:)我會研究一下thx。 – vrt1515 2014-10-29 16:27:51

+0

你是對的先生,'$ query'參數沒有出現在塊控制器中。我試圖簡單地從塊控制器輸出它的視圖,但它沒有工作,但是當我在視圖文件中使用它,工作就像它應該。 – vrt1515 2014-10-29 16:46:36