![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| VotVam |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 17.3.2007 Репутация: нет Всего: нет |
Ситуация такова. Есть стандартный скрипт SMF по открытию топиков в форуме. Добавил в него одно поле "descr" и полностью продублировал его свойства и поведение с поля "subject", т.к. назначения сходны (как здесь - тема и описание темы). На локали проверяю - все работает как часы. Ставлю на сервер - начинают сыпать ошибки. Если в общих чертах, то кавычки в поле "descr" приводят к появлению двойных обратных слешей, что ведет к ошибке записи в базу. Убираю двойные слеши stripslashes(), после этого addslashes() как бы "не видит" кавычки и опять ошибка. Кодировка на сервере выствавлена принудительно Windows 1251.
Вопрос: откуда берется двойной слеш возле двойной кавычки именно на сервере и как с этим бороться? Повторюсь: на локали все летает. |
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Двойной слеш берется от волшебных кавычек.
При этом ошибки быть не должно, ни в том, ни в другом случае. Следовательно, виновата неправильная обработка входящих данных. Подробнее сказать нельзя, поскольку кое-кто не сообразил сообщить, какая именно ошибка возникает, и в каком виде данные попадают в запрос. |
|||
|
||||
| VotVam |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 17.3.2007 Репутация: нет Всего: нет |
magic - все три off, да я еще и в хтакцесс их придушил. Скрипт вылетает с ошибкой hack... и т.д., но это искать лениво - что именно срабатывает . А запись в базу пытается производить типа descr='Я вам \\"пишу\\" - чего же боле?'. Если я убиваю слеши stripslashes(), то после этого addslashes() уже не срабатывает и в базу лезет descr='Я вам "пишу" - чего же боле?'. Я вроде все внятно описал.
|
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
||||
|
||||
| VotVam |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 17.3.2007 Репутация: нет Всего: нет |
А чему удивляться? Сборка SMF ~ 5мб кода. На кой хрен его лопатить, если видно: в чем проблема?
|
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
И то правда. Тем более - можно себе представить - какого кода.
|
|||
|
||||
| VotVam |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 17.3.2007 Репутация: нет Всего: нет |
Да код-то как раз нормальный. Проблема не в нем - 100%. Скорее всего что-то криво на этом сервере (так же как и сессии), а что - вот бы хотелось что понять? Почему не срабатывает addslashes()? Почему не срабатывает mysql_real_escape_string()? Тут или кодировка не того, или вообще уже не пойму где. А код я проверил - там даже есть защита от "\\", только она тоже не срабатывает. Следовательно язык, с которым сервер общается с мускулом - арабо-китайский - твоя моя не понимай.
|
|||
|
||||
| nerezus |
|
||||||||||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 12 Всего: 43 |
Если сервер настроен криво и добавляет \, то перед ней при обработке тоже бы добавлялась \ и ошибок бы не было.
Выложи phpinfo. |
||||||||||
|
|||||||||||
| VotVam |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 17.3.2007 Репутация: нет Всего: нет |
Если бы мне нужна была чья-то доработка - я бы взял готовый скрипт типа IPB и не лез бы никуда. Я специально связался с SMF, потому что там все на функциях и все понятно как божий день. Поэтому когда пишешь addslashes() (кстати от балды первое, что пришло в голову - то и сунул), то на локали тут же срабатывает. Причем на локали вообще без всяких костылей все работает, как-будто кавычек и нет вовсе. Проблемы начинаются на сервере. Во-первых, появляется этот двойной слеш, хотя обработка "ошибочной" переменной идет наравне с другими переменными. А потом, при попытке убить этот слеш, или совсем убираются слеши или остается также. Что это за поведение PHP? Я до сих пор грешу на сессии, которые все еще не могу добиться, чтобы писались как надо (папка на сервере для просмотра недоступна и идентификатор периодически вываливается в строку запроса). Сначала поправлю сессии, а потом буду методично перебирать все, что уже наизменял в SMF. Я просто думал, что кто-то сталкивался с такой ерундой, поэтому и написал тут.
Это сообщение отредактировал(а) VotVam - 16.8.2009, 19:01 |
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Тут смешнее. Сначала я тоже думал, что речь идет об ошибке SQL. Но оказалось-то, что ошибка, о которой идет речь - это результат титанических усилий команды разработчиков: |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |