Всем привет. Есть код: 1.на странице с формой: Код (Text): $cod3 = '009'; 2.на странице обработчике: Код (Text): if (isset($_POST['cod3'])) {$cod = $_POST['cod3']; if ($cod == '') {unset($cod);} } switch ($cod){ case ($cod = '008'):{ $down_link = $down_link_008; $pass_zip = $pass_zip_008; break;} case ($cod = '009'):{ $down_link = $down_link_009; $pass_zip = $pass_zip_009; break;} case ($cod = '012'):{ $down_link = $down_link_012; $pass_zip = $pass_zip_012; break;} } echo $down_link; echo $pass_zip; Проблема: не происходит перебора кейсов, срабатывает ТОЛЬКО первый кейс (008)
Код (PHP): if(isset($_POST['cod3']) && $cod=$_POST['cod3']){ $down_link=$pass_zip=''; switch($cod) { case'008': $down_link=$down_link_008; $pass_zip=$pass_zip_008; break; case'009': $down_link=$down_link_009; $pass_zip=$pass_zip_009; break; //default: echo'операция по умолчанию, если нужно'; } echo $down_link,' ',$pass_zip; }
Не пробовал массивы юзать?) Где ты взял этот код, он плохой, не нужно так писать. Если научил, кто, передай, чтобы тоже так не писал Тебе надо знать, что скрипт не так работает как думаешь ты, на самом деле... то, что пишешь ты, сразу не выполняется, но на синтаксис проверяется. По этому ты должен думать, что ты пишешь и в какой последовательности. Для этого у тебя должен быть " Задуман план " - что нужно, где и когда. А синтаксис у php-мне понравилось, у него позаимствовано множество языков, скрипты мы можем писать разные и даже динамические. У php нет чистого ООП, тут все более гибко происходит и походит на статичные модули (то есть это область php где выполняются скрипты)... Сам язык уникален =) Сравнивать языки не нужно, иначе тогда не пришлось бы делать одинаковые, ну если ты только конечно не захотел из php сделать еще якобы php =))) А теперь по делу: isset у тебя вернет true в любом случае даже если придет пустота, false только в случае если мы не отправляли ничего, потому, что даже если мы отправим null якобы, то он все равно строкой придет, так как в этих глобальных массивах GET,POST может быть только строка, если ничего не отправили переменной такой не было определено, а если отправили пустоту переменная определена и будет true. Дальше ты определяешь переменную $cod и зачем то проверяешь ее потом опяьт на пустоту и если она равна пустоте ты еще и удаляешь ее? Если тебе хочется удалить, сделай это в конце. Так как у тебя обработчик Одноразовый, все равно после этого переместит куда или там изменится, что - то, что уже не будет потом вновь по новой грузить без отправки.
Тут уже в первой строке виден код Попова Добавлено спустя 2 минуты 5 секунд: Если $down_link и $post_zip сделать массивами, то все уместится в одну строку echo $down_link[$_POST['cod3']].$post_zip[$_POST['cod3']]; Но я бы еще пробелом разделил хотя бы
оператор switch работает аналогично оператору if, но позволяет условному выражению иметь в качестве резульата более двух значений. В операторе if условие принимает значение true and false. В операторе switch условие может принимать любое количество различных значений в тех случаях, когда результат его вычисления принимает простой тип( integer, string или float). Чтобы иметь возможность реагировать на каждое такое значение, вы должны предусмотреть для него соответствующий оператор case, а также (не обязательно) определить действия, выполняемые по умолчанию, когда возникает случай, не предусмотренный конкретным оператором case. Оператор if выбирает на выполнение только один оператор если специально не используются фигурные скобки для создания блока операторов. Оператор switch действует по-другому принципу. Когда оператор case в рамках оператора switch активизируется, PHP выполняет следующие за ним операторы, один ща другим , до тех пор пока не столкнется с оператором Break. учитывая это, тут switch оправдан
Конкатенация и переменная переменной. Код (PHP): // give $cod = '008' // bring $down_link='down_link_'.$cod; // take echo $$down_link; Тем не менее все там изначально - типичная бредятина ничтоже сумнящего.