За последние 24 часа нас посетили 17525 программистов и 1721 робот. Сейчас ищут 1892 программиста ...

Как сделать переключатель, с помощью оператора switch в php

Тема в разделе "PHP для новичков", создана пользователем _ne_scaju_, 17 апр 2017.

  1. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    Ок попробую:
    require_once первая строка говорит что можем подключить один раз наш конфиг.
    вторую строку я не знаю ну принцип понятен почти
    создаем переменную проверяем что в GET параметре если его нет то выводим false.
    if(!empty и т.д.
    проверяем переменную $go и $routes[$go]
    если типа все ок перекидываем пользователя на страницу
    Иначе дефолт настройки.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Не, так не пойдёт. Опиши точно, что и как происходит. Никакая строка там никого никуда не "перекидывает". Разберись точно.
    --- Добавлено ---
    require_once подключает файл, если он до этого был не подключен, а не говорит, что он может быть подключен один раз. Computer Since - это точная достаточно наука.
    --- Добавлено ---
    И никакой false никуда не выводится. Вывод - это echo, там echo нету.
     
  3. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    что то не так написал?
    Ой да не так написал, на счет перекидывает типа строка.
    Она не перекидывает а в зависимости от ссылки где и куда тыкнул пользователь перенаправляет.
    АААА запутался(
    Ну что мне надо сделать что бы создать ссылку?
    Разобрался как ссылку указать, ура.
    У вас получается __dir__ показывал путь к папке,
    include __DIR__ . $routes[$go];
    Вот так. У меня в логах получалось что папка то же самая 2 раза выводилась, получалось что: system/system/routes.php
    Из-за этого не переходило.
    --- Добавлено ---
    @mkramer
    Объясни ты мне что ты написал) пожалуйста. Если что я говорю за код.
     
    #53 _ne_scaju_, 22 апр 2017
    Последнее редактирование: 22 апр 2017
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Бесполезняк :( Если у тебя include что-то куда-то перекидывает/перенаправляет, то разговаривать вообще не о чем.
     
  5. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    Все понятно я просто не могу объяснять если я не уверен)))
    include require_once и т.д. они просто инклудят файл и все.
    Чтобы можно было их на другой странице подключить.
    Ну извини(
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    инклюдят - что ты под этим понимаешь? А то мало ли... И я говорю, если пишешь, пиши точно, что и как происходит, что в какую переменную пишется, что из какой переменной читается. Если бы хоть немного понимал, или хотя бы точно воспроизвёл, всё бы заработало давно
    --- Добавлено ---
    https://secure.php.net/include
    https://secure.php.net/manual/ru/la...son.php#language.operators.comparison.ternary
    https://secure.php.net/manual/ru/language.types.array.php
    https://secure.php.net/manual/ru/function.empty.php
    https://secure.php.net/manual/ru/function.isset.php
    - читать до просветления.

    Пока ты человечески не распишешь строчки, что я тебе написал, разговор дальше бесполезен. Там всё элементарно, ничего нету особенного.
     
  7. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    Я же сказал я уже нашел проблему. Описываю все поэтапно:
    Создал файл config.routes.php
    В него записал массив состоящий из путей к скриптам.
    PHP:
    1. <?php
    2. $routes = [ /*массив*/
    3.      "login" => "/system/modules/login.php",
    4.      "register" => "/system/modules/register.php",
    5.      "logout" => "/system/modules/logout.php"
    6.      // и т.д., сколько тебе нужно
    7. ];
    8. ?>
    Далее создал файл routes.php
    PHP:
    1. <?php
    2. /*Инклудим скрипт, то-есть подключаем скрипт находящийся в другом месте,подключаем его для работы с данным скриптом*/
    3. require_once(__DIR__ . "/config.routes.php");
    4. /*Проверочка гет параметра*/
    5. $go = isset($_GET["go"]) ? $_GET["go"]: false;
    6. /*Типа та же проверка, только на ввод или существования данной ссылки по которой пользователь хочет перейти*/
    7. if (!empty($go)  && isset($routes[$go])) {
    8. /*Если все хорошо то инклудим файл по которому пользователь перейдет*/
    9.      include $routes[$go];
    10. } else {
    11. /*Иначе перенаправим пользователя на страницу например главную*/
    12.     include __DIR__ .'index.php';
    13. }
    Дальше я открываю главную страницу сайта а точнее index.php
    И указываю путь к файлу router.php
    PHP:
    1.  <?php
    2.    /*Подключаем роутер*/
    3. include($_SERVER['DOCUMENT_ROOT'].'/system/routes.php');
    4. /*Шапка сайте*/
    5. include($_SERVER['DOCUMENT_ROOT'].'/templates/default/header.php');
    6. /*Меню сайта*/
    7. /*футер*/
    8. и т.д.
    9. ?>
    где вывожу ссылки на регистрацию и авторизацию
    HTML:
    1. <li><a href="?go=login.php" title="Войти">Войти </a></li>
    2. <li><a href="?go=register" title="Регистрация">Регистрация</a></li>
    мне нужно указать гет параметр и из файла config.routes.php вытащить массив значение
    а точнее из этой строки "login" => "/system/modules/login.php",
    вытягиваю передаваемое значение login а точнее ключ
    На сколько я все правильно описал, и сделал?
     
    #57 _ne_scaju_, 22 апр 2017
    Последнее редактирование: 22 апр 2017
  8. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    я готов ответить, по человечески что ты расписал)
    1. Пункт:
    Включаем и выполняем данный файл
    require_once(__DIR__ . "/config.routes.php");
    2. Пункт:
    Дальше создаем переменную $go и проверяем была ли она создана, или вообще была ли создана переменная, какая либо, проверку производит функция isset.
    $go = isset($_GET["go"]) ? $_GET["go"]: false;
    знак ? я почитал, это тернартный оператор его нельзя назвать переменной, он используется как результат выражения.
    3. Пункт:
    Так дальше идет строка:
    if (!empty($go) && isset($routes[$go])) {
    Здесь у нас происходит что, !empty проверяет на существования переменой, если существует переменная $go и проверяем isset создана ли переменная $routes[$go] то все хорошо,
    include $routes[$go]; разрешаем включить и выполнить файл, который прописан в файле config
    4. Пункт:
    Иначе } else {
    Запускаем дефалтнные настройки, и направляем куда нам хотелось бы)
    }
    Хотелось бы ответить как ты хотел прочитать и увидеть ответ, что бы дальше можно было изучать данный язык))).
    Надеюсь я этот урок запомню на всегда)
     
    #58 _ne_scaju_, 22 апр 2017
    Последнее редактирование: 22 апр 2017
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Ну вот это почти что надо. Только:
    2. - мы не проверяем, была ли создана переменная. Мы её создаём - конечно она создана. Мы проверяем, был ли передан get-параметр go нашему скрипту. Если был - пишем его в переменную $go, а если не был - пишем туда false
    3. !empty не проверяет в данном случае на существование - переменная существует, мы её только что создали. !empty проверяет не пустое ли значение в переменной (empty - пустой с английского). Пустыми в php считаются null, false, 0, '' (пустая строка), и, что довольно странно, '0' (строка, в которую записан 0) isset в данном случае применён к элементу массива с ключём $go, поэтому он не проверяет создана переменная $routes[$go], а именно проверят, если в массиве, записанном в переменной $routes ключ со значением, записанным в переменную $go.

    Программирование, как и математика, любит точность.

    Ну теперь, когда ты разобрался, как это работает, тебе должно не составить труда разобраться, как это правильно включить в твою программу. чтоб не оставалось лишних вопросов. В непонятной ситуации берёшь, и также по пунктам расписываешь твою программу, и обычно всё становится понятно
     
  10. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    Ну разобраться не много разобрался, но почитать еще надо)
     
  11. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    У меня сейчас такой вопрос:
    А как же быть в такой ситуации, например:
    Если много скриптом, которые подключены в config.routes.php и тебе надо выводить на главной странице в определенном месте.
    Например, авторизацию поместить в шапку сайта, регистрацию поместить в контент сайта. ну и так далее.
    Если я указываю файл routes.php указываю на главной странице сайта index.php, а точнее между шапкой, и меню, вот так
    PHP:
    1. <?php session_start(); ?>
    2. <!DOCTYPE>
    3. <html lang="ru">
    4. <head>
    5.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    6. </head>
    7. <body>
    8. <div class="page">
    9. <?php
    10. /*Шапка сайта*/
    11. include($_SERVER['DOCUMENT_ROOT'].'/templates/default/header.php');
    12. require_once($_SERVER['DOCUMENT_ROOT'].'/system/routes.php'); /*Подключения переключателя роутера*/
    13. /*Меню сайта*/
    14. include($_SERVER['DOCUMENT_ROOT'].'/templates/default/menu.php');
    15. include($_SERVER['DOCUMENT_ROOT'].'/templates/default/content.php');
    16. /*Низ сайта*/
    17. include($_SERVER['DOCUMENT_ROOT'].'/templates/default/footer.php');
    18. ?>
    19. </div> <!-- Конец page -->
    20. </body>
    21. </html>
    то все скрипты открываются между шапкой, и контентом.
    А как же быть если надо указать в каком либо другом месте, что бы выводились данные на главной странице?

    Или вы считаете что я не правильно делаю, а надо еще какой то файл создать, а потом подключать его на главной?

    Или мне надо указывать именно в скрипте content.php который отвечает за разметку контента на сайте, у меня просто представления, хочется как лучше, хочется как правильней, сразу научится не косячить, а писать правильно)
    Спасибо.
     
    #61 _ne_scaju_, 22 апр 2017
    Последнее редактирование: 22 апр 2017
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Ну распиши опять то, что ты делаешь и подумай, почему так.
     
  13. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @mkramer
    Не ну а в принципе, правильно сделал я?
    Расписать все я могу, я понимаю, что я делаю как то не так.
    Может так нельзя делать, указывать переключатель роутер на главной index.php?
    А чисто в куске шаблона content.php или header.php. и так далее лучше указать?
    Так а что я сделал не правильно??? В принципе все переходит по ссылкам, но хотелось бы что бы срабатывала не в одном блоке шаблона.
    Жду ответа)
     
    #63 _ne_scaju_, 22 апр 2017
    Последнее редактирование: 22 апр 2017
  14. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Народ кто поможет сделать восстановления пароля?
    Для начала я хочу вытащить данные, для проверки пользователя что он есть в базе пробую сделать так:
    Но все время пишут no_user хотя такой пользователь есть(
    PHP:
    1.  if(isset($_POST['recovery'])){
    2.      $email = emailValid($_POST['email']);
    3.      $check = $pdo->prepare("SELECT `user_id`, `user_photo` FROM `users` WHERE `user_email` = '{$email}' AND `user_status`= 1");
    4.      $check->bindValue($email, $_POST['email'], PDO::PARAM_STR);
    5.      $check->execute();
    6.      $rows = $check->fetchAll(PDO::FETCH_ASSOC);
    7.      if(!empty($rows))
    8.      {
    9.          if($rows['user_photo'])
    10.              $rows['user_photo'] = "/uploads/users/{$rows['user_id']}/100_{$rows['user_photo']}";
    11.          else
    12.              $rows['user_photo'] = "{theme}/images/100_no_ava.png";
    13.        
    14.          echo "|".$rows['user_photo'];
    15.      } else
    16.      echo 'no_user';
    17. }
    Вот что я делаю тут не так?