Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > проблема совместимости браузеров |
Автор: Ravanger 6.7.2007, 15:20 | ||
такая проблема, есть кусок скрипта
проблема такая, в IE обрабатывается нормально и выполняет то, что что от него требуется, а вот опера и фф не распознают $_POST[$key] как массив подскажите что с этим делать, может сталкивался кто |
Автор: SelenIT 6.7.2007, 15:39 |
Ravanger, давайте так... Вы очень быстро прочитаете http://phpfaq.ru/na_tanke и так же быстро исправите предыдущий пост на реальное описание проблемы: что у Вас за форма в HTML, как Вы ее отправляете из каждого браузера и какие данные в результате этого попадают в скрипт в каждом случае. И заодно попросите модераторов перенести этот вопрос в более подходящий раздел форума. А этого вопроса мы будем считать, что не видели;). |
Автор: vintyara 6.7.2007, 16:05 |
Ravanger, а у тя опера и фф каких верисй ![]() |
Автор: Ravanger 6.7.2007, 20:07 | ||||||||||
"это" я уже читал, обьясняю, есть форма состоящяя из много го кол-ва полей нас интересует несколько <select> с одним именем в котором n <option>, селесты добавляются яваскриптом по мере надобности, дальше, массив преобразовуется в строку и пишется в базу данных одним полем... так вот, это все прекрасно работает в IE, начал тестить на опере в условие,
скрипт не попадает (проверял) поменял условие на
и получил ошибку
внимание вопрос, почему? да, кстати, в <select> есть дефолт <option value="-">-</option>, который в базу писатся не должен, отсюда и обработка функцией str_replace()
opera 9я, фф не помню |
Автор: teroni 6.7.2007, 20:36 | ||
Что-то я не пойму, почему у Вас этот селект должен передаваться массивом? Это что-то вроде
|
Автор: Ravanger 6.7.2007, 21:17 |
teroni, именно только не мультиплай, а просто несколько селектов имеют одинаковые имена |
Автор: Alukard 6.7.2007, 21:43 |
Впринципе, что вы вцепились в браузеры...конечно странно что IE выполняет а остальные нет, но PHP является серверным и поэтому не зависит от браузера.... Могу дать совет использовать массив $_REQUEST вместо $_POST , в нем все переменные есть! И желательно посмотреть HTML код странички после выполнения PHP скрипта для определения проблемы... Да, только что заметил...вы что используете массив $_POST как свой локальный напрямую записывая туда собственные переменные из select ? Если да, то это глупо, создайте собственный массив и оперируйте с ним! |
Автор: Ravanger 6.7.2007, 21:52 | ||||
в силу определенных причин, это не глупо
это я знаю, но возвращают результаты обработки они по разному просто почему то опера и фф говорят, ЧТО ЭТО НЕ МАССИВ! |
Автор: teroni 6.7.2007, 22:00 | ||||
З.Ы. И что мешает посмотреть
Если они в ИЕ, ФФ и Моззиле отличаются - значит какой-то кривой хтмл у отсылающей странички. |
Автор: -=Ustas=- 7.7.2007, 11:31 |
Ravanger, прекрати говорить о браузерах, когда говоришь о массивах в PHP!!! |
Автор: ilyalyu 8.7.2007, 10:58 |
Очевидно, IE, обнаружив одинаковые имена у тэгов, автоматически добавляет к ним квадратрые скобочки "[]" (т.е. "name[]" вместо "name"), а FF и Opera этого не делают (можно послать форму с помощью метода GET, сделать var_dump переменной $_SERVER - там где-то должен быть текст запроса - и посмотреть так ли это). Что касается PHP, то, насколько я понимаю, он когда видит имя с квадратными скобками ("name[]=value1&name[]=value2"), то создает масив "name" и добавляет в него элемент "value" (соответствующий код на PHP выглядел бы так "$_GET['name'][] = 'value1'; $_GET['name'][] = 'value2';"). Если же он встречает несколько одинаковых имен без скобок ("name=value1&name=value2"), то он просто пишет новое значение поверх старого (код на PHP "$_GET['name'] = 'value1'; $_GET['name'] = 'value2';"). Мораль, думаю, такая: если в одной форме используются одинаковые имена, необходимо добавлять квадратные скобки самому и не надеятся на браузер. |
Автор: Ravanger 8.7.2007, 11:27 | ||
да они там стоят, вобщем пока рассмотрение этой темы откладываю, как прийду на работу кину исходник HTML и будем разбиратся, всем спасибо |
Автор: WIPS 9.7.2007, 01:35 |
Ravanger, я еще наблюдал одну интересныую багофичу FF, когда он не отправлял из формы данные инпутов, кот. были сгенерированы JS. Отправлял только то, что было в форме при загрузке страницы. Но... было это давно, т.е. FF был наверное версии так 1.0.x.x.x, и сейчас дела могут обстоять по другому. Однако... я до сих пор страхуюсь и все инпуты, кот. мне могут пригодиться генерирую заранее на сервере вместе со страницей, а JS их только прячет/показывает. Кстати... как вела себя в этой ситуации Опера, к сожалению не помню... |
Автор: SelenIT 9.7.2007, 01:44 |
WIPS, а эти инпуты, часом, не в таблицу добавлялись? ![]() |
Автор: WIPS 9.7.2007, 02:05 |
SelenIT, к сожалению не помню, но зная себя как верстальщика - скорее всего, что в таблицу ![]() |
Автор: SelenIT 9.7.2007, 02:24 |
Угу;). Это во-первых, а во-вторых, "правильные" браузеры очень не любят <form> между <tr> и <td> и тому подобные формы издевательства над DOM. При корректной вложенности тегов все, как правило, нормально добавляется... |
Автор: Ravanger 10.7.2007, 11:23 | ||||
скрипт добавляющий селекты:
html форма
|
Автор: ilyalyu 10.7.2007, 23:18 |
чтой-то я не понимаю, что означают фигурные скобочки. в любом случае, полезно послать форму методом GET и посмотреть какая query string передается из разных браузеров |
Автор: SelenIT 11.7.2007, 01:30 |
Фигурные скобочки - очевидно, какой-то темплейтный движок, к делу не относится. А вот то, что у элементов формы одновременно есть name со скобками и id без таковых - это настораживает. Если обращений к ним по id-ам нет (по крайней мере, в приведенном фрагменте кода не видать) я бы id-ы вообще выкинул - во избежание неоднозначности... |
Автор: Ravanger 11.7.2007, 09:18 | ||
по этому id в базе поля создаются, for example: "property_307" |
Автор: SelenIT 11.7.2007, 09:29 |
Ну и пусть себе создаются - насколько я понимаю, это происходит до генерации формы, в HTML-то их зачем выпихивать? А на крайняк (если я чего-то недопонимаю;) пусть создаются по name, делов-то... два символа отбросить... |
Автор: Ravanger 11.7.2007, 09:48 | ||
это PEAR'овский шаблонизатор |
Автор: sTa1kEr 11.7.2007, 10:05 |
А где сам тэг FORM? И еще лучше добовлять новые элементы через DOM, а не innerHTML. |
Автор: Ravanger 11.7.2007, 10:58 | ||
а как это сделать, не сталкивался никогда... |