Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 25.12.2019
Сообщений: 10

Как изменить цикл foreach, что бы поменять результат?

27.05.2021, 18:44. Показов 591. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Заранее извините за вопрос, нормально сформулировать не смог, голова уже кипит
Есть форма:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<form action="" method="GET">
                    <div class="cat-checkbox">
                        <p>Категории</p>
                        <input type="checkbox" name="category1" id="check-asus" value="1" <?php if($_GET['category1']==1) echo "checked";?>>
                        <label for="check-asus">ASUS</label>
                        <input type="checkbox" name="category2" id="check-gig" value="2" <?php if($_GET['category2']==2) echo "checked";?> >
                        <label for="check-gig">GIGABYTE</label>
                        <input type="checkbox" name="category3" id="check-msi" value="3" <?php if($_GET['category3']==3) echo "checked";?> >
                        <label for="check-msi">MSI</label>
                        <input type="checkbox" name="category4" id="check-palit" value="4" <?php if($_GET['category4']==4) echo "checked";?> >
                        <label for="check-palit">PALIT</label>
                    </div>
                    <div class="man-checkbox">
                        <p>Производитель чипсета</p>
                        <input type="checkbox" name="man1" id="check-nvidia" value="1" <?php if($_GET['man1']==1) echo "checked";?> >
                        <label for="check-nvidia">NVIDIA</label>
                        <input type="checkbox" name="man2" id="check-amd" value="2" <?php if($_GET['man2']==2) echo "checked";?> >
                        <label for="check-amd">AMD</label>
                    </div>
                    <button type="submit" name="">Применить</button>
                </form>
И есть такой php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php 
                        if(isset($_GET['category1'])) $or[0]="category = {$_GET['category1']}"; 
                        if(isset($_GET['category2'])) $or[1]="category = {$_GET['category2']}"; 
                        if(isset($_GET['category3'])) $or[2]="category = {$_GET['category3']}";
                        if(isset($_GET['category4'])) $or[3]="category = {$_GET['category4']}";
                        // if(isset($_GET['man1'])) $or[4]="manufacturer = {$_GET['man1']}";
                        // if(isset($_GET['man2'])) $or[5]="manufacturer = {$_GET['man2']}";
 
                        if(isset($or)) {
                            foreach($or as $value) {
                                if(!isset($out))
                                    $out=$value;
                                else
                                $out.=" or ".$value;
                            }
                            $out="($out) and";
                        }
 
                        // if(!isset($_GET['man1']))$_GET['man1']="'%'";
                        // if(!isset($_GET['man2']))$_GET['man2']="'%'";
 
 
                        echo "select * from `store_product` where $out";
                        // $select = mysqli_query($connect, "SELECT * FROM store_product WHERE $out");
                        
                        
                        
                    ?>
Сейчас у меня выводится вот что:

SQL
1
SELECT * FROM `store_product` WHERE (category = 1 OR category = 2) AND
Что нужно сделать, что бы строка приводилась к такому типу:

SQL
1
SELECT * FROM `store_product` WHERE (category = 1 OR category = 2) AND (manufacturer = 1 OR manufacturer = 2)
Вроде бы нужно изменить цикл, но как я понятия не имею
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.05.2021, 18:44
Ответы с готовыми решениями:

Поменять цикл в виджете c foreach на while
Здравствуйте, я в программировании не сильно нужно виджет подправить на сайте вордпресса фишка в том что при цикле foreach выводится...

