Доброе время суток, Есть вопрос, требуется выделить активную ссылку в категории, 1. Код вывода категорий: PHP: <?php $res_categories = mysqli_query($connect,"SELECT * FROM log_categories"); $num_categories = mysqli_fetch_array($res_categories); do { printf ("<p><a class='' href='log.php?cat=%s'>%s</a></p>", $num_categories["id"], $num_categories["title"]); } while ($num_categories = mysqli_fetch_array($res_categories)); ?> 2. Со списком была похожая задача, разобралась. Категорию выделяла таким образом: PHP: do { if ($num_comm['cat'] == $num_cat['id']) { printf ("<option value='%s' selected>%s</option>", $num_cat["id"], $num_cat["title"]); } else {printf ("<option value='%s'>%s</option>", $num_cat["id"], $num_cat["title"]);} } while ($num_cat = mysqli_fetch_array($res_cat)); А пункте 1 пробовала реализовать, но не получается. Тут нужен другой подход для реализации данного момента. В пункте 1 вытаскивается 4 категории, придаю стили, ссылки работают, нужно при переходе, например, на страницу http://site.ru/log.php?cat=2 сделать её активной, в чём собственно и возникла трудность. Пробовала по разному, но получается коряво или не выходит совсем. На скрине в данный момент при переходе на любую из ссылок, сейчас так : Просьба, кто сталкивался с подобным, помочь в данном вопросе. Заранее благодарна, Ольга.
PHP: <?php $res_categories = mysqli_query($connect,"SELECT * FROM log_categories"); $num_categories = mysqli_fetch_array($res_categories); do { $class = ($_GET['cat'] == $num_categories["id"]) ? 'active' : 'notactive'; printf ("<p><a class='%s' href='log.php?cat=%s'>%s</a></p>", $class, $num_categories["id"], $num_categories["title"]); } while ($num_categories = mysqli_fetch_array($res_categories)); ?>
Сергей, здравствуйте У меня к вам ещё один вопрос. В данный момент всё работает, нужно чтобы при клике на ссылку http://site.ru/log.php?cat=1 была переадресация на страницу log.php. Сделала так : PHP: do { if ($_GET['cat'] ==1) {echo'<script type="text/javascript">function redirect() {location="http://site.ru/log.php";} setTimeout("redirect()", 0);</script>';} $class = ($_GET['cat'] == $num_categories["id"]) ? 'active' : 'notactive'; printf ("<p><a class='%s' href='log.php?cat=%s'>%s</a></p>", $class, $num_categories["id"], $num_categories["title"]); } while ($num_categories = mysqli_fetch_array($res_categories)); Работает, но происходит дважды перезагрузка. Что сделала не так и правильно ли ? Заранее благодарна, Ольга.
Пробовала переадресацию с http://site.ru/log.php?cat=1 на log.php по другому сделать, но получается с перезагрузкой. В сообщении 4 пробовала с помощью js сделать, да и через <meta http-equiv='Refresh'....., хотя через js более правильно, так как переадресация происходит в теле страницы. Если у кого-нибудь есть более толковое решение, буду благодарна.
Здравствуйте, правильней будет, если при клике на ссылку с http://site.ru/log.php?cat=1 будут выбираться все статьи с остальными категориями, т.е у меня их всего 4 (http://site.ru/log.php?cat=1, http://site.ru/log.php?cat=2, http://site.ru/log.php?cat=3, http://site.ru/log.php?cat=4), а при клике на ссылку со своей категорией - конкретные статьи. Как сделать, чтобы при клике на ссылку с http://site.ru/log.php?cat=1 показывались на странице все статьи из всех остальных категорий ? В принципе для этого и хотела сделать переадресацию на страницу log.php, где имеются все статьи, но в этом случае ссылка будет неактивна... --- Добавлено --- т.е по сути страница http://site.ru/log.php?cat=1 должна ссылаться на страницу log.php и выводить все статьи
Сергей, здравствуйте. Простите, что докучаю. Помогите, разобраться в данном вопросе. Как сделать чтобы, при клике на ссылку с http://site.ru/log.php?cat=1 будут выбираться все статьи с остальными категориями, т.е у меня их всего 4 (http://site.ru/log.php?cat=1, http://site.ru/log.php?cat=2, http://site.ru/log.php?cat=3, http://site.ru/log.php?cat=4), а при клике на ссылку со своей категорией - конкретные статьи. Как сделать, чтобы при клике на ссылку с http://site.ru/log.php?cat=1 показывались на странице все статьи из всех остальных категорий ? В принципе для этого и хотела сделать переадресацию на страницу log.php, где имеются все статьи, но в этом случае ссылка будет неактивна..., т.е по сути страница http://site.ru/log.php?cat=1 должна ссылаться на страницу log.php и выводить все статьи.
@olga_0630 По моему тебе нужно подключить файл log.php в этот файл где делаешь эту ссылку свою. Делать переадресацию через js это есть не очень хорошо. Лучше делать через header() Пример: PHP: header('location: /log.php'); exit;
Спасибо за ответ, так вы предложили, я уже пробовала, но это не совсем что нужно. Хотелось бы реализовать момент описанный в сообщении 7, в данный момент код выглядит так: PHP: if (mysqli_num_rows ($res_categories) > 0) { $num_categories = mysqli_fetch_array($res_categories); do { $class = ($_GET['cat'] == $num_categories["id"]) ? 'active' : 'notactive'; printf ("<p><a class='%s' href='log.php?cat=%s'>%s</a></p>", $class, $num_categories["id"], $num_categories["title"]); } while ($num_categories = mysqli_fetch_array($res_categories)); При клике на ссылку с http://site.ru/log.php?cat=1 должны выбираться все статьи с остальными категориями, их всего 4 (http://site.ru/log.php?cat=1, http://site.ru/log.php?cat=2, http://site.ru/log.php?cat=3, http://site.ru/log.php?cat=4), а при клике на ссылку со своей категорией - конкретные статьи. Спасибо за ответ. --- Добавлено --- Спасибо за ответ, так вы предложили, я уже пробовала, но это не совсем что нужно. Хотелось бы реализовать момент описанный в сообщении 7, в данный момент код выглядит так: PHP: if (mysqli_num_rows ($res_categories) > 0) { $num_categories = mysqli_fetch_array($res_categories); do { $class = ($_GET['cat'] == $num_categories["id"]) ? 'active' : 'notactive'; printf ("<p><a class='%s' href='log.php?cat=%s'>%s</a></p>", $class, $num_categories["id"], $num_categories["title"]); } while ($num_categories = mysqli_fetch_array($res_categories)); При клике на ссылку с http://site.ru/log.php?cat=1 должны выбираться все статьи с остальными категориями, их всего 4 (http://site.ru/log.php?cat=1, http://site.ru/log.php?cat=2, http://site.ru/log.php?cat=3, http://site.ru/log.php?cat=4), а при клике на ссылку со своей категорией - конкретные статьи. Спасибо за ответ.
Позже зайду и отвечу, через телефон плохо набирать сообщения, а тем более смотреть на код который вы привели в листинге.
@olga_0630 Код если честно просто ужасен, зачем на кнопку вешать $_GET[''] параметр? Мне интересно где же маусзверь критик наш велики) Покажи 2 файла: Файл где эти 4 кнопки и файл куда направляешь.
Переадресация так наверное: PHP: if($_GET['cat'] == 1) { header('location: /log.php'); } Вывод статей реализовать тоже просто. Покажите, как вы выводите все статьи на странице log.php
Да, надо было объяснить лучше, что требуется. Просьба извинить, за неверную подачу информации. По порядку... 1. Имеется страница log.php на которой имеются вывод всех статей из базы, тут всё нормально - статьи выводятся. 2. Решила разбить статьи на категории и разместить на странице log.php 4 категории, как на скрине ниже : Код для вывода категорий: PHP: echo "<div>"; $res_categories = mysqli_query($connect,"SELECT * FROM log_categories"); // без проверки $num_categories = mysqli_fetch_array($res_categories); do { printf ("<p style='display: inline-block;'><a class='' href='article.php?cat=%s'>%s</a></p>", $num_categories["id"], $num_categories["title"]); } while ($num_categories = mysqli_fetch_array($res_categories)); } else {echo "<p>Нет записей !</p>"; exit;} echo "</div>"; 3. Далее создала article.php, как видно из пункта 2 и код вывода категорий изменила, так как требуется, чтобы ссылка была активной Пользователь находясь на странице log.php после клика на ссылку с http://site.ru/article.php?cat=3 попадает на страницу article.php с cat=3 и ссылка становится активной, чтобы пользователь знал, где находится. Сам код: PHP: echo "<div>"; $res_categories = mysqli_query($connect,"SELECT * FROM log_categories"); // без проверки $num_categories = mysqli_fetch_array($res_categories); do { $class = ($_GET['cat'] == $num_categories["id"]) ? 'active' : 'notactive'; printf ("<p><a class='%s' href='article.php?cat=%s'>%s</a></p>", $class, $num_categories["id"], $num_categories["title"]); } while ($num_categories = mysqli_fetch_array($res_categories)); } else {echo "<p>Нет записей !</p>"; exit;} echo "</div>"; Классу active придаю с помощью css необходимые стили и активная категория сейчас как на скрине : 4. Находясь на странице, например, http://site.ru/article.php?cat=4 я не могу вернуться обратно на страницу log.php, так как у меня с помощью css активной странице Блог (log.php) придается стиль и странице не активна, что логично (зачем на страницу кликать, если ты на ней и так находишься), но сейчас появились категории и при переходе на страницу с категорией, вернуться назад не могу. В принципе могу удалить на странице article.php class='current' Код (Text): <li id="lesson" class="current"><a href="lesson.php" title="Видеоуроки"></a></li> и ссылка "Блог" будет активна в меню, но тогда пользователь не будет "видеть", где он находится. В принципе мелочь, но иногда сама находясь на каком-нибудь сайте смотрю в каком разделе я нахожусь. Вот и пришла идея, как из http://site.ru/article.php?cat=1 сделать ссылку на страницу log.php и при переходе, чтобы эта ссылка на странице log.php была активной и переименовать её из "Уровень 1" в "Все статьи", т.е пользователь при клике на эту ссылку должен попадать на страницу log.php, ссылка при этом должна быть активной и все статьи появляться, как в случае, когда на страницу log.php попадаешь с главного меню. Если с главного меню попадать на страницу log.php, ссылка http://site.ru/article.php?cat=1 должна быть также активной. Запрос всех статей на страницу log.php : PHP: $res = mysqli_query($connect,"SELECT * FROM log WHERE cat='$cat' ORDER BY id desc LIMIT "); Код вывода всех статей не привожу, используется функция mysqli_fetch_array для вывода статей. Надеюсь более и менее изъяснилась и вы поняли, что требуется. Спасибо за ответ и просьба извинить, что непонятно, так как в php я пока слабовата. Заранее благодарна, Ольга
@olga_0630 Ох и пришлось много прочитать, вы хотите все да и сразу. Особенно мне не нравится ваш do while.
Честно говоря, 4 пункт как-то не очень понял Зачем вам два файла log и article? Сделайте один файл article. Примерно так: PHP: <?php $categories = ['all','1','2','3','4']; //список существующих категорий if($_GET['cat']) { //если указан get-параметр 'cat' if(!in_array($_GET['cat'], $categories)) { //если такой категории не существует header('location: /articles.php'); //переадресуем на articles.php } else { //если существует $cat = ($_GET['cat'] != 'all') ? "WHERE cat='$_GET['cat']'" : ''; //если 'cat' не равен 'all' указываем название категории, иначе выбираем все статьи из базы $articles = mysqli_query($connect,"SELECT * FROM log $cat ORDER BY id desc LIMIT "); //запрос к базе } } foreach($categories as $value) { //вывод меню $title = ($value != 'all') ? "Категория $value" : "Все статьи"; //название пункта меню $class = ($value == $_GET['cat']) ? "active" : "notactive"; //проверяем активный ли это пункт меню echo '<a class="'.$class.'" href="/articles.php?cat='.$value.'">'.$title.'</a>'; //выводим пункт меню на страницу } if($articles) { //если есть статьи выводим их на экран while ($row = mysqli_fetch_array($articles)) { //вывод статей } } ?>
Здравствуйте, Сергей. Код ваш проверила, пока не работает..., пытаюсь пока сама этот код прикрутить, но пока выдаются ошибки... В строчке: Код (Text): $categories = ['all','1','2','3','4']; Выдается ошибка : Код (Text): Parse error: syntax error, unexpected '[' Далее в строчке: Код (Text): $cat = ($_GET['cat'] != 'all') ? "WHERE cat='$_GET['cat']'" : ''; также выдаётся сообщение: Код (Text): Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING Продолжаю разбираться, если вы сразу увидели ошибку будьте добры дайте знать. Спасибо заранее.
У вас версия php ниже 7.1 стоит так что будет ошибка по любому, для вас наверное будет работать так: PHP: $categories = array('all','1','2','3','4'); Попробуйте сделать так: PHP: $cat = ($_GET['cat'] != 'all') ? "WHERE cat=".(int)$_GET['cat'] : '';
Здравствуйте, пока не совсем получается, спасибо за ответ, у меня php 5.5, код не срабатывал. 1. Категории выводятся, правда пока не могу к ним стили применить, хотя класс active имеется. 2. Сейчас по клику по любой категории, выводятся сразу все статьи, а не конкретные Код выглядит так : PHP: $categories = array('all','1','2','3','4'); //список существующих категорий if($_GET['cat']) { //если указан get-параметр 'cat' if(!in_array($_GET['cat'], $categories)) { //если такой категории не существует header('location: /log.php'); } else { //если существует $cat = ($_GET['cat'] != 'all') ? "WHERE cat=".(int)$_GET['cat'] : ''; //если 'cat' не равен 'all' указываем название категории, иначе выбираем все статьи из базы $articles = mysqli_query($connect,"SELECT * FROM log $cat ORDER BY id desc"); } } foreach($categories as $value) { //вывод меню $title = ($value != 'all') ? "Категория $value" : "Все статьи"; //название пункта меню $class = ($value == $_GET['cat']) ? "active" : "notactive"; //проверяем активный ли это пункт меню echo '<a class="'.$class.'" href="/log.php?cat='.$value.'">'.$title.'</a>'; //выводим пункт меню на страницу } if($articles) { //если есть статьи выводим их на экран while ($row = mysqli_fetch_array($articles)) { //вывод статей } } Вывод статей делаю так : PHP: $res = mysqli_query($connect,"SELECT * FROM log WHERE page='index' ORDER BY id desc"); $number = mysqli_num_rows($res); for ($n=1; $n<=$number; $n++) { $comments=mysqli_fetch_array($res); // Оформление и вывод echo '<h3>'.$comments['title'].'</h3>'; echo '<div>'.$comments['article'].'</div>'; } т.е список категорий выводится на странице log.php, но при клике на любую из категорий выводятся все статьи, да и со стилями пока не всё в порядке. Что напутала, где сделала ошибку ? Спасибо за ответ.
@olga_0630 Попробуйте без (int) ту строку сделать. А какие у вас ошибки выводятся? И наконец то у вас нет этого do while.
Здравствуйте, в 1 коде : PHP: <?php $res_categories = mysqli_query($connect,"SELECT * FROM log_categories"); $num_categories = mysqli_fetch_array($res_categories); if (mysqli_num_rows ($res_categories) > 0) { $num_categories = mysqli_fetch_array($res_categories); do { printf ("<p style='display: inline-block;'><a href='log.php?cat=%s'>%s</a></p>", $num_categories["id"], $num_categories["title"]); } while ($num_categories = mysqli_fetch_array($res_categories)); } // в переменную $num_comm помещается массив title,meta_d,meta_k,message else {echo "<p>В базе нет записей !</p>"; exit;} // вывод статей $res = mysqli_query($connect,"SELECT * FROM log WHERE page='index' ORDER BY id desc"); $number = mysqli_num_rows($res); for ($n=1; $n<=$number; $n++) { $comments=mysqli_fetch_array($res); // Оформление и вывод echo '<h3>'.$comments['title'].'</h3>'; echo '<div>'.$comments['article'].'</div>'; } ?> Всё нормально, статьи выводятся, категории тоже, при клике на конкретную категорию выводятся конкретные статьи. Проблема только была в том, что нужно было сделать 1 ссылку в категории, чтобы она извлекала все статьи из базы, но здесь есть цикл do while... Проверила код, убрала (int) - ничего не изменилось.Ошибок нет, ссылки становятся активной после клика, но извлекаются все статьи...
Сергей, здравствуйте. Если у вас будет время, будьте добры, гляньте сообщение 20 и 22 в данной теме (вы помогали с кодом). Не работает, точнее категории выводятся, но при клике на любую категорию выводятся все статьи, в 1 коде в сообщении 22 такой проблемы не было, где проблема пока не пойму... Заранее благодарна, Ольга.
Скорее всего потому, что не работает условие: PHP: $cat = ($_GET['cat'] != 'all') ? "WHERE cat='$_GET['cat']'" : ''; Покажите структуру таблицы, в которой у вас хранятся статьи. --- Добавлено --- P.S.: И перейдите лучше на PHP 7.