конкретный пользовательский блок не передает массив для просмотра

У меня есть специальный блок, созданный в concrete5, он получает массив всех рабочих из базы данных и передает его в представление. В этом блоке также используется параметр, который задается при добавлении блока на страницу (это часть SQL-оператора WHERE, т.е. parent_id = 261). Вот моя функция в контроллере блока:

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

Он ничего не перечисляет, что странно, потому что, когда функция помещается в файл представления, она перечисляет все нормально. Любая помощь ?

1

Решение

Я думаю, это потому, что ваш код использует $query переменная, но это не определено нигде в функции. Если этот код работает в вашем файле просмотра, то я уверен, что $query переменная устанавливается в самом представлении. Или, может быть, это WP_SERVER, WP_USERNAME, WP_PASSWORD, а также WP_DATABASE константы, которые вы передаете в соединение с базой данных? Откуда они?

Примечание: я действительно надеюсь, что это $query был правильно экранирован, чтобы избежать инъекций sql. Если вы просто берете некоторые аргументы из $ _GET или $ _POST и вводите их в $query тогда у вас есть зияющая дыра в безопасности.

0

Другие решения

Других решений пока нет …