Как переделать данный цикл for во вложенный цикл foreach?
Добрый день, как переделать данный цикл во вложенный цикл foreach? for (i in 0 until fieldPos.size) { for (j in 0...

Обработка XML. Цикл foreach (XmlNode.) вложенный во внешний foreach
Здравствуйте. Возникла проблема при обработке XML-файла (с помощью XMLDocument). В теме я новичок. Имеется XML файл такого типа: ...

4
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
27.05.2021, 21:30
Самое простое - скачать библиотеку с query builder. Например medoo. Собирать массивы гораздо проще чем склеивать строки.
0
1310 / 1002 / 232
Регистрация: 01.10.2018
Сообщений: 3,897
27.05.2021, 23:59
Почему не используете синтаксис IN, который вам показывали?

Что касается цикла:
PHP
1
if (isset($_GET['category'.$i]))
Цикл, естественно, со счетчиком.

Про прямой GET-запрос с формы уже писал. Повторять не буду.

Добавлено через 11 минут
Но все-таки учтите, что длина адреса ограничена, поэтому лучше сокращать, например category=1-2 или category=3 (в последнем случае в число 3 заложены те же две категории 1 и 2)

Добавлено через 2 минуты
Только категория 3 будет кодироваться числом 4. Надеюсь, догадались, как происходит кодирование
1
Заблокирован
28.05.2021, 00:04
Цитата Сообщение от Snakklick Посмотреть сообщение
$out="($out) and";
ошибка здесь. Это сразу видно. Каждый раз в цикле присваиваете одно и тоже значение.
1
0 / 0 / 0
Регистрация: 25.12.2019
Сообщений: 10
28.05.2021, 13:53  [ТС]
Цитата Сообщение от estic Посмотреть сообщение
Что касается цикла
Спасибо за ответ. Если честно я ничего не понял, а просить написать пример я побоялся. Поэтому сегодня со спокойной головой доделал сам

Цитата Сообщение от estic Посмотреть сообщение
Но все-таки учтите, что длина адреса ограничена, поэтому лучше сокращать, например category=1-2 или category=3 (в последнем случае в число 3 заложены те же две категории 1 и 2)
Думаю мне на диплом будет достаточно. Я бы поизучал ещё то что вы говорите, но времени уже немного осталось

За такой код и побить могут, но вот:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if(isset($_GET['category1'])) $or[0]="category = {$_GET['category1']}"; 
if(isset($_GET['category2'])) $or[1]="category = {$_GET['category2']}"; 
if(isset($_GET['category3'])) $or[2]="category = {$_GET['category3']}";
if(isset($_GET['category4'])) $or[3]="category = {$_GET['category4']}";
if(isset($_GET['man1'])) $and[0]="manufacturer = {$_GET['man1']}";
if(isset($_GET['man2'])) $and[1]="manufacturer = {$_GET['man2']}";
 
                        if(isset($or)) {
                            foreach($or as $value) {
                                if(!isset($out))
                                    $out=$value;
                                else
                                $out.=" or ".$value;
                            }
                            if(isset($and)) {
                               foreach($and as $value2) {
                                    if(!isset($out2))
                                        $out2=$value2;
                                    else
                                    $out2.=" or ".$value2;
                               }
                               $out="($out) and ($out2)";
                            }
                            
                        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.05.2021, 13:53
Помогаю со студенческими работами здесь

Как изменить нумерацию индексов в foreach
Привет всем. Как мне изменить нумерацию индексов в foreach. У меня вот такой пример $id_cat_1=...

Как изменить TValue в Dictionary в цикле foreach?
есть словарь с буквами. есть строка текста. нужно подсчитать количество букв из словаря в строке текста. сделал словарь: ...

Что изменить в скрипте? Когда-то почти сам написал, а сейчас не знаю где что поменять
Привет всем! Ребята, есть вот такой код, который присваивает ссылке класс active: $(document).ready(function() { ...

Как можно вместа цикла for записать через цикл foreach?
Здравствуйте. Как можно вместа цикла for записать через цикл foreach? static void Change(int a) { for (int i =...

Как заполнить выпадающий список с элементами из БД не используя цикл foreach
Здравствуйте. Скажите, как вывести Выпадающий список с элементами из бд не используя цикл foreach Всё работает но нужно, что бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Программный отбор значения справочника
Maks 21.03.2026
Процедура ВодителиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) / / Отключаем стандартную обработку (стандартное открытие формы выбора без фильтров) . . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru