Задать вопрос
Joannes
@Joannes
html, css, js, angular, bootstrap

Как в codeigniter при отправке формы сначала загрузить файл аватара а потом передать его данные в модель?

Привет всем монстрам php
Сразу скажу что опыт не большой. За этим и обращаюсь к опытным разработчикам.

Я пишу свой маленький проект на codeigniter
Загрузил библиотеку ion auth для системы авторизации.
Хочу сделать при регистрации добавление аватара. В общем я то все сделал, добавил поле во вьюхе, через аякс пост запрос которые отправляет все данные формы.

Беда в том, что пост запрос ссылается на ту же страницу в контроллере. Т.е. я нахожусь на
/auth/create_user
Соответственно запрос ведет туда же
$.ajaxFileUpload({
                    url 			:'/auth/create_user/',
                    secureuri		:false,
                    fileElementId	:'avatar',
                    dataType		: 'json',
                    data			: {
                        'first_name'			: $('#first_name').val(),
                        'last_name'				: $('#last_name').val(),
                        'email'				    : $('#email').val(),
                        'password'				: $('#password').val(),
                        'password_confirm'		: $('#password_confirm').val()
                    },
                    success	: function (data, status)
                    {
                        if(data.status != 'error')
                        {
                            $('#files').html('<p>Reloading files...</p>');
                            refresh_files();
                            $('#title').val('');
                        }
                        alert(data.msg);
                    }
                });


В этом create_user контроллере обрабатываю данные и отправляю в модель для записи в бд. Но когда я отправляю форму, данные о загрузке файла еще нету и по этому отправляется значение NULL от сюда и ошибка:
A Database Error Occurred

Error Number: 1048

Column 'avatar' cannot be null

INSERT INTO `users` (`username`, `password`, `email`, `group_id`, `ip_address`, `avatar`, `created_on`, `last_login`, `active`) VALUES ('ivan damaskin123', '694249d6babe4d1fee2b914e27cfd0c1452cc91f', 'testcdfd@test.ru', '2', '127.0.0.1', NULL, 1455366325, 1455366325, 1)

Filename: X:\home\bl.ls\www\system\database\DB_driver.php

Line Number: 331


Хотя в базе записьс оздается и прописывается даже путьк файлу, т.е. все работает, но база изначально при проверке получает NULL для ячейки avatar, но потом фал грузится и данные все записываются как надо, но ошибка остается -(

Надеюсь я не сильно запутал и кто то сможет разобраться.
  • Вопрос задан
  • 374 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Joannes
@Joannes Автор вопроса
html, css, js, angular, bootstrap
Все очень просто оказалось на самом деле.
Сначала выполняем загрузку картинки, затем условие, если загружена то передаем данные в модель где у нас идет запись этих данных в бд причем туда же передаем и название файла которое у нас успешно уже загрузилось, если не загрузили то присваиваем переменно, которая должна была содержать url картинки, любое значение, например default.jpg и теперь у нас не передается null а по любому какое то значение будет одно из двух -) Кароче вывод такой, прежде чем писать код надо в голове или на бумаге по шагам все выстроить по шагам -)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
ну, с CI не работал, но насколько я помню это MVC, идем в конроллер, смотрим где принимается параметр пути файла, правим его на принудительно какое-то значение, типа "_", потом отрабатывает загрузка файла и пишет туда что надо. Или в базе правим тип поля - убираем notNull.
Это изи вэй, как правильно исходя из парадигмы КИ - это вопрос к знатокам, а так - костылик будет работать )
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы