Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
$DataNaborki = $_POST['DataNaborki']; //Дата формата '2017-08-08' - это поле даты $smena = $_POST['Smena']; // '1 смена' - это текстовое поле $file_name = $data_filename; // 'Naborki/20170808_1.htm' - то путь к файлу на сервере $link = mysqli_connect($host, $user, $password, "w95595it_razm") or die("Ошибка " . mysqli_error($link)); //Удалить строку со старой наборкой $query ="DELETE FROM Naborki WHERE Date='".$DataNaborki."' AND Smena='".$smena."'"; $result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link)); $query ="INSERT INTO Naborki (Date, Smena, File) VALUES ('".$DataNaborki."', '".$smena."', '".$file_name."')"; $result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link)); После выполнения запроса существующую запись не удаляет, а добавляет запись в которой поля Date и File отображены корректно, а Smena указано '1' вместо '1 смена' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 00:36 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
Код работал когда я передавал параметры через GET запрос а файл через FTP, потом я передалал код под POST запрос, файл на сервер приходит, все переменные при помощи echo получаю корректно, а в базе так как на скриншоте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 00:47 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
sserebannЗапрос перестал работатьЧто произошло 3-4 августа? Изменялись ли какие-то настройки сервера, скрипты, структура таблиц? sserebannсуществующую запись не удаляет, а добавляет запись в которой поля Date и File отображены корректно, а Smena указано '1' вместо '1 смена' Код: sql 1. два раза для начала. Показывайте тексты запросов здесь вместе с DDL таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 00:55 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
Да, и ещё почему-то в Вашем коде отсутствует SET NAMES. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 00:59 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
vkle, string(63) "DELETE FROM Naborki WHERE Date='2017-08-04' AND Smena='1 смена'"¶ string(98) "INSERT INTO Naborki (Date, Smena, File) VALUES ('2017-08-04', '1 смена', 'Naborki/20170804_1.htm')"¶ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 01:03 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
vkle, 3-4 августа ничего не менялось, все изменения произвел сегодня. Я передавал параметры через GET запрос а файл через FTP (все работало), потом я передалал код под POST запрос и вот что получилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 01:09 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
vkle, Это полный код скрипта <? $submit = ( isset($_POST['submit']) ) ? intval($_POST['submit']) : 0; $some_field = ( isset($_POST['some_field']) ) ? htmlspecialchars($_POST['some_field']) : ''; if ( !empty($submit) ) { //Здесь работаем с содержимым переданного файла. $uploadFile = $_FILES['data']; $tmp_name = $uploadFile['tmp_name']; if ( !is_uploaded_file($tmp_name) ) { die('Ошибка при загрузке файла'); } else { //Считываем файл в строку $data = file_get_contents($tmp_name); //Декодируем данные $data = base64_decode($data); //Теперь нормальный файл можно сохранить на диске $data_filename = 'Naborki/'.$_FILES['data']['name']; if ( !empty($data) && ($fp = @fopen($data_filename, 'wb')) ) { @fwrite($fp, $data); @fclose($fp); //добавление записи в базу SQL $DataNaborki = $_POST['DataNaborki']; $smena = $_POST['Smena']; $file_name = $data_filename; //подключение к базе $host = 'localhost'; $user = 'w95595it_razm'; $password = 'gvlkKAQHz7KX40PkAl'; $database = 'w95595it_razm'; $link = mysqli_connect($host, $user, $password, "w95595it_razm") or die("Ошибка " . mysqli_error($link)); mysql_query("SET NAMES 'cp1251'"); mysql_query("SET CHARACTER SET 'cp1251'"); //Удалить строку со старой наборкой $query ="DELETE FROM Naborki WHERE Date='".$DataNaborki."' AND Smena='".$smena."'"; var_dump($query); $result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link)); $query ="INSERT INTO Naborki (Date, Smena, File) VALUES ('".$DataNaborki."', '".$smena."', '".$file_name."')"; var_dump($query); $result = mysqli_query($link, $query) or die("Ошибка " . mysqli_error($link)); //очищаем результат mysqli_free_result($result); mysqli_close($link); } unset($data); } } ?> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 01:17 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
sserebann, Запросы сами по себе корректны. Однако, если верить Вашей картинке, проблема произошла после строки с id=50, которая характеризуется как раз 4 августа. Строка с id=50 содержит "1 смена", а в строке с id=51 за ту же дату - уже "1". sserebann$link = mysql i _connect sserebannmysql_query("SET NAMES 'cp1251'");Внимательнее печатайте буквы в именах функций! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 01:22 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
vkle, после строки с id 50 я скопировал код из рабочего скрипта с GET запросом в файл скрипта с POST запросом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 01:27 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
vkle, Спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 02:23 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
Проблема не решена. Может ошибка в настройках таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 15:48 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
Может. Но Вы же не желаете показать DDL проблемной таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 16:57 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
vkle, Это DDL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 17:20 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
Данные я передаю из 1с может там проблема? Это код из 1с Процедура ОтправитьФайлНаСервер(ИмяФайл, ПутьИИмя, ДатаНаборки, Смена) Экспорт //Подготовка переменных Boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", ""); //Определяем имя файла ответа от веб-сервера ИмяФайлаОтвета = КаталогВременныхФайлов() + "answer.tmp"; //Какой-то ранее созданный архив ИмяФайлаДанных = ПутьИИмя; //ЭТО МОЙ ФАЙЛ "data.zip" //Закодируем содержимое файла по Base64, то есть преобразуем его к URL-неактивному виду. СодержимоеZIP = Base64Строка(Новый ДвоичныеДанные(ИмяФайлаДанных)); //Проверим размер кодированного файла. ДопустимыйРазмерФайлаВБайтах = 2097152; // это 2Мб (1Мб = 1048576 байт) Если СтрДлина(СодержимоеZIP) > ДопустимыйРазмерФайлаВБайтах Тогда //Какие-то ваши действия, возможно Возврат; КонецЕсли; ИмяФайлаОтправки = КаталогВременныхФайлов() + "post.txt"; ФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста.ANSI, Символы.ПС, ЛОЖЬ); //Определяем раздел двоичных данных ФайлОтправки.ЗаписатьСтроку("--" + Boundary); ФайлОтправки.ЗаписатьСтроку("Content-Disposition: form-data; name=""data""; filename=""Naborki/" + ИмяФайл + """"); //С таким же успехом в Content-Type можно указать application/x-octet-stream ФайлОтправки.ЗаписатьСтроку("Content-Type: text/html" + Символы.ПС + Символы.ПС); ФайлОтправки.ЗаписатьСтроку(СодержимоеZIP); ФайлОтправки.ЗаписатьСтроку("--" + Boundary); //Определяем раздел для каких либо других POST-данных, например содержимого полей виртуальной HTML-формы. ФайлОтправки.ЗаписатьСтроку("--" + Boundary); //Соответствует HTML-тэгу input type="submit" name="submit" value="Submit" / ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""submit""" + Символы.ПС); ФайлОтправки.ЗаписатьСтроку("1"); ФайлОтправки.ЗаписатьСтроку("--" + Boundary); ФайлОтправки.ЗаписатьСтроку("--" + Boundary); //Соответствует HTML-тэгу //input type="text" name="some_field" value="Some text" / ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""DataNaborki""" + Символы.ПС); ФайлОтправки.ЗаписатьСтроку("" + Формат(ДатаНаборки, "ДФ=yyyy-MM-dd")); ФайлОтправки.ЗаписатьСтроку("--" + Boundary); ФайлОтправки.ЗаписатьСтроку("--" + Boundary); ФайлОтправки.ЗаписатьСтроку("Content-disposition: form-data; name=""Smena""" + Символы.ПС); Если Смена = Перечисления.Смена.Первая Тогда ФайлОтправки.ЗаписатьСтроку("1 смена"); Иначе ФайлОтправки.ЗаписатьСтроку("2 смена"); КонецЕсли; ФайлОтправки.ЗаписатьСтроку("--" + Boundary); ФайлОтправки.Закрыть(); ЗаголовокHTTP = Новый Соответствие(); //При необходимости зададим Referer, например таким образом СтрокаСоединения = СтрокаСоединенияИнформационнойБазы(); СерверИсточник = НСтр(СтрокаСоединения, "Srvr") + НСтр(СтрокаСоединения, "Ref"); ЗаголовокHTTP.Вставить("Referer", СерверИсточник); //Укажем формат данных Content-Type ЗаголовокHTTP.Вставить("Content-Type", "multipart/form-data; boundary=" + Boundary); //Укажем длину POST-запроса Content-Length ФайлОтправки = Новый Файл(ИмяФайлаОтправки); РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер()); ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки); Сервер = "w95595it.beget.tech"; //Естественно, следует указать свой адрес. Порт = "80"; //Это общепринятый порт. Возможно, для вашего сервера применяется другой. Конкретное значение уточните у хостера. //ИспользоватьПрокси - какая-то логическая переменная, может быть значение флажка на форме или переключатель ИспользоватьПрокси = Ложь; Если ИспользоватьПрокси Тогда Прокси = Новый ИнтернетПрокси; Прокси.НеИспользоватьПроксиДляЛокальныхАдресов = Истина; Прокси.Пароль = "ПарольПрокси"; // укажите своё значение Прокси.Пользователь = "ПользовательПрокси"; // укажите своё значение НТТР = Новый HTTPСоединение(Сервер, Порт, , , Прокси); Иначе НТТР = Новый HTTPСоединение(Сервер, Порт); КонецЕсли; АдресСкрипта = "some_script.php"; //Естественно, следует указать имя своего скрипта. Попытка НТТР.ОтправитьДляОбработки(ИмяФайлаОтправки, АдресСкрипта, ИмяФайлаОтвета, ЗаголовокHTTP); Исключение //Пример обработки ошибки соединения. #Если Клиент Тогда Сообщить("Неудачная попытка соединения: " + ОписаниеОшибки()); #Иначе ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Неудачная попытка соединения: " + ОписаниеОшибки()); #КонецЕсли Возврат; КонецПопытки; //Удалим файл отправки POST-запроса. Больше он нам не нужен. УдалитьФайлы(ИмяФайлаОтправки); //АНАЛИЗИРУЕМ ОТВЕТ ФайлОтвета = Новый Файл(ИмяФайлаОтвета); Если ФайлОтвета.Существует() Тогда ТекстОтвета = Новый ТекстовыйДокумент(); ТекстОтвета.Прочитать(ИмяФайлаОтвета); Если ТекстОтвета.КоличествоСтрок() > 0 Тогда ОтветСервера = ТекстОтвета.ПолучитьТекст(); Сообщить(ОтветСервера); #Если Клиент Тогда Сообщить(ОтветСервера); #КонецЕсли Иначе #Если Клиент Тогда Сообщить("Отправка файла на сервер: Получен пустой ответ сервера."); #Иначе ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Получен пустой ответ сервера."); #КонецЕсли КонецЕсли; УдалитьФайлы(ИмяФайлаОтвета); Иначе #Если Клиент Тогда Сообщить("Отправка файла на сервер: Ответ сервера не получен."); #Иначе ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Ответ сервера не получен."); #КонецЕсли КонецЕсли; КонецПроцедуры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 17:34 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
vkle, Нашел!!! Заменил строку в php скрипте //$smena = $_POST['Smena']; $smena = iconv('WINDOWS-1251', 'UTF-8', $_POST['Smena']); Все заработало!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 20:30 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
sserebannЭто DDL?Нет, но эта наскальная живопись картинка дает некоторое представление. По крайней мере, из картинки видно, что таблица ожидает данные в кодировке UTF-8. И оно никак не согласуется с Вашимsserebann"SET NAMES 'cp1251'" Рано делать выводы, но оно как-то очень похоже на банальный бардак с кодировками. Вы можете точно сказать, какая кодировка данных должна быть в той или иной точке хранения и передачи данных - в одинэске, в полях запроса POST на передаче/приеме, в таблице, где-то ещё, где эта таблица будет использоваться? Судя по sserebannФайлОтправки = Новый ЗаписьТекста(ИмяФайлаОтправки, КодировкаТекста. ANSI , Символы.ПС, ЛОЖЬ);иsserebann"SET NAMES ' cp1251 '"данные из одинэски до таблицы `Naborki` должны бегать в кодировке cp1251 (она же windows-1251). Однако, это лишь мое предположение и оно никак не отражает Вашу идею. По крайней мере, по-прежнему, не понятно, почему в таблице UTF-8. Если таблица не менялась (была как и сейчас utf-8) и SET NAMES так же не работал (дальше объясню, почему), тогда не вполне понятно, почему смена метода отправки с GET на POST привела к изменению кодировки данных с utf-8 (при использовании GET) на cp1251 (в POST). Возможно, это какая-то фича одинэскиных компонентов или нужно там где-то явно указать кодировку при передаче или нужно было конвертить ещё при записи во временный файл - сие мне неведомо. Думаю, есть смысл почитать одинэскину документацию по этой теме. Или, может быть, Вы недоговариваете о каких-то ещё изменениях. Не ясно, например, почему коннект к СУБД и дальнейшая работа делается с использованием mysqli, а инициализация соединения использует старое расширение mysql (без i). Это совершенно разные инструменты. Хотя, решают они одни и те же задачи, но друг друга вообше не понимают (более того, в современных версиях PHP расширение mysql отсутствует). Естественно, такая инициализация не сработает. Есть даже вполне объяснимые причины почему без инициализации вчера работало, а сегодня уже нет. Например, изменение дефолтовых настроек СУБД. sserebannНашел!!! Заменил строку в php скрипте //$smena = $_POST['Smena']; $smena = iconv('WINDOWS-1251', 'UTF-8', $_POST['Smena']); Вполне логично для данного конкретного случая. sserebannВсе заработало!!!Рад за Вас, но с кодировками таки разберитесь. Хотя бы, чтоб не удивляться в будущем вопросикам и крякозябрикам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 02:19 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
vkle, Спасибо что уделили мне время, я очень благодарен. Подскажите пожалуйста литературу которая может помочь разобраться с кодировкой. Я ничего не пойму, если честно. В 1с указана кодировка ANSI, есть еще кодировка файла php, кодировка таблицы mySql. Как это все упорядочить? Вы правильно заметили что алгоритм-то работает а разобраться я не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2017, 19:34 |
|
||
|
Запрос перестал работать
|
|||
|---|---|---|---|
|
#18+
sserebann, Про кодировки серьезную литературу не подскажу. Да хотя бы с Википедии можно начать. По-простому, один и тот же символ в разных кодировках обозначается разными байтами или последовательностью байт (в многобайтовых кодировках). Соответственно, один и тот же байт в разных кодировках обозначает разные символы. Это приводит к крякозябрикам. В каких-то кодировках некоторых символов вообще не существует. В каких-то кодировках не существует некоторых байтов. Это и может приводить к потере символов. sserebannВ 1с указана кодировка ANSI, есть еще кодировка файла php, кодировка таблицы mySql. Как это все упорядочить?Упорядочивать - в соответствии с проектом и некоторой логикой. Для каждого случая она может быть индивидуальной. Ну, хранятся данные в одинэске в кодировке cp1251 - и пусть хранятся. Куда-то они экспортируются. Допустим, на сайт. Сперва данные как-то попадают в базу данных, потом на страничке сайта отображаются. В какой кодировке сайт должен работать? Допустим, в utf-8. Логично предположить, что и в таблицах данные должны храниться в этой же кодировке. И в скриптах и шаблонах тоже удобнее её использовать. В таком случае не придется выполнять преобразования по каждому чиху. Достаточно конвертнуть "чужеродные" данные один раз. Остается разобраться, в каком месте кодировка должна быть преобразована - в одинэске перед передачей или в скрипте сайта после приема данных. Это не принципиально в общем случае. Важно определить, где именно будут выполняться преобразования. PHP имеет инструменты преобразования кодировок. Имеет ли такие инструменты одинэска - не знаю (а ковырять документацию в третьем часу ночи мне лень). Поэтому, исходя из моих знаний, лично я сделал бы преобразование в скрипте сайта на PHP. Однако, в инструментарии одинэски Вы разбираетесь лучше меня, и тогда, возможно, в конкретном Вашем случае будет удобнее сразу отдавать данные на сайт в utf-8. В общем, подход тут индивидуальный. Если какие-то данные с сайта (например, заказы клиентов) должны отправляться обратно в одинэску - тогда следует сделать обратное преобразование кодировки на той же стороне (ну, с моими знаниями я бы конвертил в пхпшном скрипте и отдавал бы одинэске данные уже в cp1251). Ну а если сайт должен работать в кодировке cp1251 - тогда, соответственно, никаких преобразований не требуется. Вот как-то так, если коротко. Хотя и никто не запрещает хранить одну табличку в отличной от других кодировке. И работать с таким зоопарком можно. Сильно сложнее, чем в случае с однородной кодировкой, но "при помощи молотка и какой-то матери" можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2017, 02:12 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39504316&tid=1830486]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 15ms |
| total: | 155ms |

| 0 / 0 |
