concrete5自定义块不传递数组查看

问题描述:

我在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); 

它列出了什么,这是奇怪的,因为当功能被放置在视图文件中,它会列出一切正常。任何帮助?

我的猜测是因为你的代码使用了$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