@Valentine13

Почему перестала работать форма подписки после обновления представлений на сайте?

Дано: проводила редизайн сайта, в основе которого лежит mvc-модель с каким-то самописным php-фрейморком. В бэкенде не сильна, потому встряла намертво. Помогите.
Есть простейшая форма
<div id="shadow"></div>    
<div id="subscriber_popup_after_submit">
         <div id="popup_close">X</div>
         <h2>Поздравляем! Вы были успешно подписаны</h2>
</div>
<form id="form_add_sellers" method="post">                  
      <input placeholder="E-mail" type="text" name="email" id="subscription_email">
      <button id="subscriber_reg_submit" type="submit">ПОЛУЧАТЬ</button>
</form>

Есть скрипт, который забирает с формы email и должен отправить его на запись в базу данных...
$(document).ready(function () {
    // Добавление нового подписчика
    $('#form_add_sellers').on('submit', function (e) {
        e.preventDefault();
        var $email = $('#subscription_email').val();
        $.post('/?func=add', {email: $email}, function (data) {
            console.log(data);
            if (data == 1) {
                $('#shadow').show();
                $('#subscriber_popup_after_submit').show();
            }else if (data == 2) {
                alert('Некорректно заполнено поле email');
            }else if (data == 0){
                alert('Пользователь с таким email уже существует');
            }                               
        }, 'text').fail(function () {
            alert('Ошибка! Данные не сохранены, перезагрузите страницу и попробуйте снова!');
        });
    });
    $('body').on('click', '#popup_close, #shadow', function() {
        $('#shadow').hide();
        $('#subscriber_popup_after_submit').hide();
    });
});

Я обновляла на сайте html-шаблоны и таблицы стилей, потому скрипт был написан уже до меня. Но после обновления он перестал почему-то работать - всегда генерируется только алерт с ошибкой. Ни в файле index.php, ни в файлах app-model.php | app-controller.php, на основе которых строится костяк сайта, я ничего не нашла, чтобы помогло понять, на что ссылается этот самый func=add
В папке с моделями нашелся файл subscriber.php, который, похоже, делает то, что нужно...
<?php
require_once 'vendor/phpfastacache/phpfastcache_v2.1_release/phpfastcache/phpfastcache.php';
phpFastCache::setup("storage","auto");
class Subscriber extends AppModel {  
    public $name = 'subscribers';    
    public function insertIntoSubscribers()
    {
        if($this->api->post->data){           
            $data = $this->api->post->data;
            $data['name'] = '';            
            try
            {
                if (! preg_match( '/^[-0-9a-z_\.]+@[-0-9a-z^\.]+\.[a-z]{2,4}$/i', $data['email'])){
                    echo 2;die;
                }
                $this->insert($this->name, $data);
                echo 1; die;
            }
                // Исключение выбрасывается в случае неуникальности e-mail, это контролируется БД 
            catch (\Exception $e){
                echo 0; die;
            }
        }
    }    
    public function getSubscribersList()
    {
        return $this->getAll("SELECT * FROM " . $this->name);
    }
}


Внимание, вопрос: как и куда мне самой дописать те пару строк кода, которые свяжут мою форму, скрипт и вот этот subscriber? Родительский класс AppModel описан в файле app-model.php, и видимо, там как-то надо инициировать обращение к subscriber при обработке события POST? Но вот как именно это правильно прописать, я не понимаю. Спасите!
  • Вопрос задан
  • 132 просмотра
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
В папке с моделями нашелся файл subscriber.php, который, похоже, делает то, что нужно...
осталось найти контроллер в котором вызывается метод этой модели. Ну и поменять там логику/поля...
Ответ написан
@Anonimmus
А в консоли нет ошибок? И что показывает лог?
Пробуйте сменить jquery на 3.6.0 насколько мне известно. .on не поддерживается в старых версиях.

Jquery привязывается по классу тегу и id раз уж вы сменили html разметку, возможно и снесли нужный class/id/tag

И раз условие не проходит проверьте smtp и правильность логики заполнения полей. Другие формы ведь отправляют данные? Без логов увы никак....
Пропишите проверку переменных какие значения передаются а какие нет
Например так: alert($email);

Код ниже не получает данных отсюда и алерт об ошибке.
$.post('/?func=add', {email: $email}, function (data) {
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы