2014-10-05 86 views
0

新信息:
我用在$_REQUESTprint_r功能,很奇怪的东西实在是太发生的事情。一些值正在被GET正确传递,例如在“TRUE”中传递的另一个表单上的值。这可以在print_r输出中看到,但不会写入文件中......但是,仍然没有更接近找到解决我的问题的方法。奇怪的错误与复杂的PHP表格处理

我正在制作一个页面,其中包含许多根据AJAX需要加载的表单。这一切工作正常,解析名称:值对并适当地存储它们。

我的错误发生在PHP解析用户完成时由AJAX发送的GET请求时,它似乎只从特定字段检索值。

这个想法是,用户可以从任意数量的表单添加数据,然后转换成GET请求并发送到服务器。

JavaScript正在完善我的请求,并且所有表格都能正确发送。

根据用户提交的表单,数据由大型switch语句处理,该语句将相关名称传递给可变参数函数,该参数获取值并创建用于写入文件的字符串。

奇怪的错误是,只有一些值被写入文件,其他人只有一个空行。 Apache或PHP没有报告错误,也没有在JavaScript控制台中报告错误。

我会使用颜色表单,因为这是一个更复杂的。

所以我添加颜色操作,然后单击该按钮,提交各种形式(这时候,它只是虽然颜色形式)

我的GET请求看起来是这样的: 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部分,会有很多操作。这工作正常。

我们现在跳转到switch语句的Color部分。

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

写入到正确的文件,但奇怪的是,只有coOptionsSelectcoColourEffect有它们的值写入文件。这不是它们的输入类型,因为它们是类似于窗体上其他选择的选择语句。在其他形式上,它可能是数字输入或文本输入,而是正确提交。

它也不是随机的,相同的将始终正确写出。当我移动数值并且它仍然是正确写入的相同数据时,它也不是位置,它们的位置不影响任何东西。

最后这里是processAction函数。

function processAction() 
{ 
    $config = ""; 

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

    return $config; 
} 

最终的结果应该是所有数值应写信给他们的相关文件正确,而不是在那里从每个窗体只有几个值写入当前的问题,与其余值被写为空行。

+0

简而言之,请说明您尝试了什么以及您想要做什么/预期结果。由于这个长时间的故事留下了一段时间没有回答.. – 2014-10-05 18:50:25

+0

@PuzzledBoy这是相当长的,但没有错误日志解雇,我似乎无法精确确定错误可能在哪里。 我的最终目标是处理来自AJAX发送的大量GET请求的值并将其写入相关文件。 我的问题:只有一些值是为了什么而写的,看似没有逻辑。 我试过寻找各种错误日志和写出变量值以及试图打破逻辑。没有运气。 – Arcana 2014-10-05 18:54:15

回答

1

你可能需要您的标志编码为一个编码方法%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); 

参考:Encode URL in JavaScript?

你有三个选择:

  • escape()不会编码:@*/+

  • encodeURI()不会编码:[email protected]#$&*()=:/,;?+'

  • encodeURIComponent()不会编码: ~!*()'

但在你的情况,如果你想要一个URL传递到其他页面的GET参数,你应该使用escapeencodeURIComponent,但不encodeURI

查看堆栈溢出问题Best practice: escape, or encodeURI/encodeURIComponent进一步讨论。

+0

这有帮助,所以谢谢你!现在值3,4和5也被正确写入。然后它再次停止... 我使用JavaScript实现它在GET字符串上执行字符串替换我用“%23”替​​换“#” 它已经帮助,但它再次停止... – Arcana 2014-10-05 19:14:37

+0

有你试图用JavaScript来添加编码方法,而不是仅仅修复#符号?我更新了我的答案 – 2014-10-05 20:36:24

+0

我已经使用了escape,现在它都可以很好地传递给PHP,如print_r输出所示。然而,我需要做些事情来让我处理这个事情,因为它现在看起来像是字符串数据。 编辑:虽然这对我来说应该没问题,因为我的问题是将数据传给PHP,只要我能在某种程度上解析它,那就解决了我的问题! – Arcana 2014-10-05 21:26:18