Php $\u在foreach循环内更改或消失POST值
在此之前,Php $\u在foreach循环内更改或消失POST值,php,post,foreach,Php,Post,Foreach,在此之前,foreachloop$\u POST['encounterName']包含预定义的名称。在循环内部,其值更改为“.json”,因此文件\u put\u contents中的第一个字符串为“.json.json”。以及$\u POST['basicTrainingSectionSlide'],$\u POST['basicTrainingContentHeader'],以及 $\u POST['basicTrainingContentText']将丢失它们的值。经过foreach循环后
foreach
loop$\u POST['encounterName']
包含预定义的名称。在循环内部,其值更改为“.json”,因此文件\u put\u contents中的第一个字符串为“.json.json”。以及$\u POST['basicTrainingSectionSlide']
,$\u POST['basicTrainingContentHeader']
,以及
$\u POST['basicTrainingContentText']
将丢失它们的值。经过foreach
循环后,所有值都恢复正常。这里发生了什么
$i = 0;
$j = 0;
foreach($_POST['Sections'] as $order){
if(strcmp($order, "Section") == 0){
file_put_contents($_POST['encounterName'].".json", "\t\t[\n", FILE_APPEND);
file_put_contents($_POST['encounterName'].".json", "\t\t\t\"Section\",\n", FILE_APPEND);
file_put_contents($_POST['encounterName'].".json", "\t\t\t\"".$_POST['basicTrainingSectionSlide'][$i]."\"\n", FILE_APPEND);
file_put_contents($_POST['encounterName'].".json", "\t\t],\n", FILE_APPEND);
$i++;
}
else if(strcmp($order, "Text") == 0){
file_put_contents($_POST['encounterName'].".json", "\t\t[\n", FILE_APPEND);
file_put_contents($_POST['encounterName'].".json", "\t\t\t\"Text\",\n", FILE_APPEND);
file_put_contents($_POST['encounterName'].".json", "\t\t\t\"".$_POST['basicTrainingContentHeader'][$j]."\"\n", FILE_APPEND);
file_put_contents($_POST['encounterName'].".json", "\t\t\t\"".$_POST['basicTrainingContentText'][$j]."\"\n", FILE_APPEND);
file_put_contents($_POST['encounterName'].".json", "\t\t],\n", FILE_APPEND);
$j++;
}
}
这是$\u post数组包含的内容:
array(11) { ["encounterName"]=> string(8) "Violence" ["encounterHint"]=> string(0) "" ["basicTrainingSectionSlide"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "6" } ["basicTrainingContentHeader"]=> array(2) { [0]=> string(1) "2" [1]=> string(1) "4" } ["basicTrainingContentText"]=> array(2) { [0]=> string(1) "3" [1]=> string(1) "5" } ["contextText_1"]=> string(0) "" ["contextText_2"]=> string(0) "" ["contextText_3"]=> string(0) "" ["contextText_4"]=> string(0) "" ["contextText_5"]=> string(0) "" ["submit_form"]=> string(6) "Submit" } array(11) { ["encounterName"]=> string(8) "Violence" ["encounterHint"]=> string(0) "" ["basicTrainingSectionSlide"]=> array(2) { [0]=> string(1) "1" [1]=> string(1) "6" } ["basicTrainingContentHeader"]=> array(2) { [0]=> string(1) "2" [1]=> string(1) "4" } ["basicTrainingContentText"]=> array(2) { [0]=> string(1) "3" [1]=> string(1) "5" } ["submit_form"]=> string(6) "Submit" }
一些补充信息:
-填写的表单将其post数据发送到单独的php文件进行处理。
-$\u POST['Sections']
通过以下功能发送:
function returnValues() {
$.ajax({
type: "POST",
url: "final.php",
data:{ Sections: $sectionOrder },
success: function(data){
console.log(data);
}
})
}
从表单标记的提交上的.js文件。假设
$\u POST['Sections']
包含以下内容:
array(11) {
["encounterName"]=> string(8) "Violence"
["encounterHint"]=> string(0) ""
["basicTrainingSectionSlide"]=> array(2) {
[0]=> string(1) "1"
[1]=> string(1) "6" }
["basicTrainingContentHeader"]=> array(2) {
[0]=> string(1) "2"
[1]=> string(1) "4" }
["basicTrainingContentText"]=> array(2) {
[0]=> string(1) "3"
[1]=> string(1) "5" }
["contextText_1"]=> string(0) ""
["contextText_2"]=> string(0) ""
["contextText_3"]=> string(0) ""
["contextText_4"]=> string(0) ""
["contextText_5"]=> string(0) ""
["submit_form"]=> string(6) "Submit"
}
array(11) {
["encounterName"]=> string(8) "Violence"
["encounterHint"]=> string(0) ""
["basicTrainingSectionSlide"]=> array(2) {
[0]=> string(1) "1"
[1]=> string(1) "6" }
["basicTrainingContentHeader"]=> array(2) {
[0]=> string(1) "2"
[1]=> string(1) "4" }
["basicTrainingContentText"]=> array(2) {
[0]=> string(1) "3"
[1]=> string(1) "5" }
["submit_form"]=> string(6) "Submit"
}
我会这样做:
$i = 0;
$j = 0;
foreach($_POST['Sections'] as $order){
$fn = $order['encounterName'] . ".json";
$appText = "";
if(strcmp($order, "Section") == 0){
$appText .= "\t\t[\n";
$appText .= "\t\t\t\"Section\",\n";
$appText .="\t\t\t\"" . $order['basicTrainingSectionSlide'][$i] . "\"\n";
$appText .= "\t\t],\n";
file_put_contents($fn, $appText, FILE_APPEND);
$i++;
} elseif(strcmp($order, "Text") == 0){
$appText .= "\t\t[\n";
$appText .= "\t\t\t\"Text\",\n";
$appText .= "\t\t\t\"" . $order['basicTrainingContentHeader'][$j] . "\"\n";
$appText .= "\t\t\t\"" . $order['basicTrainingContentText'][$j] . "\"\n";
$appText .= "\t\t],\n";
file_put_contents($fn, $appText, FILE_APPEND);
$j++;
}
}
由于您处于一个foreach
循环中,并在数组上迭代$\u POST['Sections']
,要调用该数组的元素,需要使用$order
。这就是您定义循环的方式。您一直在调用$\u POST,这些索引不应该存在
如果您使用的是$\u POST,则第一次出现的encounterName
将位于$\u POST['Sections'][0]['encounterName']
,并将包含字符串暴力
。因此,在循环中,$fn=$order['encounterName'].“.json”
应作为字符串分配暴力.json
我不确定if
语句在寻找什么。由于$order
是一个数组,而不是字符串,strcmp()
应该返回NULL
。见附注。由于两个if
语句都会失败,因此在这两种情况下都不会追加文件。如果你想澄清这一点,请发表评论
我对以下内容进行了测试:
此代码未经测试。那么,为什么第一个块是
[$i]
,而另一个块是[$j]
?为什么要手动构建json?那真是太蠢了。。。有json\u encode()
可以自动为您完成所有这些,并且有很多方法可以预先打印它生成的内容。这必须是一个非常特定的顺序,我不能只转储这些内容。但是是的,我会通过这个来研究方括号的东西。首先,我需要这个。所有部分[]的大小是$I+$j,但它们的顺序是随机的,这取决于$order的值。当您多次打开和关闭文件时,请查看fopen
和fwrite
,这是不需要的。如果没有一些示例$\u POST
数据,我们无法测试此代码。您能否编辑您的帖子以包含供我们使用的var\u转储($\u post)
?
<?php
$order = array();
if(strcmp($order, "Section")){
echo "Success";
} else {
echo "Fail";
}
?>
E_WARNING : type 2 -- strcmp() expects parameter 1 to be string, array given -- at line 5
Fail