проблема со значениями PHP POST при изменении ориентации на iPad

У меня есть веб-сайт, написанный на PHP, который настроен для работы на настольных ПК, мобильных устройствах и iPad. Все выглядит хорошо с настольными и мобильными телефонами. Однако на iPad у меня есть проблема, когда я могу сохранить отправленные значения POST в базе данных в портретном режиме, но когда я пытаюсь сделать то же самое в альбомной ориентации, я просто не получаю значения, которые были фактически представлены в форме из ПОСТ.

У меня один и тот же код для формы ввода в обеих ориентациях. Однако, когда я проверяю данные, полученные как значения POST в портретном режиме, я получаю данные, которые фактически были введены в поля формы. Моя проблема в том, что когда я делаю то же самое в ландшафтном режиме, я не получаю отправленное значение из формы. Вместо этого я получаю данные для этого поля из базы данных, когда кажется, что эти данные не могут оказаться в качестве значения POST. Это действительно не представляется возможным, учитывая, как настроен мой код.

Сейчас я расскажу вам о ключевых частях моего кода во всем этом.

У меня есть две функции JavaScript в разделе заголовка моего файла index.php, которые используются для проверки ориентации, а также для реагирования на изменения ориентации (как показано ниже). Они скрывают / показывают div для каждой ориентации в теле того же файла index.php. Они оба работают, так как я вижу, как содержимое страницы корректно меняется на iPad, и я меняю его ориентацию.

function check_orientation() // check orientation for ipad home page.
{
var div_portrait = document.getElementById('ipad_home_page_portrait');
var div_landscape = document.getElementById('ipad_home_page_landscape');

if(window.innerHeight > window.innerWidth)
{
div_landscape.style.display = 'none';
div_portrait.style.display = 'block';
}
else
{
div_portrait.style.display = 'none';
div_landscape.style.display = 'block';
}
}

window.addEventListener("orientationchange", function()
{
var div_portrait = document.getElementById('ipad_home_page_portrait');
var div_landscape = document.getElementById('ipad_home_page_landscape');

if (window.orientation == 0)
{
div_landscape.style.display = 'none';
div_portrait.style.display = 'block';
}
else
{
div_portrait.style.display = 'none';
div_landscape.style.display = 'block';
}
}
, false);

В теле index.php у меня есть следующее, которое было упрощено, чтобы это не получалось дольше, чем это уже есть. В то же время все ключевые / соответствующие биты кода были включены:

<body onload='check_orientation();'>

<div id='ipad_home_page_landscape'>
<?php include ('view_edit_company_ipad.php'); ?>
</div>

<div id='ipad_home_page_portrait'>
<?php include ('view_edit_company_ipad.php'); ?>
</div>

</body>

Как указано выше, я использую один и тот же файл кода в обеих ориентациях (как видно из 2-х делений выше). Я заставляю это работать, используя условный код в ключевых точках файла для установки ширины и высоты компонентов страницы.

Файл «view_edit_company_ipad.php» содержит форму, которая позволяет пользователю вводить данные и т. Д. Ниже приведены поля этой формы:

<input type='text' name='company_contact_name' value='<?php
if (isset($company_contact_name)) echo $company_contact_name; ?>' />

Как я уже говорил, я могу вставить данные в форму в портретном режиме, если я проверю значение POST с помощью следующего кода:

<?php echo $_POST[‘company_contact_name’]; ?>

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

Кроме того, я использую это выражение echo прямо в самом верху моего файла index.php, так что ни один из моих кодов не изменил это значение POST. Я просто не получаю данные, которые были вставлены как «company_contact_name» из этого эхо-оператора, когда я использую iPad в альбомном режиме.

Я понимаю, что много здесь написал, но не смог бы дать всю необходимую информацию, если бы сделал ее немного короче. Большое спасибо всем, кто читает это, и еще больше спасибо, если вы можете предложить решение любого рода.

1

Решение

Пытаться var_dump() сбросить весь $_POST суперглобальный, чтобы увидеть, что скрипт получает от браузера.

Я подозреваю, что проблема с несколькими именами элементов управления формы в одной и той же форме. Если оба кода div находятся в одной и той же форме, и в обоих div у вас есть ввод с именем company_contact_name тогда только один из них (тот, что в портретном div) отправляется при отправке формы.

Если это так, то проверьте решение на Несколько входов с одинаковым именем через POST в php

По сути, вы можете иметь массив входных данных, хотя вы также можете переименовать один из них.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]