Проблема с Concrete5 пользовательская панель управления single_page / панель администратора

#database #admin #dashboard #concrete5

#База данных #администратор #Информационная панель #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);

?>
  

Моя проблема с этой страницей заключается в том, что когда я отправляю новую форму отзыва или нажимаю сохранить в таблице данных внизу. Я получаю сообщение об ошибке Страница не найдена, потому что concrete5, похоже, не видит файлы php, установленные в атрибуте действия форм.
Есть ли очевидная причина, по которой это может произойти, или это потому, что я не использовал подход MVC?

Не могли бы вы указать мне правильное направление? Главное, что я ищу, это какая-то документация с примерами синтаксиса контроллера и модели для взаимодействия с БД и обработки данных формы.

Любые советы или предоставленные ресурсы очень ценятся.

ps: Я все еще новичок в PHP, поэтому, возможно, я неправильно подхожу к коду для этого.

Ответ №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);
  

Обратите внимание, что я не включил «id» из списка полей вашего оператора insert — я предполагаю, что id является полем первичного ключа с автоматическим увеличением в таблице MySQL, что означает, что вы ничего не вставляете для него (база данных просто волшебным образом создаст свой собственный номер). Кстати, это обычная вещь MySQL — не имеет ничего общего с C5.

Если вы хотите подключиться к другой базе данных, тогда код «Загрузчика» будет немного отличаться — см. Раздел «Подключение к другим базам данных» на этой странице: http://www.concrete5.org/documentation/developers/system/database-connectivity (и особенно обратите внимание на последнюю строку в примере кода, которая сбрасывает соединение по завершении — вы должны сделать это в противном случае Concrete5с треском провалится после запуска вашего пользовательского кода).

Удачи!