 
			
				07.06.2021, 08:40
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.04.2020 
					
					
					
						Сообщений: 60
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Как можно отправить на сервер массив с данными в случае их изменения?
			 
			
		
		
		
		Здравствуйте. Есть таблица, где строки - это записи из БД. Мне нужно редактировать эти записи (изменять одно из значений записи). 
есть значения: - id
 
- список товаров
 
- стоимость
 
- статус
 
 
В таблице все строки не редактируемые кроме последнего - статус. 
 
<table>
    <tr>
        <td>1</td>
        <td>что-то что-то что-то что-то</td>
        <td>123123</td>
        <td>
<select name="select">
  <option value="value1">Значение 1</option>
  <option value="value2" selected>Значение 2</option>
  <option value="value3">Значение 3</option>
</select>
</td>
    </tr>
    <tr>
        <td>2</td>
        <td>что-то что-то</td>
        <td>141414</td>
        <td>
<select name="select">
  <option value="value1">Значение 1</option>
  <option value="value2" selected>Значение 2</option>
  <option value="value3">Значение 3</option>
</select>
</td>
    </tr>
    <tr>
        <td>3</td>
        <td>что-то что-то</td>
        <td>333333</td>
        <td>
<select name="select">
  <option value="value1">Значение 1</option>
  <option value="value2" selected>Значение 2</option>
  <option value="value3">Значение 3</option>
</select>
</td>
    </tr>
</table>
<button>СОХРАНИТЬ</button>
Мне нужно чтобы, если пользователь изменил select одной из строк и нажал "сохранить" - на сервер отправился бы массив, в котором был список id и их новых статусов, чтобы я потом могла пройти его перебором и записать в БД
 
