НОВАЯ ИНФОРМАЦИЯ:
Я использовал 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;
}
Конечный результат должен состоять в том, что все значения должны записываться в соответствующие файлы правильно, а не в текущую проблему, когда записываются только несколько значений из каждой формы, а остальные значения записываются в виде пустых строк.
Вам, вероятно, нужно кодировать свой # подписать кодированный метод % 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 для дальнейшего обсуждения.
Других решений пока нет …