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_SERVER
,WP_USERNAME
,WP_PASSWORD
和WP_DATABASE
?那些来自哪里?
附注:我真的希望这$query
已妥善转义避免sql注入。如果您只是从$ _GET或$ _POST获取一些参数并将它们输入$query
,那么您的安全漏洞很大。
WP常量工作正常,我做了另一个SQL查询,它输出一切很好。虽然我没有'$ query'参数,所以也许就是这样。但是在视图中,'$ query'也没有设置,因为它的一个块参数被激活并且在建立块之后保存到db表中。哦,只有管理员可以更改'$ query'参数,所以不用担心SQL注入的问题:)我会研究一下thx。 – vrt1515 2014-10-29 16:27:51
你是对的先生,'$ query'参数没有出现在块控制器中。我试图简单地从块控制器输出它的视图,但它没有工作,但是当我在视图文件中使用它,工作就像它应该。 – vrt1515 2014-10-29 16:46:36