Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2016, 23:10   #11
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Distemper Посмотреть сообщение
точнее на одной странице запоминается, но при переходе на другую как обычно слетает все.
Так, пардон, там нифига не «слетает всё» – а ты сам, своими руками грохаешь всё вот этим бредокодом:
Цитата:
Сообщение от Distemper Посмотреть сообщение
PHP код:
if (isset($_POST["brandItem"]))  
            { 
                
$checkBrand implode(','$_POST["brandItem"]);  
                
$_SESSION['brandChecked'] = $_POST["brandItem"];
            } else { 
                
$_SESSION['brandChecked'] = 0
            } 
Т.е. согласно твоему коду: если нет данных из формы ($_POST) – то нужно грохнуть данные в $_SESSION.
Откуда на 2-й, 3-й, 100500-й странице появятся данные, которые ты отправил из формы на 1-й странице?
Эти данные в $_SESSION не грохать нужно – а использовать в SQL-запросах, как ранее там использовались данные из $_POST + для активации чекбоксов в фильтрах.

Блин, я чё по-китайски пишу..?
Цитата:
Сообщение от Andkorol Посмотреть сообщение
Если существуют данные из формы ($_POST) – то переменные $checkBrand, $checkCloth и $checkSize получают свои значения из $_POST (как это и сделано сейчас) + происходит запись этих значений в $_SESSION для последующих страниц.
Иначе – эти переменные получают свои значения из $_SESSION (если там есть соответствующие значения для этих переменных, само собой).
Разжевываю псевдокодом:
PHP код:
if(существуют данные из формы ($_POST)) {
    
$checkBrand получает своё значение из $_POST;
    
$_SESSION['checkBrand'] = сохраняем значение из $_POST;
    
$checkCloth получает своё значение из $_POST;
    
$_SESSION['checkCloth'] = сохраняем значение из $_POST;
    
$checkSize получает своё значение из $_POST;
    
$_SESSION['checkSize'] = сохраняем значение из $_POST;
}
else {
    
$checkBrand получает своё значение из $_SESSION['checkBrand'];
    
$checkCloth получает своё значение из $_SESSION['checkCloth'];
    
$checkSize получает своё значение из $_SESSION['checkSize'];


Последний раз редактировалось Andkorol; 13.06.2016 в 23:13.
Andkorol вне форума Ответить с цитированием
Старый 13.06.2016, 23:49   #12
Distemper
Пользователь
 
Регистрация: 05.09.2011
Сообщений: 12
По умолчанию

Я не могу сказать что хорошо разбираюсь в php, но разобраться с этим вопросом мне надо, поэтому и пробую, делаю как могу пока )

Я так понимаю, что код ниже необходимо использовать в action'e getProductsListByCategory ?
Я все это время делал запись в сессии на html странице, наверное поэтому у меня сейчас чекбоксы сохраняются, но фильтрация при переходе на новую страницу не работает уже, так?

PHP код:
<?            
 
if (isset($_POST["brandItem"])) 
            {
                
$checkBrand implode(','$_POST["brandItem"]); 
                
$_SESSION['checkBrand'] = $_POST["brandItem"];  
                
print_r($_SESSION["checkBrand"]);
            } else {
                
$checkBrand $_SESSION["checkBrand"];
            }
?>
p.s. для пробы пока только по бренду делаю фильтр ,как разберусь на все сделаю

Последний раз редактировалось Distemper; 13.06.2016 в 23:53.
Distemper вне форума Ответить с цитированием
Старый 14.06.2016, 00:56   #13
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Distemper Посмотреть сообщение
Я так понимаю, что код ниже необходимо использовать в action'e getProductsListByCategory ?
Ну естественно, в getProductsListByCategory.
Какая ещё «запись в сессии на html странице» – чё это за бред?
Andkorol вне форума Ответить с цитированием
Старый 14.06.2016, 07:50   #14
Distemper
Пользователь
 
Регистрация: 05.09.2011
Сообщений: 12
По умолчанию