foreach ($_POST as $value) {
$datasave["data"] = [
			"number"=>$value['id'],
			"status"=>$value['select'],
		];
		$orders = myapi("collections/save/", "orders", $api, json_encode($datasave));
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось nastya97core, 07.06.2021 в 08:58.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.06.2021, 11:03
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от nastya97core
			
		
	 | 
 
	| 
		Мне нужно чтобы, если пользователь изменил select одной из строк и нажал "сохранить" - на сервер отправился бы массив, в котором был список id и их новых статусов, чтобы я потом могла пройти его перебором и записать в БД
	 | 
 
	
 
 Так формируй такой массив
 
[
   {id: 'ИД1', status: 'Статус1'},
   ...
   {id: 'ИДN', status: 'СтатусN'}
]
потом его можно преобразовать в json- строку и отправить на сервер...  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.06.2021, 11:08
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Можно вообще формировать такой УРЛ 
<url>?id=id1&st=st1&id=id2&st=st2&id=id3&st=st3&...&id=idN&st=stN
 
Тогда на сервере (в request) будут доступны два массива
 
id: ['id1', ..., 'idN']
 
и
 
st: ['st1', ..., 'stN']
  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.06.2021, 17:48
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.04.2020 
					
					
					
						Сообщений: 60
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 ksa, 
а если бы у меня в одной строке было несколько редактируемых параметров, то как в этом случае быть? К примеру в записи с id=1 было изменено input.name = price и input.name = status. А в записи с id=2 только input.name = status. Как бы мне их можно было объединить в один? Ладно в {id: 1} мы можем заранее знать, что это id. А как быть с остальными? Ведь я не знаю будет ли price или status, или даже всё вместе: {price: '123', status: 'Статус 2'}. У меня просто не удалось прописать свой ключ (подставить в ключ переменную) 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.06.2021, 21:29
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		nastya97core, если изменения не "однородны" - тогда вариант со строкой json более гибок...
 
	
 
	| 
		
			Сообщение от nastya97core
			
		
	 | 
 
	| 
		К примеру в записи с id=1 было изменено input.name = price и input.name = status. А в записи с id=2 только input.name = status. Как бы мне их можно было объединить в один? Ладно в {id: 1} мы можем заранее знать, что это id. А как быть с остальными?
	 | 
 
	
 
 получится нечто похожее на такой массив объектов
 
[
   {id: 1, price: '123', status: 'Статус 2'},
   {id: 2, status: 'Статус 3'},
]
Останется только переделать его в json-строку и можно отправлять на сервер. 
Если серверный язык не умеет работать со json-строками - можно придумать другой формат строк, который серверу будет более удобен.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.06.2021, 10:35
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.04.2020 
					
					
					
						Сообщений: 60
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 ksa, 
 У меня тупик как раз с формированием этого массива. Как его сделать? 
Как мне прописать ключ, если я даже заранее не знаю, будет ли он? Вот этот вариант {status: ''} - сделает изменения в БД и сотрёт данные... 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.06.2021, 13:08
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.04.2020 
					
					
					
						Сообщений: 60
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		вот такая таблица. 
https://jsfiddle.net/pos2yb0j/
Нужно, чтобы при сохранении создавался массив только изменённых 
 
[
   {id: a1, info: '123', status: 'Статус 2'},
   {id: a2, status: 'Статус 3'},
]
помогите  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.06.2021, 13:39
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 nastya97core, 
 
а можно исходный массив , а не таблицу? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.06.2021, 14:45
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от nastya97core
			
		
	 | 
 
	| 
		Нужно, чтобы при сохранении создавался массив только изменённых
	 | 
 
	
 
 Как вариант...
 
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="https://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<style>
table {
   border-collapse: collapse;
}
td {
   border: 1px solid grey;
   min-width: 10vw;
       padding: 10px;
}
input {
  border:none;
  border-bottom:1px solid black;
}
</style>
<script>
$(function() {
	$('input, select').on('change', function() {
		const o = $(this)
		o.addClass('on')
		o.parents().parent().addClass('on')
	})
	$('#test').on('submit', function() {
		let a = []
		$('#data > tbody > tr.on').each(function() {
			let obj = {}
			const o = $(this)
			const id = o.find('td:first-child').text()
			obj.id = id
			o.find('.on').each(function() {
				obj[this.name] = this.value
			})
			a.push(obj)
		})
		alert(JSON.stringify(a))
		return false
	})
})
</script>
</head>
<body>
<form id='test'>
<table id='data'>
  <thead>
  <tr>
    <td>id</td>
    <td>Стоимость</td>
    <td>Инфо</td>
    <td>Статус</td>
  </tr>
  </thead>
  <tbody>
  <tr>
    <td>a1</td>
    <td><input type="text" name='sum' value="123"></td>
    <td><input type="text" name='info' value="перезвонить"></td>
    <td><select name='status'>
        <option value="value1" selected>В обработке</option>
        <option value="value2">Завершен</option>
        <option value="value3">Невозможен</option>
      </select></td>
  </tr>
  <tr>
    <td>a2</td>
    <td><input type="text" name='sum' value="1413"></td>
    <td><input type="text" name='info'></td>
    <td><select name='status'>
        <option value="value1">В обработке</option>
        <option value="value2" selected>Завершен</option>
        <option value="value3">Невозможен</option>
      </select></td>
  </tr>
  <tr>
    <td>a3</td>
    <td><input type="text" name='sum' value="222"></td>
    <td><input type="text" name='info'></td>
    <td><select name='status'>
        <option value="value1" selected>В обработке</option>
        <option value="value2">Завершен</option>
        <option value="value3">Невозможен</option>
      </select></td>
  </tr>
  </tbody>
</table>
<button>Сохранить</button>
</form>
</body>
</html>
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось ksa, 08.06.2021 в 18:49.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				08.06.2021, 14:47
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				таблица массив изменений
			 
			
		
		
		
		nastya97core,
 
<!DOCTYPE html>
<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
</head>
<body>
    <table>
        <tr>
            <td>id</td>
            <td>Стоимость</td>
            <td>Инфо</td>
            <td>Статус</td>
        </tr>
        <tr class="test">
            <td>a1</td>
            <td>123</td>
            <td><input type="text" value="перезвонить"></td>
            <td><select name="select">
                    <option value="value1" selected>В обработке</option>
                    <option value="value2">Завершен</option>
                    <option value="value3">Невозможен</option>
                </select></td>
        </tr>
        <tr class="test">
            <td>a2</td>
            <td>1413</td>
            <td><input type="text"></td>
            <td><select name="select">
                    <option value="value1">В обработке</option>
                    <option value="value2" selected>Завершен</option>
                    <option value="value3">Невозможен</option>
                </select></td>
        </tr>
        <tr class="test">
            <td>a3</td>
            <td>222</td>
            <td><input type="text"></td>
            <td><select name="select">
                    <option value="value1" selected>В обработке</option>
                    <option value="value2">Завершен</option>
                    <option value="value3">Невозможен</option>
                </select></td>
        </tr>
    </table>
    <button>Сохранить</button>
    <pre id="out"></pre>
    <script>
        const getData = _ => [...document.querySelectorAll('.test')].map(({ cells }) => {
            let [id, price, info, status] = [...cells].map(({
                textContent,
                children
            }) => children.length ? children[0].value : textContent);
            return {
                id,
                info,
                status
            }
        });
        let currentArr = getData();
        document.querySelector('button').addEventListener('click', _ => {
            let arr = getData();
            arr = arr.filter((obj, i) => {
                let el = currentArr[i],
                    test;
                ['info', 'status'].forEach(k => obj[k] === el[k] ? delete obj[k] : (test = true))
                return test
            })
            out.innerHTML = JSON.stringify(arr, "", 1)
        })
    </script>
</body>
</html>
 
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |