使用Concrete5自定义仪表板single_page / admin面板时出现问题

时间:2011-10-20 05:54:14

标签: database admin dashboard concrete5

我在使自定义信息中心single_page与数据库正确交互方面遇到了一些麻烦。

屏幕截图:http://i54.tinypic.com/2lvh45d.jpg

推荐代码(single_pages / dashboard / testimonials.php):http://pastebin.com/PK4ziRih

newTestimonials.php代码:

<?php
defined('C5_EXECUTE') or die("Access Denied.");
$testimonial_name = $_POST['testimonial_name'];
$testimonial_content = $_POST['testimonial_content'];
$url = "http://www.eurofloors.co.nz/dashboard/testimonials/";

$con = mysql_connect('localhost', 'username', 'password');
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("eurofloo_website", $con);

$sql = "INSERT INTO testimonials (id, name, content) VALUES " . $testimonial_name . $testimonial_content;

mysql_query($sql);

/* Redirect browser */
header("Location:" .$url);
/* Make sure that code below does not get executed when we redirect. */
exit;
?>

save_testimonials.php代码:

<?php
defined('C5_EXECUTE') or die("Access Denied.");

$existing_testimonials_update = $_POST['data'];

$con = mysql_connect('localhost', 'username', 'password');
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("eurofloo_website", $con);

$sql = "INSERT INTO testimonials VALUES " . $existing_testimonials_update;

$result = mysql_query($sql);


mysql_close($con);

?>

我对此页面的问题是,当我提交新的推荐表单或单击底部数据网格上的保存时。我得到了Page Not Found错误,因为concrete5似乎无法看到表单的action属性中设置的php文件。 有没有明显的原因导致这种情况发生,还是因为我没有使用过MVC方法?

你能指出正确的方向吗? 我正在寻找的主要内容是控制器和放大器的一些示例文档。数据库交互和表单数据处理的模型语法。

非常感谢任何建议或资源。

ps:我还是PHP的新手,所以我可能会以错误的方式接近代码。

1 个答案:

答案 0 :(得分:1)

啊啊......是的,如果你试图解决路线系统Concrete5已经到位的问题,那么除了痛苦之外,你将体验到除了痛苦之外的任何事情(不幸的是,相反于它内部的一点点痛苦)。 我强烈建议在他们的文档中阅读这个“操作方法”:

http://www.concrete5.org/documentation/how-tos/developers/build-a-single-page-powered-editing-interface-for-concrete5/

当你说你是PHP新手时,你是一般的网络编程新手,还是已经熟悉其他语言和MVC框架?如果是后者,那么我会提醒说在上面的文章中有一个非常难看的事情,其中​​控制器动作的不同视图都在一个视图文件中,用大的“if”语句分隔。如果这冒犯了我的感觉,就像我的感觉一样,我已经找到了让这项工作变得更好的方法,如果你想看到它,请告诉我。 [编辑:请参阅https://github.com/jordanlev/c5_boilerplate_crud以获得更好的技巧。它在Concrete5.5.0及更高版本上开箱即用。如果您坚持使用5.4.x,则可以将此修补程序应用于您的系统,以使其正常工作:https://github.com/concrete5/concrete5/pull/147/files]。如果你是一般的编程新手,你可以完全忽略这一段,因为它没有多大意义:)

对于您正在使用的数据库代码,如果您正在与Concrete5数据库交互,请不要使用所有mysql_connect内容 - C5已经建立了数据库连接,并且它使用ADODB库与它进行交互,例如这样:

$db = Loader::db();
$sql = "INSERT INTO testimonials (name, content) VALUES ?, ?";
$vars = array($testimonial_name, $testimonial_content);
$db->query($sql, $vars);

请注意,我从insert语句的字段列表中省略了“id” - 我猜测id是MySQL表中的自动增量主键字段,这意味着你没有为它插入任何东西(数据库将神奇地创建自己的数字)。这是一般的MySQL事情,顺便说一下 - 与C5没有任何关系。

如果您想连接到不同的数据库,那么“Loader”代码会略有不同 - 请参阅此页面上的“连接到其他数据库”部分:http://www.concrete5.org/documentation/developers/system/database-connectivity (特别注意示例代码中的最后一行,完成时重置连接 - 你必须执行此操作否则在自定义代码运行后,Concrete5将失败。)

祝你好运!