Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.01.2016, 16:27
Аспирант
Отправить личное сообщение для K_PECT Посмотреть профиль Найти все сообщения от K_PECT
 
Регистрация: 10.12.2015
Сообщений: 47

Помогите с json
Здравствуйте, помогите разобраться!
Формирую json и отправляю в php:
function send() {
var textfield1 = '';
var textfield2 = '';
var textfield3 = '';
var textfield4 = '';
var textfield5 = '';
var ARTKL01 = '';
var ARTKL02 = '';
var ARTKL03 = '';
var ARTKL04 = '';
var ARTKL05 = '';
var kolichestvo01 = '';
var kolichestvo02 = '';
var kolichestvo03 = '';
var kolichestvo04 = '';
var kolichestvo05 = '';

var data = {
  "pole1": textfield1,
  "pole2": textfield2,
  "pole3": textfield3,
  "pole4": textfield4,
  "pole5": textfield5,
  "zakaz": [
{ "artikul":ARTKL01, "kolichestvo":kolichestvo01, },
{ "artikul":ARTKL02, "kolichestvo":kolichestvo02, },
{ "artikul":ARTKL03, "kolichestvo":kolichestvo03, },
{ "artikul":ARTKL04, "kolichestvo":kolichestvo04, },
{ "artikul":ARTKL05, "kolichestvo":kolichestvo05  }
]
}
var obj = {};
Object.keys(data).forEach(function (key) {
if(key == 'zakaz'){
  var arr =  data[key].filter(function(el) {
  return el.artikul && el.kolichestvo
});
if(arr.length) obj[key] = arr
}
else {
   data[key] &&  (obj[key] = data[key])
}
});
// отправляю json в php
var send = JSON.stringify(obj);
$.ajax({
type: "POST",
url: "send_json.php",
data: ( {"send_json" : send})});
}

Принимаю json в php:
if (isset($_POST['send_json'])) {$jsonString = $_POST['send_json'];}
$zakaz_json = json_decode($jsonString);
$textfield1 = $zakaz_json->pole1; 
$textfield2 = $zakaz_json->pole2; 
$textfield3 = $zakaz_json->pole3; 
$textfield4 = $zakaz_json->pole4; 
$textfield5 = $zakaz_json->pole5; 

$artikul01 = $zakaz_json->zakaz[1]->artikul;
$artikul02 = $zakaz_json->zakaz[2]->artikul;
$artikul03 = $zakaz_json->zakaz[3]->artikul;
$artikul04 = $zakaz_json->zakaz[4]->artikul;
$artikul05 = $zakaz_json->zakaz[5]->artikul;
$kolichestvo01 = $zakaz_json->zakaz[1]->kolichestvo;
$kolichestvo02 = $zakaz_json->zakaz[2]->kolichestvo;
$kolichestvo03 = $zakaz_json->zakaz[3]->kolichestvo;
$kolichestvo04 = $zakaz_json->zakaz[4]->kolichestvo;
$kolichestvo05 = $zakaz_json->zakaz[5]->kolichestvo;

Вот тут начинается ступор.
Дело в том, что не известно какие именно артикулы придут в переменные $artikul01,$artikul02,$artikul03,$artikul04,$artik ul05.
В зависимости от того какой артикул пришел нужно назначить переменные.
Например:
Если в $artikul01 пришел артикул P6001, то нужно присвоить $Prodname01='Бананы', $Ves01='1000г', $Price01 = '190' и взять количество из $kolichestvo01;
Начал делать так:
if ($artikul01 == "P6001") {$Prodname01='Бананы' ; $Ves01='1000г' ; $Price01 = '190' ; $kolvo01 = $kolichestvo01};
if ($artikul01 == "P3001") {$Prodname01='Бананы' ; $Ves01='500г' ; $Price01 = '110' ; $kolvo01 = $kolichestvo01};

if ($artikul01 == "P6002") {$Prodname01='Клубника' ; $Ves01='1000г' ; $Price01 = '190' ; $kolvo01 = $kolichestvo01};
if ($artikul01 == "P3002") {$Prodname01='Клубника' ; $Ves01='500г' ; $Price01 = '110' ; $kolvo01 = $kolichestvo01};

if ($artikul01 == "P6003") {$Prodname01='Яблоки' ; $Ves01='1000г' ; $Price01 = '190' ; $kolvo01 = $kolichestvo01};
if ($artikul01 == "P3003") {$Prodname01='Яблоки' ; $Ves01='500г' ; $Price01 = '110' ; $kolvo01 = $kolichestvo01};

if ($artikul01 == "P6004") {$Prodname01='Груши' ; $Ves01='1000г' ; $Price01 = '190' ; $kolvo01 = $kolichestvo01};
if ($artikul01 == "P3004") {$Prodname01='Груши' ; $Ves01='500г' ; $Price01 = '110' ; $kolvo01 = $kolichestvo01};

if ($artikul01 == "P6005") {$Prodname01='Апельсины' ; $Ves01='1000г' ; $Price01 = '190' ; $kolvo01 = $kolichestvo01};
if ($artikul01 == "P3005") {$Prodname01='Апельсины' ; $Ves01='500г' ; $Price01 = '110' ; $kolvo01 = $kolichestvo01};


Потом также по второму артикулу:
if ($artikul02 == "P6001") {$Prodname02='Бананы' ; $Ves02='1000г' ; $Price02 = '190' ; $kolvo02 = $kolichestvo02};
if ($artikul01 == "P3001") {$Prodname02='Бананы' ; $Ves02='500г' ; $Price02 = '110' ; $kolvo02 = $kolichestvo02};

