Задать вопрос
CrewGer
@CrewGer
Начал Битрикс

Почему PHP записывает два раза значение массива в Json?

Всем привет!

Все, вроде, работает как надо, но Запись в конец массива идет с дублем.

Вот ПХП:
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("applications");
?>
<div class="container">
<?
$usr_phone = $_POST['phone'];
$start_status = 'Новая';
$question_status = 'Рассмотрено';
$cur_date = date('d.m.y H:i:s');
$usr_message = $_POST["usr_message"]; 
//$mnr_message = $_POST["mnr_message"]; 
$email = $_POST["email"]; 
$phone = $_POST["phone"]; 
$name = $_POST['name']; 
$city = $_POST['city']; 

/* *** write *** 
*** update *** */

if (!empty($_POST['name'])) { // если имя не пустое

$file = file_get_contents('1с.json'); // Открыть файл 1c.json

$taskList=json_decode($file,TRUE); // Декодировать в массив 

	//unset($file);  // Очистить переменную $file

//$taskList[0]['status'] = "status1";

// or if you want to change all entries with activity_code "1"
foreach ($taskList as $key => $entry) {

	if ($entry['phone'] == $usr_phone) { // если номер телефона в форме совпадает с номером в массиве

	//$taskList[$key]['status'] = "status1";

	echo "Текущий статус - ".$taskList[$key]['status']."<br>";

	//echo htmlspecialchars($_POST['usr_message']); 

	//тут нужна проверка на пустоту
	echo "Вы написали: ".htmlspecialchars($taskList[$key]['usr_message'])."<br>";

	echo "Ответ менеджера: ".htmlspecialchars($taskList[$key]['mnr_message'])."<br>";
	// а тут ставим да/нет, если есть статус "ебала"
		if ($taskList[$key]['status'] == $question_status) { //если статус "рассмотрено" // и если 1
unset($file); 

			//file_put_contents('1с.json',json_encode($taskList, JSON_UNESCAPED_UNICODE, JSON_PRETTY_PRINT)); //file_put_contents('1с.json',json_encode($taskList, JSON_UNESCAPED_UNICODE, JSON_PRETTY_PRINT)); // Перекодировать в формат и записать в файл.

unset($taskList);  // Очистить переменную $taskList 
?>
<div class="yes_no_form">
Are you ready?<br>
<a href="yesno.php?yesno=yes&phone=<? echo $phone; ?>">yes</a>  

<a href="yesno.php?yesno=no&phone=<? echo $phone; ?>">no</a> <br>

------------- mark ed: --------------<br>
<? 
			//echo $_POST["usr_message"]."<br>"; 
			//echo $_POST["mnr_message"]."<br>"; 
			//echo $_POST["email"]."<br>"; 
			//echo $_POST["phone"]."<br>"; 
			//echo $_POST['name']."<br>"; 
?>
</div>
	<? 

}

} else {
	/* ** */
$file = file_get_contents('site.json');  // Открыть файл data.json
          
$taskList = json_decode($file,TRUE);        // Декодировать в массив 
                        
unset($file);                               // Очистить переменную $file
           
$taskList[] = array('id'=>$usr_id, 'city'=>$city, 'name'=>$_POST['name'], 'usr_message'=>htmlspecialchars($usr_message), 
'app_date'=>$cur_date, 'phone'=>$_POST['phone'], 'status'=>$start_status, 'email'=>$email, 'mnr_message'=>'', 
'customer_confirmed'=>'0', 'confirmation_date'=>'0001-01-01T00:00:00'); // Представить новую переменную как элемент массива, в формате 'ключ'=>'имя переменной'

file_put_contents('site.json',json_encode($taskList, JSON_UNESCAPED_UNICODE, JSON_PRETTY_PRINT)); // Перекодировать в формат и записать в файл.

unset($taskList);  // Очистить переменную $taskList 
	/* ** */
}

}

}

?>
</div>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>


И вот так выглядит JSON:
[{"id":"4307","city":"Кострома 2","name":"Артём Сузенко","usr_message":"34343434","app_date":"28.05.19 17:27:27","phone":"+7(964)155-3434","status":"Новая","email":"123@bk.ru","mnr_message":"","customer_confirmed":"0","confirmation_date":"0001-01-01T00:00:00"},
{"id":"4307","city":"Кострома 2","name":"Артём Сузенко","usr_message":"34343434","app_date":"28.05.19 17:27:27","phone":"+7(964)155-3434","status":"Новая","email":"123@bk.ru","mnr_message":"","customer_confirmed":"0","confirmation_date":"0001-01-01T00:00:00"},

{"id":"4307","city":"Кострома 2","name":"Артём Сузенко","usr_message":"Сообщение","app_date":"28.05.19 17:28:35","phone":"+7(964)178-0128","status":"Новая","email":"123@bk.ru","mnr_message":"","customer_confirmed":"0","confirmation_date":"0001-01-01T00:00:00"},
{"id":"4307","city":"Кострома 2","name":"Артём Сузенко","usr_message":"Сообщение","app_date":"28.05.19 17:28:35","phone":"+7(964)178-0128","status":"Новая","email":"123@bk.ru","mnr_message":"","customer_confirmed":"0","confirmation_date":"0001-01-01T00:00:00"}]
  • Вопрос задан
  • 144 просмотра
Подписаться 2 Простой 2 комментария
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Так у вас сплошной бардак в коде. Вы делаете обход foreach по переменной $taskList и меняете её значение внутри цикла. Естественно, на выходе может получиться что угодно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
CrewGer
@CrewGer Автор вопроса
Начал Битрикс
$taskList[] = array//... вынес за foreach и отрабатывает как надо, как сказал Rsa97
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы