2015-07-20 2 views
-1

До этого цикла foreach$_POST['encounterName'] содержит предопределенное имя. Внутри цикла его значение изменяется на «.json», поэтому первая строка в file_put_contents читает «.json.json». Также $_POST['basicTrainingSectionSlide'], $_POST['basicTrainingContentHeader'] и $_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++;  
    } 

} 

Это то, что массив $ _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" } 

Некоторые добавляют информацию: -The форма, которая заполняется посылает свои почтовые данные в отдельный файл PHP для обработки. -The $_POST['Sections'] передается через эту функцию:

function returnValues() { 
    $.ajax({ 
     type: "POST", 
     url: "final.php", 
     data:{ Sections: $sectionOrder }, 
     success: function(data){ 
      console.log(data); 
     } 
    }) 
} 

из .js файла onsubmit в виде тега.

+2

ну, почему это '[$ i]' в первом блоке и '[$ j]' в другом? и почему вы строите json вручную? это просто глупо ... есть 'json_encode()', чтобы сделать все это для вас автоматически, и много способов прет-печатать то, что он создает –

+0

Это должен быть очень конкретный заказ, я не могу просто сбросить вещи. Но да, я посмотрю на квадратные брекеты. Мне нужно это в первую очередь. –

+0

Размер разделов [] равен $ i + $ j, но они поступают в случайных порядках в зависимости от значения в $ order. –

ответ

0

Предполагая, что $_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 петлю и итерация массива $_POST['Sections'], чтобы вызвать элементы этого массива, вы должны использовать $order. Вот как вы определили цикл. Вы продолжали вызывать $ _POST, и эти индексы не должны существовать.

Если вы использовали $ _POST, первое появление encounterName будет расположено по адресу $_POST['Sections'][0]['encounterName'] и будет содержать строку Violence. Таким образом, в цикле $fn = $order['encounterName'].".json"; должно быть назначено Violence.json как строка.

Я не уверен, что заявление if ищет. Поскольку $order является массивом, а не строкой, strcmp() должен возвращать NULL. См. Примечания here. Поскольку оба оператора if не удались, ваш файл не будет добавлен в любом случае. Прошу прокомментировать, если вы хотите это уточнить.

Я проверил следующее на http://phpfiddle.org/lite:

<?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 

Этот код тестировался.

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