Всем доброго времени суток уважаемые форумчане, обычно решаю свои проблемы самостоятельно, но в этот раз требуется Ваша подсказка, задача проста: необходимо с помощью связки php + ajax вывести определенное количество изображений в браузер, скрипт в упрощенном виде выглядит так: HTML: <div id="show"> Вниз </div> Код (Javascript): <script type="text/javascript"> var form = $('#show'); var cnt = 1; form.on("click", function(){ $.ajax( { method: "POST", data: {cnt}, url: "pages/portfolio.php", success: function(data){ $('#show').html(data); } }); }); </script> PHP: $cnt = filter_input(INPUT_POST, 'cnt', FILTER_SANITIZE_SPECIAL_CHARS); $num = 0; if ($cnt){ showFoto($cnt,$_SESSION['img']); $output = array_slice($_SESSION['img'], $cnt); $_SESSION['img'] = $output; } function showFoto($cnt,$files){ foreach ($_SESSION['img'] as $files){ $num++; echo <<<HERE <img class='portfolio' src='../foto/$files' alt='$alt' id='$files' onclick="document.getElementById('$files').requestFullscreen()";> HERE; if ($num == $cnt){ break; } } } И все вроде бы срабатывает, НО по какой-то неведомой мне причине при повторной отправке ajax-ом значения cnt, массив $_SESSION['img'] уменьшается каждый раз не на 1 элемент, а в удвоенном знаении, из-за чего часть изображений автоматически пролистывается. Я уже грешил на функцию array_slice, но тщетно. Не могу понять где проблема
Как всегда, хотят чтоб помогли именно в их видении решении задачи,и которую подробно не описали, чую там гораздо проще можно сделать если понимать задачу Пока из приведенного кода вижу что в функции не инициализируется $num, откуда там начинается отсчёт неясно
Спасибо за Ваш комментарий на счет $num добавил значение, я не стал полностью код выкладывать, так как будет еще запутаннее возможно чем я написал. Я взял именно тот кусок кода в котором происходит ошибка. Суть в том, что первоначально я получаю набор файлов из дирректории foto через функцию readdir и сохраняю их в виде массива в сессионную переменную, которую называю $_SESSION['img'], затем я с помощью AJAX отправляю значение переменной cnt, которая по умолчанию у меня равна 1, переменная отправляется в php каждый раз при нажатии на <div> с id = 'show', и отправляется в php, где присваевается переменной $cnt. В php по моей задумке внутри функции showFoto я пробегаю по массиву $_SESSION['img'] ровно столько раз сколько содержит в себе переменная $cnt, затем обрываю функцию и отнимаю из массива $_SESSION['img'] это же значение. На экране я вижу добавленное фото. Затем я нажимаю на <div> с id = show еще раз, но вместо следующего значения в массиве $_SESSION['img'] я перепрыгиваю через значение, то есть часть фото пролистывается, потом еще и еще и так в геометрической прогрессии.. Сначала я грешил на array_slice, но она срабатывает в точности правильно. Потом на переменную $cnt, но она тоже не меняется, $_SESSION['img'] меняется именно после отработки AJAX, каждый раз в геомиетрической прогрессии, то есть каждый раз внутрь функции showFoto оно уже приходит измененное, я не могу понять почему и как мне от этого избавится! PHP: $cnt = filter_input(INPUT_POST, 'cnt', FILTER_SANITIZE_SPECIAL_CHARS); $num = 0; if ($cnt){ showFoto($cnt); $output = array_slice($_SESSION['img'], $cnt); $_SESSION['img'] = $output; } function showFoto($cnt){ foreach ($_SESSION['img'] as $files){ $num++; echo <<<HERE <img class='portfolio' src='../foto/$files' alt='$alt' id='$files' onclick="document.getElementById('$files').requestFullscreen()";> HERE; if ($num == $cnt){ break; } } } Вот код php в последней редакции.. --- Добавлено --- Пардоньте.. Проблема видимо действительно в аяксе.. при нажатии на div каждый раз POST запрос увеличивается в геометрической прогрессии.. Это ошибка в JS не PHP
PHP: showFoto($cnt); уже исправил. По моей задумке внутри функции showFoto я пробегаю по массиву $_SESSION['img'] ровно столько раз сколько содержит в себе переменная $cnt, затем обрываю функцию и отнимаю из массива $_SESSION['img'] это же значение. На экране я вижу добавленное фото
Чем говоря как то кривенько все... Вы лучше задачу опишите типа при нажатии на кнопку хочу видеть то то и то то. Непонятно зачем сессии, зачем по несколько раз пролегать иид итп Вы цель скажите конечную - при каждом нажатии очередную картинку из директории выводить?
Да суть в этом и делаю да кривенько, потому что по-своему (по костылевому ) при правильном подходе я знаю что это делается через LIMITы SQL например, но в связи с особенностями кода, искал альтернативный путь, суть PHP уже работает, я уже написал выше, что проблема кроется в множественных POST запросах, то есть где-то в JS, так что ушел лопатить