Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


eoLithic

Recommended Posts

Привет.

 

У меня возникла проблема. Я создал абсолютно новый шаблон в 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 = "[email protected]";
/* Создаем новую переменную, присвоив ей значение */
$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 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.