2014-10-05 3 views
0

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

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

Моя ошибка возникает, когда 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

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

Теперь перейдем к цветовой части инструкции переключателя.

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

Простыми словами, пожалуйста, уточните, что вы пробовали и что хотите, и что ожидается результат. Как этот длинный рассказ некоторое время остался без ответа .. –

+0

@PuzzledBoy Это довольно длинный, но без ошибок логги ошибок, я не могу точно определить, где именно ошибка. Моя конечная цель заключается в том, что значения из большого запроса GET, отправленного AJAX, обрабатываются и записываются в соответствующие файлы. Моя проблема: только некоторые значения написаны с кажущейся логикой о том, почему. Я попытался найти различные журналы ошибок и выписать переменные значения, а также попытаться сломать логику. Не повезло. – Arcana

ответ

1

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

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

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


Update:

Если вы будете пытаться кодировать с помощью JavaScript я хотел бы попробовать и использовать этот метод

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

или

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

Ссылка: Encode URL in JavaScript?

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

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

  • encodeURI() не закодировать: [email protected]#$&*()=:/,;?+'

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

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

См. Вопрос переполнения стека Best practice: escape, or encodeURI/encodeURIComponent для дальнейшего обсуждения.

+0

Это так помогло! Теперь значения 3, 4 и 5 также записываются правильно. Затем он снова останавливается, хотя ... Я реализовал его с помощью JavaScript для выполнения замены строки в строке GET, которую я делаю заменой «#» на «% 23» Это помогло, но оно снова прекратилось ... – Arcana

+0

Have вы пытались добавить метод кодирования с помощью javascript вместо того, чтобы просто фиксировать символ #? Я обновил свой ответ –

+0

Я использовал escape, и теперь все передано PHP, как показано в выводе print_r. Мне нужно что-то сделать, чтобы позволить мне обработать это, так как теперь это просто строковые данные. EDIT: Это должно быть хорошо для меня, потому что моя проблема заключалась в получении данных на PHP, пока я могу разобрать его каким-то образом, что решает мою проблему! – Arcana

Смежные вопросы