Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Записать данные из формы в SQL


Recommended Posts

Привет всем!

Изучаю активно opencart возможности и сейчас возникла задача сделать таблицу с данными.

Могу вывести данные из таблицы без проблем, а вот записать туда никак не получается.

 

Могли бы подсказать, что я делаю не так.

 

У меня в админке есть, добавленный пункт меню, где есть форма для добавления данных. Они отображаются и могу ввести данные и нажать отправить, но они не добавляются.

 

Страница отображается с admin/view/template/common/lepingud.twig

Контроллер берётся с admin/controller/common/lepingud.php

 

Для попытки добавить данные используются следующие данные:

Файл контроллера, который будет отвечать за обработку данных формы `admin/controller/extension/form.php`.

<?php
class ControllerExtensionForm extends Controller {
  public function index() {
    $this->load->language('extension/form');

    $data['heading_title'] = $this->language->get('heading_title');
    $data['text_success'] = $this->language->get('text_success');

    if ($this->request->server['REQUEST_METHOD'] == 'POST') {
      $this->load->model('extension/form');

      $this->model_extension_form->addFormData($this->request->post);

      $this->session->data['success'] = $data['text_success'];

      $this->response->redirect($this->url->link('extension/form'));
    }

    $data['breadcrumbs'] = array();

    $data['action'] = $this->url->link('extension/form');
    $data['heading_title'] = $this->language->get('heading_title');

    $data['entry_name'] = $this->language->get('entry_name');
    $data['entry_email'] = $this->language->get('entry_email');
    $data['entry_message'] = $this->language->get('entry_message');

    $data['button_submit'] = $this->language->get('button_submit');

    $this->response->setOutput($this->load->view('extension/form', $data));
  }
}


 

Файл модели, который будет добавлять данные из формы в базу данных MySQL.  `admin/model/extension/form.php`.

php
<?php
class ModelExtensionForm extends Model {
  public function addFormData($data) {
    $sql = "INSERT INTO " . DB_PREFIX . "form_data SET name = '" . $this->db->escape($data['name']) . "', email = '" . $this->db->escape($data['email']) . "', message = '" . $this->db->escape($data['message']) . "'";
    $this->db->query($sql);
  }
}


Файл представления для формы. admin/view/template/common/lepingud.twig

{% if success %}
    <p class="alert alert-success">{{ success }}</p>
{% endif %}

<form action="{{ action }}" method="post">
  <div class="form-group">
    <label>{{ entry_name }}</label>
    <input type="text" name="name" value="{{ name }}" class="form-control" required>
  </div>
  <div class="form-group">
    <label>{{ entry_email }}</label>
    <input type="email" name="email" value="{{ email }}" class="form-control" required>
  </div>
  <div class="form-group">
    <label>{{ entry_message }}</label>
    <textarea name="message" class="form-control" required>{{ message }}</textarea>
  </div>
  <div class="form-group text-center">
    <button type="submit" class="btn btn-primary">{{ button_submit }}</button>
  </div>
</form>

 

Файл перевода проблем, думаю, не вызовет, указывать не буду.

 

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

Заранее спасибо.

Link to comment
Share on other sites


15.04.2023 в 17:43, Yurasic сказал:
$data['action'] = $this->url->link('extension/form');

Урл не правильно формируется - нужно еще токен указывать.

$data['action'] = $this->url->link('extension/form', 'user_token=' . $this->session->data['user_token'], true);

 

Link to comment
Share on other sites

Спасибо за Ваш совет!

 

Я добавил информацию на страницу, но к сожалению, ничего не изменилось. Всё так же.

Link to comment
Share on other sites


$this->response->setOutput($this->load->view('extension/form', $data));

Кстати, тут написал ошибочно, тут должно быть

 

$this->response->setOutput($this->load->view('common/lepingud', $data));

 

Изменение в программе, также, не дало результата.

Link to comment
Share on other sites


15.04.2023 в 20:24, Yurasic сказал:

Я добавил информацию на страницу, но к сожалению, ничего не изменилось. Всё так же.

проверьте что приходит по POSTу

и закоментируйте временно редирект, а то не увидите что в ПОСТе

if ($this->request->server['REQUEST_METHOD'] == 'POST') {
      $this->load->model('extension/form');
var_dump($this->request->post);
      //$this->model_extension_form->addFormData($this->request->post);

      $this->session->data['success'] = $data['text_success'];

      //$this->response->redirect($this->url->link('extension/form'));
    }

 

Link to comment
Share on other sites

Подскажите, пожалуйста, в каком файле и как лучше проверить post?!

Спасибо

Link to comment
Share on other sites


15.04.2023 в 23:57, Yurasic сказал:

Подскажите, пожалуйста, в каком файле и как лучше проверить post?!

 

там же в указанном Вашем файле - var_dump($this->request->post);

 

15.04.2023 в 17:43, Yurasic сказал:

Файл контроллера, который будет отвечать за обработку данных формы `admin/controller/extension/form.php`.

 

я даже показал где и как (можно и модель временно закоментить)

 

15.04.2023 в 21:29, vier сказал:

и закоментируйте временно редирект, а то не увидите что в ПОСТе

if ($this->request->server['REQUEST_METHOD'] == 'POST') {
      $this->load->model('extension/form');
var_dump($this->request->post);
      //$this->model_extension_form->addFormData($this->request->post);

      $this->session->data['success'] = $data['text_success'];

      //$this->response->redirect($this->url->link('extension/form'));
    }

 

 

Link to comment
Share on other sites

Спасибо Вам за отзывчивость!

Справился сам. Переделал структуру файлов и всё работает. 

Link to comment
Share on other sites


В 16.04.2023 в 05:39, Yurasic сказав:

Спасибо Вам за отзывчивость!

Справился сам. Переделал структуру файлов и всё работает. 

пожалуйста.

указали бы, что не так было в Вашей структуре файлов.

ведь возможно кому-то ещё придется столкнутся с подобной проблемой...

Link to comment
Share on other sites

Дело в том, что пункт меню в админке я создал в common/lepingud, а код работы программы я хотел вставить в extension/form, но я не умею это делать правильно. поэтому я создал модель и контроллер в common/lepingud, чтобы совпадало с twig расположением и тогда всё заработало.

Link to comment
Share on other sites


Posted (edited)

Но у меня сейчас возникла другая сложность.

Я использую одно и тоже модальное окно для добавления и редактирования SQL. Сейчас у меня работает добавление, однако редактирование я не знаю как добавить.

Как я понимаю логику, мне нужно создать переменную в twig (Если значения редактируются, то дать ей значение 1, если добавляются, то значение 0). А уже в контроллере, сделать проверку, если значение переменной в twig 0, тогда выполнить в модели функцию добавления, а если 1, то выполнить в модели функцию исправления. В twig это работает и значение присваивается верное.

Но я не понимаю, как передать переменную из twig в контроллер без нажатия кнопки. Наоборот понимаю, а вот в таком направлении нет.

 

Есть мысли, как это лучше сделать?!

Спасибо

Edited by Yurasic
Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.