if ($artikul02 == "P6002") {$Prodname02='Клубника' ; $Ves02='1000г' ; $Price02 = '190' ; $kolvo02 = $kolichestvo02};
if ($artikul02 == "P3002") {$Prodname02='Клубника' ; $Ves02='500г' ; $Price02 = '110' ; $kolvo02 = $kolichestvo02};
// и т.д.


И так по каждому артикулу.
Понял, что это полный бред. Ведь артикулов может быть бесконечное кол-во.
Начал думать, что может есть вариант правильнее с меньшим кодом, но моих знаний и навыков хватило только на это.
Помогите, пожалуйста, разобраться!

А может есть возможность отправлять в БД артикул и количество, а БД будет возвращать название товара, стоимость и т.д.?
Я нуб! Извините!

Последний раз редактировалось K_PECT, 04.01.2016 в 16:39.
Ответить с цитированием
  #2 (permalink)  
Старый 04.01.2016, 19:44
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сразу же вопрос - нахрена значения массива имеющего ключ присваивать переменной? Какую роль они у вас играют? Ну ведь никакой, и пользы от них никакой нет, зачем же это делается?
Ответить с цитированием
  #3 (permalink)  
Старый 05.01.2016, 13:59
Аспирант
Отправить личное сообщение для K_PECT Посмотреть профиль Найти все сообщения от K_PECT
 
Регистрация: 10.12.2015
Сообщений: 47

Я нуб. Что вы имеете ввиду?
Ответить с цитированием
  #4 (permalink)  
Старый 05.01.2016, 14:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А то, что и на клиенте имена параметров с потолка, и на сервере с ними же каша.

Сообщение от K_PECT
А может есть возможность отправлять в БД артикул и количество, а БД будет возвращать название товара, стоимость и т.д.?
Есть, а также база данных может формировать уникальный идентификатор, который более удобен, чем артикул являющийся строкой, хотя можно и полю артикула определить уникальный индекс, но если бы только выборка нужна была, а ведь потребуется гораздо большего.

Для сервера нужен уникальный идентификатор и количество товара, все остальное он получит из базы. Вот только на клиенте никчемные имена полей: "pole1",..., причем не понятно с какого перепуга нужно формировать на нем json, если для передачи данных на сервер уже давно есть готовое и удобное - форма. Потом на сервер с именованием и определением тоже каша.

Желательно не афишировать структуру таблиц базы данных, но можно использовать в качестве имен полей формы имена соответствующих полей таблицы базы, но без префикса. В этом случае легко связать полученные данные с конечным адресатом. Можно поступить и иным путем когда имена знает только сервер, а имена полей формы это ключи этих полей, по которым их можно получить.

Это относительно именования. В случае же получения товара с клиента, вообще ничего не требуется, достаточно одного имени для всех полей формы как ключа массива, индексами которого будут идентификаторы товаров. Сервер получить массив в котором ключ это ID товара, а значение, это выбранное его количество. Что-то сложного с полями тут и определять не надо, имя поля одно, и оно известно, это имя и будет фигурировать для WHERE, остается подставить ключ из массива, и по указанному ID будет получена информация о товаре.

Нужно начинать изучать серьезно и базы данных, и серверный язык, и т.д., ибо рассказать все да еще простыми словами не возможно. Но и так писать код как приведено нельзя, в нем практически все не нужное, как на клиентской стороне, так и на серверной.
Ответить с цитированием
  #5 (permalink)  
Старый 05.01.2016, 20:44
Аспирант
Отправить личное сообщение для K_PECT Посмотреть профиль Найти все сообщения от K_PECT
 
Регистрация: 10.12.2015
Сообщений: 47

Спасибо огромное за подробные разъяснения! Буду пробовать доставать информацию о товаре из БД
Ответить с цитированием
  #6 (permalink)  
Старый 06.01.2016, 01:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Конечно надо пробовать, и если я угадал, что речь идет о выбранных товарах, то:

1) выбор товаров, а тем более и его количества, это форма, которая в отличии от js + json имеет преимущество - при отключенном js на клиенте сервер все равно получит данные.

2) именование полей формы, это - name="id[222]", name="id[333]", где id, к примеру, часть имени поля таблицы базы определяющей идентификатор товара. Хотя, как уже говорилось, в данном случае это не так важно, ибо речь идет о добавлении товаров, или их выборе, то сценарий определен под данную задачу, а товары в одной таблице, а значит и известно имя одного поля.

3) товары на сервере в этом случае, это массив $_POST['id], после обработки пустых и возможной шелухи:

$product = array_diff(array_map('intval', $_POST['id]), [0]);


222 => 1,
333 => 5,
....

ID товаров (ключи этого массива) подставляются в запрос, поэтому их также обязательно привести к типу int (если только не работа с подготовленными запросами например PDO):

if($id = array_diff(array_map('intval', array_keys($product)), [0])) {
     $sql = 'SELECT * FROM table WHERE product_id IN(' . implode(',', $id) . ')';
}


и будет получено все по запрашиваемым товарам

4) абстракции pole1, $textfield1, $artikul01, $kolichestvo01 ... выбросить.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите. обработка JSON ответа heyBro AJAX и COMET 1 14.10.2015 14:49
Помогите решить задачу на jQuery с использованием JSON, очень нужно!!!! staseward jQuery 1 10.04.2015 09:01
Помогите с Json Alex_dark74 Общие вопросы Javascript 2 06.10.2014 12:57
Помогите разобраться с JSON Alex_dark74 Учебные материалы 2 17.08.2014 13:03
Не могу распарсить JSON. gorenie jQuery 3 29.11.2013 22:26