@methodPOST

Как найти строку в файле, изменить data атрибут, сохранить и закрыть файл на php языке?

Здравствуйте! Я никакого отношения не имею к php и не имел бы, если не реализация этой задачи. С помощью AJAX я загружаю данные и вывожу в родитель при загрузке страницы. У каждого дочернего элемента, который был помещен в родитель, есть две кнопки отвечающие за изменение статуса заказа. Нажимая на кнопку, я передаю параметры в URL строку и посылаю запрос на файл обработчик. Параметры выглядят вот так: ?done=89991234567 или ?nope=89991234567. Файл обработчик получает номер телефона из строки и ищет его в файле. Дальше, если параметр "done" в адресной строке, то у найденной строки изменить содержимое data-status="wait" атрибута на data-status="done", и наоборот, если "nope" - изменить на data-status="nope" и сохранить изменения в файле желательно на той же строке. На данный момент, я просидел всю ночь на форумах в поиске информации и смог сделать только поиск строки в файле, изменить data-status="wait" на data-status="done" и вывести эту же строку с помощью "echo $order". У меня есть две проблемы: 1) как получить параметр после знака вопроса (done/nope(не номер телефона)); 2) как изменить параметр data атрибута в файле HTML, а после сохранить изменения в файле;

Вот, что у меня по кодингу:

JS

change_status.forEach(function(e){ // change_status = document.querySelectorAll('.change_status')
	e.addEventListener('click', function(){
		xhr = new XMLHttpRequest;
		xhr.open('get', 'resource/change_status_order.php?' + e.classList[1] + '=' + e.dataset.phone, true); // class имеет вид class="change_status done(или nope)", получаю второй класс в элементе для параметра url
		xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
		xhr.onreadystatechange = function(){
			if(xhr.readyState == 4 && xhr.status == 200){
				if(xhr.responseText == 'true'){ // написал изначально, чтобы проверить работу запроса сейчас всегда вернет ошибку
					window_popup('done'); // функция попап уведомления
				}else{
					window_popup('nope')
				}
			}
		}
		xhr.send();
	})
})


А и сам PHP код:

<?php
	$searchthis = $_GET['done']; // Здесь я получаю номер из параметров в ручную...

	$base = fopen("html/allorders.html", "r"); // мой файл
	
	if ($base)
	{
	    while (!feof($base))
	    {
	        $buffer = fgets($base);
	        if(strpos($buffer, $searchthis) !== FALSE)
				$order = $buffer;

				$DOM = new DOMDocument();
	                        $DOM->loadHTML($order);

	        	foreach ($DOM->getElementsByTagName("div") as $status){
	        		$status->setAttribute("data-status", "done");
	        		echo $DOM->saveHTML();
	        		exit;
	        	}
	        	
	    }
	    fclose($base);
	}

	echo $order; // здесь выводится моя найденная строка с уже измененным атрибутом.
// Именно её я не знаю, как сохранить в файле на той же строке
// Я пробовал $fwrite($base, $order), но выдает куча не понятных мне ошибок, да и я уверен, что если и запишет, то запишет в конец файла, а нужно в данном случае в блок class="orders".
// Использовал r+ и a+ для файла. Пишет фатальная ошибка....
?>


А вот как хранятся параметры в файле:

<div class="orders"> <!-- при записи, строка не должна уходить дальше этого блока -->
			<div data-k="000" data-g="001" data-s="051" data-status="wait" data-person="2" data-price="1200" data-tel="8999123456" data-time="23:00" data-date="17 Ноября" class="myOrder"></div>
		</div>


Где data-status="wait" - тот самый атрибут, содержимое которого необходимо изменить на параметр из url. Напомню, если url = my.site?done=8999123456, то в строке файла с номером 8999123456, data-status="wait" должен изменится на data-status="done".

Помогите, пожалуйста. И помните, я не знаю php ВООБЩЕ и изучать нет необходимости для меня. I love front-end=)

UPD Я хочу, чтобы меня правильно поняли: я не прошу "сделай за меня". Прошу любые ключевые слова для поиска в интернете (сам, конечно же, искал), ссылки, а если Вам не сложно допилить код, то рад буду только этому.
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы