PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 4
romants Отправлено: 14 Марта, 2016 - 00:56:17 • Тема: Загрузка файла на сервер через input с помощью Jquery и Ajax • Форум: Работа с файловой системой и файлами

Ответов: 6
Просмотров: 1546
Шмайсер пишет:
Быть может, надо так


Результат тот же. Говорит что размер файла 0. Точнее само значение, полученное filesize($_FILES['userfile']), почему-то пустое, по этому выводит 0 в моем скрипте.
romants Отправлено: 13 Марта, 2016 - 11:24:03 • Тема: Загрузка файла на сервер через input с помощью Jquery и Ajax • Форум: Работа с файловой системой и файлами

Ответов: 6
Просмотров: 1546
Задача: с помощью Jquery и Ajax отправить на сервер файл, выбранный через input.

Имеется код input-a (не находится в <form>):
CODE (html):
скопировать код в буфер обмена
  1. <input type="file" class="inputFileForSend" name="userpic" onchange="uplodeFileForUserMessage(this)" />


Код Jquery+Ajax, получающие значение input-a и отправляющие на сервер:
CODE (javascript):
скопировать код в буфер обмена
  1. function uplodeFileForUserMessage(element)
  2. {
  3.   if($('.inputFileForSend').val() != '')
  4.   {
  5.     console.log(element.files);
  6.     var fd = new FormData();
  7.     fd.append("userpic", element.files[0]);
  8.     $.ajax({
  9.       url: 'upload-file',
  10.       type: "POST",
  11.       data: fd,
  12.       processData: false,
  13.       contentType: false,
  14.       success: function(data)
  15.       {
  16.         alert(data);
  17.       }
  18.     });
  19.   }
  20. }


PHP код на стороне сервера:
PHP:
скопировать код в буфер обмена
  1. if($_FILES['userfile']['size'] == 0)
  2. {
  3.   echo '0';
  4. }
  5. else
  6. {
  7.   echo '1';
  8. }


console.log(element.files); в консоли выдает то, что указано на приложенном изображении.

Проблема: после выбора файла и срабатывания клиентского скрипта сервер присылает 0, т.е. размер отправляемого файла равен 0.

С чем это может быть связана и как исправить?
romants Отправлено: 12 Февраля, 2016 - 11:11:09 • Тема: Проблема при вставке данных в твблицу с помощью PDO • Форум: Работа с СУБД

Ответов: 2
Просмотров: 1199
Мелкий пишет:
romants пишет:
$pdo->exec("set names utf8");

Пользуясь случаем, так делать дважды неправильно.
charset надо указывать в dsn параметром charset
И второй момент, в mysql кодировка utf8 не является на самом деле UTF8, поддержка неполная, только 3 байта.
Нужно использовать utf8mb4, доступную с 5.5.(чего-то), вот она может обрабатывать весь юникод. В этом последнем четвёртом байте расположены ныне популярные пиктограммы emoji

Обратно к теме.
Укажите в коде явно PDO::ATTR_ERRMODE в PDO::ERRMODE_EXCEPTION. Дефолтно вполне может стоять даже ERRMODE_SILENT и ошибок тогда не будет видно.


Спасибо за помощь.

Установку кодировки вернул на правильное место (сделал как было в указанном коде, пытаясь исправить ошибку).
Базу перекодировал.
Ошибка PDO высветилась. В итоге оказалось что поле domain было в индексе и по этому не уникальное значение не вставлялось.
romants Отправлено: 11 Февраля, 2016 - 15:53:58 • Тема: Проблема при вставке данных в твблицу с помощью PDO • Форум: Работа с СУБД

Ответов: 2
Просмотров: 1199
Исходные данные.
Имеется БД (InnoDB, utf-8).
В ней есть таблица со следующими полями:
- domain_id(bigint, unsigned, auto_increment, primary)
- user_id (bigint, UNSIGNED, index)
- domain (varchar(250), utf-8)
- unique_number (varchar(250), utf-8)
- unique_number_send (tinyint, unsigned)
- domain_analysed (tinyint, unsigned)
- report_send (tinyint, unsigned)

Код подключения к БД:
PHP:
скопировать код в буфер обмена
  1. $dsn = "mysql:host=".$host.";dbname=".$dataBaseName.";";
  2. $pdo = new PDO($dsn, $user, $password);
  3. $pdo->exec("set names utf8");
  4. $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, TRUE);


Код запроса:
PHP:
скопировать код в буфер обмена
  1. $query = 'INSERT INTO domain values (?, ?, ?, ?, ?, ?, ?)';
  2. $prepareQuery = $pdoObject->prepare($query);
  3. $prepareQuery->execute(array(NULL, $userId,"$domainForInsert", "$uniqueSiteNumber", 0, 0, 0));


Типы переменных в execute:
$userId - integer
$domainForInsert - string
$uniqueSiteNumber - string

Проблема
Если сделать запрос с исходными данными, например:
PHP:
скопировать код в буфер обмена
  1. $userId = 22;
  2. $domainForInsert = 'yandex.ru';
  3. $uniqueSiteNumber = 'aaa111';

Вставка данных в БД проходит без проблем.

Если сразу после этого сделать еще один INSERT с входными данными:
PHP:
скопировать код в буфер обмена
  1. $userId = 23;
  2. $domainForInsert = 'yandex.ru';
  3. $uniqueSiteNumber = 'bbb222';

Вставка в БД не происходит.

При этом, если указать иное значение для $domainForInsert, вставка данных в БД проходит без проблем.

Проверял как на локальном серевере (Open Server), так и на vds сервере. Проблема есть и там и там.

Ошибок ни каких не выдается (при проставленных значениях вывода ошибок в момент подключения к БД + try/catch).

Типы данных, которые будут вставляться, перед вставкой проверяются и в итоге к моменту вставки в БД имею указанные типы.

С чем может быть связана указанная проблема и как ее исправить?
Заранее благодарю за помощь.

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB