Помогите с 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}; // и т.д. И так по каждому артикулу. Понял, что это полный бред. Ведь артикулов может быть бесконечное кол-во. Начал думать, что может есть вариант правильнее с меньшим кодом, но моих знаний и навыков хватило только на это. Помогите, пожалуйста, разобраться! А может есть возможность отправлять в БД артикул и количество, а БД будет возвращать название товара, стоимость и т.д.? Я нуб! Извините! |
Сразу же вопрос - нахрена значения массива имеющего ключ присваивать переменной? Какую роль они у вас играют? Ну ведь никакой, и пользы от них никакой нет, зачем же это делается?
|
Я нуб. Что вы имеете ввиду?
|
А то, что и на клиенте имена параметров с потолка, и на сервере с ними же каша.
Цитата:
Для сервера нужен уникальный идентификатор и количество товара, все остальное он получит из базы. Вот только на клиенте никчемные имена полей: "pole1",..., причем не понятно с какого перепуга нужно формировать на нем json, если для передачи данных на сервер уже давно есть готовое и удобное - форма. Потом на сервер с именованием и определением тоже каша. Желательно не афишировать структуру таблиц базы данных, но можно использовать в качестве имен полей формы имена соответствующих полей таблицы базы, но без префикса. В этом случае легко связать полученные данные с конечным адресатом. Можно поступить и иным путем когда имена знает только сервер, а имена полей формы это ключи этих полей, по которым их можно получить. Это относительно именования. В случае же получения товара с клиента, вообще ничего не требуется, достаточно одного имени для всех полей формы как ключа массива, индексами которого будут идентификаторы товаров. Сервер получить массив в котором ключ это ID товара, а значение, это выбранное его количество. Что-то сложного с полями тут и определять не надо, имя поля одно, и оно известно, это имя и будет фигурировать для WHERE, остается подставить ключ из массива, и по указанному ID будет получена информация о товаре. Нужно начинать изучать серьезно и базы данных, и серверный язык, и т.д., ибо рассказать все да еще простыми словами не возможно. Но и так писать код как приведено нельзя, в нем практически все не нужное, как на клиентской стороне, так и на серверной. |
Спасибо огромное за подробные разъяснения! Буду пробовать доставать информацию о товаре из БД
|
Конечно надо пробовать, и если я угадал, что речь идет о выбранных товарах, то:
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 ... выбросить. |
Часовой пояс GMT +3, время: 11:48. |