Перейти к содержанию
eoLithic

Как отправить данные из формы в контроллер?

Рекомендуемые сообщения

Привет.

 

У меня возникла проблема. Я создал абсолютно новый шаблон в tempate/common. В этом шаблоне у меня хранится небольшая форма.

Код шаблона: (да-да, во всем шаблоне у меня только этот код)



<!doctype html>

<div style="width: 723px;">
<form action="<?php echo $action; ?>" method="post">
Ваше имя: <input type="text" name="your_name"><br>
Ваше e-mail: <input type="text" name="email"><br>
<input type="submit" value="Заказать">
</form>
</div>

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

Код контроллера: 

<?php  
class ControllerCommonOrderForm extends Controller {
	public function index() {
$this->document->setTitle($this->config->get('config_title'));
$this->document->setDescription($this->config->get('config_meta_description'));
$this->data['action'] = $this->url->link('common/orderForm');
$this->data['heading_title'] = $this->config->get('config_title');

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/orderForm.tpl')) {
$this->template = $this->config->get('config_template') . '/template/common/orderForm.tpl';
} else {
$this->template = 'default/template/common/orderForm.tpl';
}

$this->children = array(
'common/column_left',
'common/column_right',
'common/content_top',
'common/content_bottom',
'common/footer',
'common/header'
);

$this->response->setOutput($this->render());


/* Input data check */
$your_name = $this->config->get('your_name');
echo $your_name;
$email = htmlspecialchars($_POST["email"]);
/* Устанавливаем e-mail адресата */
$myemail = "the.eolithic@gmail.com";
/* Создаем новую переменную, присвоив ей значение */
$message_to_myemail = "Здравствуйте!
Вашей контактной формой было отправлено сообщение!
Имя отправителя: $your_name
E-mail: $email
Конец";
/* Отправляем сообщение, используя mail() функцию */
$from  = "From: $yourname <$email> \r\n Reply-To: $email \r\n";
mail($myemail, $message_to_myemail, $from);
?>
<p>Ваше сообщение было успешно отправлено!</p>
<p>На <a href="index.php">Главную >>></a></p>
<?php
/* Если при заполнении формы были допущены ошибки сработает
следующий код: */
function check_input($data, $problem = "")
{
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    if ($problem && strlen($data) == 0)
    {
        show_error($problem);
    }
    return $data;
}
function show_error($myError)
{
    ?>
    <html>
    <body>
    <p>Пожалуйста исправьте следующую ошибку:</p>
    <?php echo $myError; ?>
    </body>
    </html>
    <?php
    exit();
}
}
}
?>

Я был бы очень благодарен тому, кто сумеет мне помочь.

Спасибо за внимание.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

во первых,$this->data['action'] = $this->url->link('common/orderForm'); я бы изменил на отдельную функцию, напр. $this->data['action'] = $this->url->link('common/orderForm/catch');, которая и будет заниматься обработкой полученных данных с формы.

во вторых, сделал бы эту функцию отдельной от индекса...

public function catch() {
   if ($this->request->server['REQUEST_METHOD'] == 'POST') {
     $mail = new Mail();
$mail->protocol = $this->config->get('config_mail_protocol');
$mail->parameter = $this->config->get('config_mail_parameter');
$mail->hostname = $this->config->get('config_smtp_host');
$mail->username = $this->config->get('config_smtp_username');
$mail->password = $this->config->get('config_smtp_password');
$mail->port = $this->config->get('config_smtp_port');
$mail->timeout = $this->config->get('config_smtp_timeout');
$mail->setTo($this->config->get('config_email'));
$mail->setFrom($this->request->post['email']);
$mail->setSender($this->request->post['name']);
$mail->setSubject('Здравствуйте!Вашей контактной формой было отправлено сообщение!');
$mail->setText('Имя отправителя:'. $this->request->post['name'].'E-mail:'$this->request->post['email']);
$mail->send();
$this->redirect($this->url->link('common/orderForm'));
    }
}
 

 

Функцию валидации можете прикрутить к проверке на пост запрос, но логика примерно такая...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.