За последние 24 часа нас посетили 19477 программистов и 1633 робота. Сейчас ищут 1844 программиста ...

switch. где ошибка?

Тема в разделе "PHP для новичков", создана пользователем komplekt_17, 19 окт 2014.

  1. komplekt_17

    komplekt_17 Новичок

    С нами с:
    18 окт 2014
    Сообщения:
    6
    Симпатии:
    1
    Всем привет.
    Есть код:
    1.на странице с формой:
    Код (Text):
    1. $cod3 = '009';
    2.на странице обработчике:
    Код (Text):
    1. if (isset($_POST['cod3']))  {$cod = $_POST['cod3'];     if ($cod == '') {unset($cod);} }
    2.     switch ($cod){
    3.         case ($cod = '008'):{ $down_link = $down_link_008;  $pass_zip = $pass_zip_008;  break;}
    4.         case ($cod = '009'):{ $down_link = $down_link_009;  $pass_zip = $pass_zip_009;  break;}
    5.         case ($cod = '012'):{ $down_link = $down_link_012;  $pass_zip = $pass_zip_012;  break;} }
    6.         echo $down_link;     echo $pass_zip;
    Проблема: не происходит перебора кейсов, срабатывает ТОЛЬКО первый кейс (008)
     
  2. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Код (PHP):
    1. if(isset($_POST['cod3']) && $cod=$_POST['cod3']){
    2.     $down_link=$pass_zip='';
    3.     switch($cod) {
    4.         case'008':
    5.             $down_link=$down_link_008;
    6.             $pass_zip=$pass_zip_008;
    7.         break;
    8.         case'009':
    9.             $down_link=$down_link_009;
    10.             $pass_zip=$pass_zip_009;
    11.         break;
    12.         //default: echo'операция по умолчанию, если нужно';
    13.     }
    14.     echo $down_link,' ',$pass_zip;
    15. }
     
  3. komplekt_17

    komplekt_17 Новичок

    С нами с:
    18 окт 2014
    Сообщения:
    6
    Симпатии:
    1
    мерси, всё заработало.
     
  4. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Не пробовал массивы юзать?)
    Где ты взял этот код, он плохой, не нужно так писать.
    Если научил, кто, передай, чтобы тоже так не писал :D
    Тебе надо знать, что скрипт не так работает как думаешь ты, на самом деле... то, что пишешь ты, сразу не выполняется, но на синтаксис проверяется.
    По этому ты должен думать, что ты пишешь и в какой последовательности.
    Для этого у тебя должен быть " Задуман план " - что нужно, где и когда.
    А синтаксис у php-мне понравилось, у него позаимствовано множество языков, скрипты мы можем писать разные и даже динамические.
    У php нет чистого ООП, тут все более гибко происходит и походит на статичные модули (то есть это область php где выполняются скрипты)... Сам язык уникален =)
    Сравнивать языки не нужно, иначе тогда не пришлось бы делать одинаковые, ну если ты только конечно не захотел из php сделать еще якобы php =)))
    А теперь по делу:
    isset у тебя вернет true в любом случае даже если придет пустота, false только в случае если мы не отправляли ничего, потому, что даже если мы отправим null якобы, то он все равно строкой придет, так как в этих глобальных массивах GET,POST может быть только строка, если ничего не отправили переменной такой не было определено, а если отправили пустоту переменная определена и будет true.
    Дальше ты определяешь переменную $cod и зачем то проверяешь ее потом опяьт на пустоту и если она равна пустоте ты еще и удаляешь ее?
    Если тебе хочется удалить, сделай это в конце. Так как у тебя обработчик Одноразовый, все равно после этого переместит куда или там изменится, что - то, что уже не будет потом вновь по новой грузить без отправки.
     
  5. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    за место switch лучше использовать if else.
     
  6. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    чем?
     
  7. Хыиуду

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

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Тут уже в первой строке виден код Попова

    Добавлено спустя 2 минуты 5 секунд:
    Если $down_link и $post_zip сделать массивами, то все уместится в одну строку
    echo $down_link[$_POST['cod3']].$post_zip[$_POST['cod3']];
    Но я бы еще пробелом разделил хотя бы
     
  8. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    короче, проще и можно через массив все крутить.
     
  9. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    оператор switch работает аналогично оператору if, но позволяет условному выражению иметь в качестве резульата более двух значений. В операторе if условие принимает значение true and false. В операторе switch условие может принимать любое количество различных значений в тех случаях, когда результат его вычисления принимает простой тип( integer, string или float).
    Чтобы иметь возможность реагировать на каждое такое значение, вы должны предусмотреть для него соответствующий оператор case, а также (не обязательно) определить действия, выполняемые по умолчанию, когда возникает случай, не предусмотренный конкретным оператором case.

    Оператор if выбирает на выполнение только один оператор если специально не используются фигурные скобки для создания блока операторов. Оператор switch действует по-другому принципу. Когда оператор case в рамках оператора switch активизируется, PHP выполняет следующие за ним операторы, один ща другим , до тех пор пока не столкнется с оператором Break.

    учитывая это, тут switch оправдан
     
  10. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    Конкатенация и переменная переменной.

    Код (PHP):
    1. // give
    2. $cod = '008'
    3. // bring
    4. $down_link='down_link_'.$cod;
    5. // take
    6. echo $$down_link;
    7.  
    Тем не менее все там изначально - типичная бредятина ничтоже сумнящего.
     
  11. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Это порождает, якобы удобнее, а не лучше.