[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка и формирование массива
Страницы: 1, 2, 3
sendxt
Hi all, нужен совет, помощь не знаю как поступить в этой ситуации... Вообщем к вопросу что я хочу? Буду выводить меню на каждый день недели, который есть в бд.
Разметка примерно такого вида.

<div> // Monday
<input type="checkbox" name="product_is_free[{product_id}]" {is_free} value="1" id="product_is_free_{product_id}"/></br>
</div>

<div>
// Tuesday
<input type="checkbox" name="product_is_free[{product_id}]" {is_free} value="1" id="product_is_free_{product_id}"/></br>
</div>


Задача стоит в том чтобы как-то отметить чекбоксы по WDAY. я вывожу эти блоки Понедельник, вторник и.т.д только те которые есть в бд.
Если не связывать их с днём то, в каждом дне отметятся все существующие чекбоксы.
Мне пришло одно на ум добавить к name="product_is_free[{product_id}][]" ещё одну квадратную скобку для дня недели чтобы как-то отделять

раньше редактирование было по одному дню просто делал
$returnArray[$row['WDAY']] = $row['PRODUCT_ID'];


как сформировать sql запрос и массив такого вида? И вообще по одной таблице это реально?

$q = "SELECT PRODUCT_ID, PRODUCT_COUNT, WDAY FROM ED_MOD_KITCHEN_DAY_MENU WHERE MENU_ID = :menu_id ORDER BY WDAY";
sendxt
надо предпологаю сформировать такой массив чтобы инпут был такого вида


<div> // Monday
<input type="checkbox" name="product_is_free[{product_id}][{wday}]" {is_free} value="1" id="product_is_free_{product_id}"/></br>
</div>

I++
<input type="checkbox" name="product_is_free[1][33]" {is_free} value="1" id="product_is_free_{product_id}"/>


можно так:
product_is_free[wday][id]

и тогда каждый чекбокс будет принадлежать своему дню.

В php получим POSTом массив, в котором будет от 1 до 7, а внутри будет другой массив с id

типо вот так:

$product_is_free[1][33]=1


А там внутри уже можно фантазировать:

<?php

foreach($_POST['product_is_free'] as $day => $val)
{
foreach($val as $id => $count)
{
echo 'День недели: ', $day, ' ID: ', $id, ' количество: ', $count;
}
}

sendxt
I++
Дело в том что это для раздела редактирование. таблица как видно уже с значениями для чекбоксов есть, рядом WDAY к какому дню эти значения.

а в самом скрипте примерно выгледит так:



if ($menu_id > 0) {

$menu = $this->_getMenuById($menu_id);
$dates = $this->_getMenuByIdDates($menu_id);
$product_count = $this->_getMenuProductCount($menu_id);
$arrayOfCategories = $this->_getAllCreatedCategories();
$is_free = $this->_getIfFreeProduct($menu_id);
$food_is_served = $this->_getWhenFoodIsServed($menu_id); // Получаем чекбоксы когда блюдо подается
if (is_null($arrayOfCategories) === FALSE) {
$wday = array();
foreach($food_is_served as $v){
if(!in_array($v['WDAY'],$wday)) $wday[] = $v['WDAY'];
}
$served_count = sizeof($wday);

for($d = 0; $d < $served_count; $d++){ // дни недели
$served_wday = $wday[$d];
$served_wday_invert = DisassembleBit($served_wday);
$disasembleBit_invert = $this->invert_DisassembleBit($served_wday_invert[0]);
$week_day_name = text('core_weekday_'.$disasembleBit_invert);

$tmpl->set_var(array(
'week_label' => $week_day_name,
'week_id' => $disasembleBit_invert
));

for ($i = 0; $i < count($arrayOfCategories); $i++) { // категории продуктов( типо первое, второе, напитки)
$tmpl->set_var(array(
'category_label' => $arrayOfCategories[$i]['LABEL']
));


$arrayOfProducts = $this->_getAllProductsById($arrayOfCategories[$i]['ID']);
//dump_source($dates);

if (is_null($arrayOfProducts) === FALSE) {
for ($j = 0; $j < count($arrayOfProducts); $j++) { //и тут уже сами продукты , если оставляю так как щас просто отмечаются в каждом дне все продукты что есть.
$tmpl->set_var(array(
'product_label' => $arrayOfProducts[$j]['LABEL'],
'product_avatar' => "data:image/jpeg;base64," . $arrayOfProducts[$j]['AVATAR_SMALL'],
'product_id' => $arrayOfProducts[$j]['ID'],
'category_id' => $arrayOfCategories[$i]['ID'],
'checked' => in_array($arrayOfProducts[$j]['ID'], $menu) ? 'checked' : '',
'datefrom' => $dates['DATEFROM'],
'dateto' => $dates['DATETO'],
'product_count_value' => $product_count[$arrayOfProducts[$j]['ID']] > 0 ? $product_count[$arrayOfProducts[$j]['ID']] : 0,
'is_free' => is_null($is_free) === FALSE && !empty($is_free[$arrayOfProducts[$j]['ID']]) ? 'checked' : '',
'breakfast_check' => is_null($food_is_served) === FALSE && $food_is_served[$arrayOfProducts[$j]['ID']]['BREAKFAST'] == 1 ? 'checked' : '',
'lunch_check' => is_null($food_is_served) === FALSE && $food_is_served[$arrayOfProducts[$j]['ID']]['LUNCH'] == 1 ? 'checked' : '',
'supper_check' => is_null($food_is_served) === FALSE && $food_is_served[$arrayOfProducts[$j]['ID']]['SUPPER'] == 1 ? 'checked' : '',
'free_count_value' => is_null($food_is_served) === FALSE && $food_is_served[$arrayOfProducts[$j]['ID']]['FREE_COUNT'] >= 0 ? $food_is_served[$arrayOfProducts[$j]['ID']]['FREE_COUNT'] : 0
));

$tmpl->parse('products_list_php', 'products_list_tpl', $j == 0 ? false : true);
}
}


$tmpl->parse('category_list_php', 'category_list_tpl', $i == 0 ? false : true);
}
$tmpl->parse('week_list_php', 'week_list_tpl', $d == 0 ? false : true);
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.