Создал пользовательский модуль формы, форма фиксируется в базе данных перед вводом значений


Я создал пользовательский модуль формы. Однако модуль уже фиксирует "значения", когда я захожу на страницу, а не после ввода значений и нажатия кнопки "отправить". Поэтому каждый раз, когда я обновляю страницу, моя форма отправляет пустое значение в мою базу данных.

enter image description here

Страница также выводит значение успеха после обновления страницы:

"Успешно заданный вопрос!"

Это мои файлы: Block/List.php

<?php

/**
 * Class Topper_ProductQA_Block_List
 */
class Topper_ProductQA_Block_List extends Mage_Core_Block_Template
{

    /**
     * @return Topper_ProductQA_Model_Resource_Question_Collection
     */
    public function getQuestions()
    {
        $collection = Mage::getModel('topperproductqa/question')->getCollection();

        return $collection;
    }

    /**
     * Class Topper_ProductQA_Block_List
     */
    public function getFormQuestions()
    {
        $data = $this->getRequest()->getPost();
        $session = Mage::getSingleton('core/session');
        $form = Mage::getModel('topperproductqa/question');
        $form->setQuestion($data['question']);
        $form->setCustomerEmail($data['customer_email']);
        try {
            $form->save();
            $session->addSuccess('Succesfully asked a question!');
        } catch (Exception $e) {
            $session->addError('Error');
        }
    }
}

Controllers/IndexController.php

<?php

class Topper_ProductQA_IndexController extends Mage_Core_Controller_Front_Action
{
    public function indexAction()
    {
        $this->loadLayout();
        $this->renderLayout();

        return $this;

    }
}

Model/Question.php

<?php

/**
 * Class Topper_ProductQA_Model_Question
 *
 * @method string getQuestion()
 * @method setQuestion(string $question)
 *
 * @method string getAnswer()
 * @method setAnswer(string $answer)
 *
 * @method string getCreatedAt()
 * @method setCreatedAt(string $createdAt)
 *
 * @method string getUpdatedAt()
 * @method setUpdatedAt(string $updatedAt)
 *
 * @method string getCustomerEmail()
 * @method setCustomerEmail(string $customerEmail)
 */
class Topper_ProductQA_Model_Question extends Mage_Core_Model_Abstract
{
    /**
     * Topper_ProductQA_Model_Question constructor.
     */
    public function __construct()
    {
        $this->_init('topperproductqa/question');
    }

    public function _beforeSave()
    {
        if ($this->isObjectNew()) {
            $this->setCreatedAt(Mage::getSingleton('core/date')->gmtDate());
        }

        $this->setUpdatedAt(Mage::getSingleton('core/date')->gmtDate());
    }
}

Шаблон/список.phtml

<?php /** @var Topper_ProductQA_Block_List $this */ ?>

<!-- Tekst na submit -->
<span id="feedback-submit-button" style="display:none;">
Bedankt voor de vraag, wij koppelen zo snel mogelijk terug.
</span>

<!--Form-->
<form id="questionForm" method="post" action="<?php echo $this->getFormQuestions() ?>">
    <table>
        <col width="200">
        <col width="500">

        <!--Title-->
        <h2 class="legend">
            <?php echo $this->__('Ask a question!') ?>
        </h2>

        <!--Customer Email-->
        <div class="field">
            <tr>
                <td>
                    <label for="customer_email" class="required"><em>*</em><?php echo $this->__('E-mail') ?></label>
                </td>
                <td>
                    <input name="customer_email" id="customer_email" title="<?php echo $this->__('E-mail') ?>"
                           class="input-text required-entry validate-email" maxlength="255" type="text"/>
                </td>
            </tr>
        </div>

        <!--Question-->
        <div class="field">
            <tr>
                <td>
                    <label for="question" class="required"><em>*</em><?php echo $this->__('Question') ?></label>
                </td>
                <td>
                    <textarea name="question" id="question" title="<?php echo $this->__('Question') ?>"
                              class="required-entry input-text" cols="5" rows="3"></textarea>
                </td>
            </tr>
        </div>

        <!--Required Fields-->
        <p class="required">*
            <?php echo $this->__('Required Fields') ?>
        </p>

        <!--Submit button-->
        <button type="button" onclick="questionSubmit()" title="<?php echo $this->__('Submit') ?>" class="button">
            <span><span><?php echo('Submit') ?></span></span>
        </button>
    </table>
</form>

<!-- Validation -->
<script type="text/javascript">
    //<![CDATA[
    var offerteForm = new VarienForm('questionForm', true);
    function questionSubmit() {
        if (offerteForm.validator.validate()) {
            new Ajax.Updater({success: 'questionForm1'}, '<?php echo $this->getUrl(); ?>productqa/index/index/',
                {
                    onComplete: function (request, json) {
                        Element.hide('questionForm');
                        Element.show('feedback-submit-button');
                    }
                });
            return false;
        }
    }
    //]]>
</script>


<br><br>




<!--Post Question & Answers-->
<ul>
    <?php /** @ var Topper_ProductQA_Model_Question $question */
    foreach ($this->getQuestions() as $questionanswer) : ?>

        <li><?php echo $questionanswer->getQuestion(); ?></li>
        <li><?php echo $questionanswer->getAnswer(); ?></li>
        <br>

    <?php endforeach; ?>
</ul>
Author: Chris van der Geld, 2017-02-01

2 answers

Ваш код сохранения должен быть в контроллере. Вы указали действие формы в виде кода блока, поэтому каждый раз, когда вы обновляете свою страницу, ваш блок будет вызываться, и это сохранит значение при обновлении. Переместите код сохранения в контроллер

 0
Author: BornCoder, 2017-02-01 09:15:49

У вас есть эта строка в вашем шаблоне <form id="questionForm" method="post" action="<?php echo $this->getFormQuestions() ?>">.
Поэтому, когда форма отображается, вызывается метод getFormQuestions. И это метод, который вставляет данные в вашу базу данных.

 0
Author: Marius, 2017-02-01 09:15:59