Ура заработало =)
Только чекбоксы почему то не снимаются, когда я сам это делаю. По одному снимать можно а вмест нет, при обновлении все равно предыдущее состояние ставится.
PHP код:
        if (isset($_POST))
        {
            if (isset(
$_POST["brandItem"])) 
            {
                
$checkBrand implode(','$_POST["brandItem"]); 
                
$_SESSION['checkBrand'] = $_POST['brandItem'];
                            } else {
                
$checkBrand implode(',',$_SESSION['checkBrand']);
            } 
Код HTML:
                                        <?php foreach ($brands as $brandItem): ?>
                                            <tr>
                                                <td>
                            <?php 
                            $checked = (!empty($_SESSION['checkBrand']) && in_array($brandItem['id'], $_SESSION['checkBrand'])) ? 'checked' : '';
                            ?>
                                                    <input <?=$checked; ?> type="checkbox" name="brandItem[]"
                                                        id="brand<?php echo $brandItem['id'];?>" value="<?php echo $brandItem['id'];?>">
                                                    <label for="brand<?php echo $brandItem['id'];?>"><?php echo $brandItem['name'];?></label>               
                                                </td>
                                            </tr>
                                        <?php endforeach; ?>
Distemper вне форума Ответить с цитированием
Старый 14.06.2016, 07:57   #15
Distemper
Пользователь
 
Регистрация: 05.09.2011
Сообщений: 12
По умолчанию

Хм...получается, если я сам хочу снять все чекбоксы, то мне надо сессию завершить, иначе из нее же берется информация и чекбокс как ни крути будет нажат.
Distemper вне форума Ответить с цитированием
Старый 14.06.2016, 10:18   #16
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Distemper Посмотреть сообщение
PHP код:
        if (isset($_POST))
        {
            if (isset(
$_POST["brandItem"])) 
            {
                
$checkBrand implode(','$_POST["brandItem"]); 
                
$_SESSION['checkBrand'] = $_POST['brandItem'];
                            } else {
                
$checkBrand implode(',',$_SESSION['checkBrand']);
            } 
И всё равно ж дурь написал...
Я псевдокодом чётко и ясно описал, что $checkBrand получает значение из $_SESSION только тогда, когда данных из формы НЕТ.
А ты всё равно этот процесс лепишь именно в обработку $_POST из формы.
Откуда $_POST на 100500-й странице..?

Утомил ты меня:
PHP код:
if(!empty($_POST['submit'])) { 
    
// данные из формы ЕСТЬ (работает форма с фильтрами, 1-я страница)
    
if(!empty($_POST['brandItem'])) {
        
$checkBrand implode(','$_POST['brandItem']);
        
$_SESSION['checkBrand'] = $_POST['brandItem'];
    }
    else {
        unset(
$_SESSION['checkBrand']);
    }
}
else { 
    
// данных из формы НЕТ (работает постраничная навигация, 100500-я страница)
    
$checkBrand = (!empty($_SESSION['checkBrand'])) ? implode(','$_SESSION['checkBrand']) : '';

Andkorol вне форума Ответить с цитированием
Старый 14.06.2016, 10:40   #17
Distemper
Пользователь
 
Регистрация: 05.09.2011
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
И всё равно ж дурь написал...
Я псевдокодом чётко и ясно описал, что $checkBrand получает значение из $_SESSION только тогда, когда данных из формы НЕТ.
А ты всё равно этот процесс лепишь именно в обработку $_POST из формы.
Откуда $_POST на 100500-й странице..?

Утомил ты меня:
PHP код:
if(!empty($_POST['submit'])) { 
    
// данные из формы ЕСТЬ (работает форма с фильтрами, 1-я страница)
    
if(!empty($_POST['brandItem'])) {
        
$checkBrand implode(','$_POST['brandItem']);
        
$_SESSION['checkBrand'] = $_POST['brandItem'];
    }
    else {
        unset(
$_SESSION['checkBrand']);
    }
}
else { 
    
// данных из формы НЕТ (работает постраничная навигация, 100500-я страница)
    
$checkBrand = (!empty($_SESSION['checkBrand'])) ? implode(','$_SESSION['checkBrand']) : '';

Спасибо большое. Как ни прискорбно, но я даже не знал о функции unset
Буду учить учить учить.
Distemper вне форума Ответить с цитированием
Старый 14.06.2016, 10:59   #18
Distemper
Пользователь
 
Регистрация: 05.09.2011
Сообщений: 12
По умолчанию

Еще вопрос один. Если я метод отправки формы поменяю на GET, нужно ли менять обработку как-то? Или все то же самое остается ?
Distemper вне форума Ответить с цитированием
Старый 14.06.2016, 11:03   #19
Distemper
Пользователь
 
Регистрация: 05.09.2011
Сообщений: 12
По умолчанию

На это можно не отвечать )) Попробовал все норм работает.
А то с методом POST при обновлении постоянно запрашивает действительно ли хочу отправить форму. И если закрыть браузер, то потом не этой же странице с формой не открывает, перезаходить приходится.
Distemper вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить нажатый панель StatusBar-а SASFM Компоненты Delphi 2 27.12.2015 18:26
Как выполнить функцию в случае нажатия на CheckBox, если данный CheckBox был добавлен через код? PAMAC Microsoft Office Excel 7 21.02.2013 15:33
Как запомнить координаты Image? werrey Общие вопросы Delphi 4 21.07.2011 23:08
Как запомнить строку.... Avvakymova Паскаль, Turbo Pascal, PascalABC.NET 10 13.05.2011 23:55
Как запомнить столько Данных? valerij Microsoft Office Excel 18 03.05.2010 19:52