ajax — Странная ошибка при сложной обработке PHP-форм

НОВАЯ ИНФОРМАЦИЯ:
Я использовал print_r функция на $_REQUEST и там происходит что-то очень странное. Некоторые значения корректно передаются GET, например значение в другой форме, которое передается как «ИСТИНА». Это можно увидеть в print_r вывод, но не записывается в файл … Тем не менее, не ближе к решению моей проблемы, однако.

Я работаю над страницей с множеством форм, которые загружаются в AJAX по мере необходимости. Все это прекрасно работает, как и синтаксический анализ пар имя: значение и их надлежащее хранение.

Моя ошибка происходит, когда PHP анализирует запрос GET, отправленный AJAX, когда пользователь завершает работу, кажется, что он получает значения только из определенных полей.

Идея состоит в том, что пользователь может добавлять данные из любого числа форм, которые затем превращаются в запрос GET и отправляются на сервер.

JavaScript отлично строит мой запрос, и все формы отправляются правильно.

В зависимости от форм, которые отправляет пользователь, данные обрабатываются большим оператором switch, который передает соответствующие имена в функцию с переменным числом, которая захватывает значения и создает строку для записи в файл.

Странная ошибка в том, что в файл записываются только некоторые значения, а в других — только пустая строка. Apache или PHP не сообщают ни об ошибке, ни об ошибке в консоли JavaScript.

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

Поэтому я добавляю цветовое действие и нажимаю кнопку для отправки всех форм (на этот раз это просто цветовая форма)

Мой запрос на получение выглядит следующим образом:
actionIDs=Colour&coOptionSelect=Tinting&coColourEffect=Sepia&coRemoveColour=#000000&coRemoveFuzzNumber=0&coRemoveHueSelect=None&coReplaceColour=#000000&coReplaceFuzzNumber=0&coReplacementColour=#000000&coReplacementAlphaNumber=0&coReplaceHueSelect=None&coReplacementHueSelect=None

Затем PHP анализирует часть actionIDs, так как иногда будет много действий. Это отлично работает.

Теперь перейдем к части Color оператора switch.

case "Colour":
$config = processAction("coOptionSelect", "coColourEffect", "coRemoveColour", "coRemoveFuzzNumber", "coRemoveHueSelect", "coReplaceColour", "coReplaceFuzzNumber", "coReplacementColour", "coReplacementAlphaNumber", "coReplaceHueSelect", "coReplacementHueSelect");
file_put_contents($confpath . "colour.conf", $config);
break;

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

Это тоже не случайно, одни и те же всегда будут писать правильно. Он также не позиционный, так как я перемещал значения, и все те же, которые пишутся правильно, их положение ни на что не влияет.

Наконец, вот функция processAction.

function processAction()
{
$config = "";

foreach(func_get_args() as $field)
{
$temp = isset($_REQUEST[$field]) ? $_REQUEST[$field] : null;
$config = $config . $temp . "\n";
}

return $config;
}

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

0

Решение

Вам, вероятно, нужно кодировать свой # подписать кодированный метод % 23

Вы также можете использовать UrlEncode сделать это, прежде чем передать его в вашу переменную.

Ссылка: http://php.net/manual/en/function.urlencode.php


Обновить:

Если вы собираетесь попробовать кодировать через JavaScript, я бы попробовал использовать этот метод

var newURL =
"http://example.com/index.php?url=" + encodeURIComponent(actionIDs);

или же

var newURL =
"http://example.com/index.php?url=" + escape(actionIDs);

Ссылка: Кодировать URL в JavaScript?

У вас есть три варианта:

  • escape() не будет кодировать: @*/+

  • encodeURI() не будет кодировать: ~!@#$&*()=:/,;?+'

  • encodeURIComponent() не будет кодировать: ~!*()'

Но в вашем случае, если вы хотите пройти URL в GET параметр другой страницы, вы должны использовать escape или же encodeURIComponent, но нет encodeURI,

Смотрите вопрос переполнения стека Лучшая практика: escape или encodeURI / encodeURIComponent для дальнейшего обсуждения.

1

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

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

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