I have an application where you view clubs, the clubs are all displayed as links and then you click a club link and get to the club description page. On this page are details of the club and a comments box for the user to add a comment about the club.
The problem I am having is when I add a comment.. I have the action to get the clubs id and display information, with the comments action both in the index action of the clubDescriptionController so they are clashing with each other.
My second problem is In my database I have a club_id(foreign key linked to primary key of clubs table "id") field in the comments table to relate to the club that the user is commenting on so when the user comments.. The comment is linked to the club of the page they are visiting, in my code I need to fix the error of the getClub action and the comments action clashing. But after that I need a point in the right direction on how to get the comments posting the clubs id into the club_id field of the comments database. That's all for the ramble, Thankyou for your time and below is the code. If you need any more information please don't hesitate to ask.
clubDescriptionController:
<?php
class ClubDescriptionController extends Zend_Controller_Action
{
public function indexAction()
{
$this->authoriseUser();
//get id param from index.phtml (view)
$id = $this->getRequest()->getParam('club_id');
//get model and query by $id
$clubs = new Application_Model_DbTable_Clubs();
$clubs = $clubs->getClub($id);
//assign data from model to view [EDIT](display.phtml)
$this->view->clubs = $clubs;
//action for the comments submission
$form = new Application_Form_Comment();
$form->submit->setLabel('Comment');
$this->view->form = $form;
if ($this->getRequest()->isPost()) {
$formData = $this->getRequest()->getPost();
if ($form->isValid($formData)) {
$comment = new Application_Model_DbTable_Comments();
$comment->addComment($form->getValue('comment'));
$this->_helper->redirector('index');
} else {
$form->populate($formData);
}
}
}
Comment form:
<?php
class Application_Form_Comment extends Zend_Form
{
public function init()
{
$this->setName('comment');
$id = new Zend_Form_Element_Hidden('id');
$id->addFilter('Int');
$comment = new Zend_Form_Element_Text('comment');
$comment->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$submit = new Zend_Form_Element_Submit('submit');
$submit->setAttrib('id', 'submitbutton');
$this->addElements(array($id, $comment, $submit));
}
}
Comments model:
<?php
class Application_Model_DbTable_Comments extends Zend_Db_Table_Abstract
{
protected $_name = 'comments';
public function getComment($id) {
$id = (int) $id;
$row = $this->fetchRow('id = ' . $id);
if (!$row) {
throw new Exception("Count not find row $id");
}
return $row->toArray();
}
public function addComment($comment) {
$data = array(
'comment' => $comment,
);
$this->insert($data);
}
}
The view:
<div id="comments-holder">
<p id="comments-title">Comments</p>
<?php
echo $this->form;
?>
</div>
At the moment when I submit a comment it is added to the database but with the following error:
An error occurred
Application error
Exception information:
Message: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`manchesternightlife`.`comments`, CONSTRAINT `comments_ibfk_1` FOREIGN KEY (`club_id`) REFERENCES `clubs` (`id`))
Stack trace:
#0 /Users/R_iMac/Sites/MN/library/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 /Users/R_iMac/Sites/MN/library/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#2 /Users/R_iMac/Sites/MN/library/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('INSERT INTO `co...', Array)
#3 /Users/R_iMac/Sites/MN/library/Zend/Db/Adapter/Abstract.php(575): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `co...', Array)
#4 /Users/R_iMac/Sites/MN/library/Zend/Db/Table/Abstract.php(1075): Zend_Db_Adapter_Abstract->insert('comments', Array)
#5 /Users/R_iMac/Sites/MN/application/models/DbTable/Comments.php(25): Zend_Db_Table_Abstract->insert(Array)
#6 /Users/R_iMac/Sites/MN/application/controllers/ClubDescriptionController.php(30): Application_Model_DbTable_Comments->addComment('hey')
#7 /Users/R_iMac/Sites/MN/library/Zend/Controller/Action.php(516): ClubDescriptionController->indexAction()
#8 /Users/R_iMac/Sites/MN/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('indexAction')
#9 /Users/R_iMac/Sites/MN/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#10 /Users/R_iMac/Sites/MN/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#11 /Users/R_iMac/Sites/MN/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#12 /Users/R_iMac/Sites/MN/public/index.php(28): Zend_Application->run()
#13 {main}
Request Parameters:
array (
'controller' => 'club-description',
'action' => 'index',
'club_id' => '1',
'module' => 'default',
'id' => '0',
'comment' => 'hey',
'submit' => 'Comment',
)
Thanks
Rik