За последние 24 часа нас посетили 48569 программистов и 1807 роботов. Сейчас ищут 1824 программиста ...

Условия с помощью "switch"

Тема в разделе "PHP для новичков", создана пользователем Булат Азат улы, 9 сен 2017.

  1. Булат Азат улы

    Булат Азат улы Активный пользователь

    С нами с:
    31 авг 2017
    Сообщения:
    61
    Симпатии:
    6
    Адрес:
    Республика Татарстан, город Казань
    Здравствуйте. В файле Аякса есть много проверок на нажатые кнопки:
    PHP:
    1. if(isset($_POST['slideButton'])){
    2. }
    3. // и так десятки условий, без else
    Читал, что если много таких условий, то лучше их перевести на "switch". Только вот не могу понять, как "isset($_POST['slideButton'])" разделить на "switch" и "case"? Тут же нет равенства?
     
  2. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    PHP:
    1. switch ($luchik)
    2. {
    3. case "условие 1":
    4. if(isset($_POST['slideButton'])){
    5. }
    6. break;
    7.  
    8. case "условие 2":
    9. if(isset($_POST['slideButton'])){
    10. }
    11. break;
    12.  
    13. case "условие 3":
    14. if(isset($_POST['slideButton'])){
    15. }
    16. break;
    17. }
    18. default:
    19. //Сюда условие по умолчанию
    20. break
    Ну и так далее!
     
  3. Булат Азат улы

    Булат Азат улы Активный пользователь

    С нами с:
    31 авг 2017
    Сообщения:
    61
    Симпатии:
    6
    Адрес:
    Республика Татарстан, город Казань
    @_ne_scaju_, что-то не понял. if(isset($_POST['slideButton'])) - это и есть условие. Зачем его ещё в одно условие вставлять? Надо же if заменить на switch-case.
    if-то и без switch-case нормально работает.
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Изначально некорректная архитектура потому что. Аякс должен, по-хорошему, передавать не каждую кнопку в отдельном параметре, а параметр button, значение которого равно названию нажатой кнопки. И вот тогда можно сделать switch($_POST['button']) будет.

    А я так вообще, в последнее время гоняю на сервер только JSON-пакеты. Что и тебе рекомендую.
    В них указано, какое действие надо совершить, есть пачка параметров, необходимых для его свершения, да пачечка служебных данных, ну типа там CSRF-токен, AJAX-флаг, чтоб система поняла, что от нее хотят, все. Ответ тоже отсылается в JSON-е, содержит в себе статус обработки запроса и данные ответа отдельным полем.

    Подразумевается, что обработчик запроса знает, что делать с пакетом данных от клиента, а обработчик ответа знает, что делать с пакетом данных от сервера. По этому структура "дополнительного поля" может быть любой под капотом. Удобно. Расширяемо. Плюс, позволяет использовать в качестве клиента не только браузер, но, на будущее, мобильное приложение, например. Причем вообще без переделки сервера под это дело.
     
    #4 Fell-x27, 9 сен 2017
    Последнее редактирование: 9 сен 2017
  5. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @Булат Азат улы
    Да уж ты же читал про switch как он действует? ну вот я показал пример минимальный как тебе надо было сделать как ты хотел. и вместо слов "условие 1" можно подставлять свои значения, по которым ты будешь обращаться)
    Почитай пожалуйста в мануале https://php.ru/manual/control-structures.switch.html читай.
     
  6. Булат Азат улы

    Булат Азат улы Активный пользователь

    С нами с:
    31 авг 2017
    Сообщения:
    61
    Симпатии:
    6
    Адрес:
    Республика Татарстан, город Казань
    @Fell-x27, я тоже собираюсь переделать под JSON, но пока не спешу, так как ещё нужно как-то подогнать АЯКС под передачу изображений, чего ещё не придумал, как лучше сделать.
    Но пока, то есть, можно создать в данных для передачи одинаковое название (button, например), и каждому запросу задать своё значение. Как-то сам не дагадался, спасибо!
    А значения кнопок отправлять таким образом не получится (сейчас я их в основном и отправляю), так как в большинстве случаев они у меня похожи ("Отправить", "Сохранить", "Удалить" и т.д.). К тому же, Аякс срабатывает у меня иногда и без кнопок (по нажатию на ячейку таблицы, например).
    --- Добавлено ---
    @_ne_scaju_, я уже использовал switch, когда делал единую точку входа, и об этом нормально знаю. Пользователь @Fell-x27 мне подсказал, как можно сделать. Нужно иметь одно одинаковое, универсальное название передаваемых данных (например, $_POST['button']) и ему уже задавать оригинальные значения для каждого запроса. Тогда можно будет сделать вот так:
    PHP:
    1. switch($_POST['button']){
    2. case "slide":
    3. // обработать запрос  по кнопке "slide"
    4. break;
    5. case "news":
    6. // обработать запрос  по кнопке "news"
    7. break;
    8. // и т.д.
    9. }
     
  7. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А в чем проблема? Изображения не пакуй в ajax, просто отсылай POST-ом.
     
  9. Булат Азат улы

    Булат Азат улы Активный пользователь

    С нами с:
    31 авг 2017
    Сообщения:
    61
    Симпатии:
    6
    Адрес:
    Республика Татарстан, город Казань
    @Fell-x27, просто как-то так получилось, что было бы лучше при отправке не обновлять страницу. Это же без AJAX невозможно?
    Конечно, если не получится с Аяксом, придется просто формой отправлять.
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Тьу, я оговорился. Не пакуй в JSON, а не в ajax. Простым аяксом слать файлы можно без проблем. Ничем не отличается от обычной отправки. Просто делаешь POST через Ajax, файлы отдельно, JSON с данными отдельно. Проверено, работает.