Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: switch case помощь
 
 автор: kvins   (02.03.2011 в 17:29)   письмо автору
 
 

не разу не пользовался ,а щас понадобилась switch case

на странице мне надо выводить , если это страница того пользователя чей пароль совпадает то 1 информацию

если он находится на чужой странице то другую информацию

проблема в том что в примерах я так и не понял где мне проверку проводить чтобы он выбирал между случаями (case) .

и так же что писать в switch и case если брать мой пример

  Ответить  
 
 автор: neadekvat   (02.03.2011 в 17:32)   письмо автору
 
   для: kvins   (02.03.2011 в 17:29)
 

<?php
// Идентичные варианты

$some_var 'value';

switch (
$some_var)
{
    case 
'sth':
        echo 
'variant 1';
    break;
    
    case 
'value':
        echo 
'variant 2';
    break;
    
    default:
        echo 
"I don't know";
}


if (
$some_var == 'sth')
    echo 
'variant 1';
elseif (
$some_var == 'value')
    echo 
'variant 2';
else
    echo 
"I don't know";

  Ответить  
 
 автор: kvins   (02.03.2011 в 17:53)   письмо автору
 
   для: neadekvat   (02.03.2011 в 17:32)
 

спс за быстрый ответ , получаеться если мне надо проверить сессию то

switch ($_SESSION['access'])

case '$pass':
echo 'variant 1';
break;

case 'false':
echo 'variant 2';
break;

default:
echo "I don't know";




if ($_SESSION['access'] == $pass)
echo 'variant 1'; для чего тут еще 1 echo если в case есть тоже самое ? просто понять
elseif ($some_var == false) тут так???
echo 'variant 2';

else
echo "Iвы не зарегестрированы";

а данные он берет с низу?

  Ответить  
 
 автор: neadekvat   (02.03.2011 в 17:57)   письмо автору
 
   для: kvins   (02.03.2011 в 17:53)
 

case '$pass':

В одинарных кавычках не заработает.

Я привел пример двух идентичных вариантов. Использовать их одновременно не надо.
Но, как уже подсказывают ниже, в вашем случаи действительно лучше и понятнее будет обычный if else.

  Ответить  
 
 автор: kvins   (02.03.2011 в 18:04)   письмо автору
 
   для: neadekvat   (02.03.2011 в 17:57)
 

да их там много и просто хочется разделить между ними switch чтоб проверки были только внутри для каждой

  Ответить  
 
 автор: neadekvat   (02.03.2011 в 18:07)   письмо автору
 
   для: kvins   (02.03.2011 в 18:04)
 

В таком случаи, возможно, имеет смысл также выделить в отдельные файлы каждый из блоков - чтобы в последствии не путаться в них.
Плюс, у вас будет целых 4 пробела или один отступ в запасе.

  Ответить  
 
 автор: cheops   (02.03.2011 в 18:05)   письмо автору
 
   для: kvins   (02.03.2011 в 17:53)
 

case-условия они сродни if-условиям, ждут логического выражения, т.е. вы вполне можете использовать что-то вроде
case !empty($pass):

  Ответить  
 
 автор: kvins   (02.03.2011 в 18:14)   письмо автору
 
   для: cheops   (02.03.2011 в 18:05)
 

а можно спросить что для второго случая надо
(просто в if else во втором случае надо было просто в else писать ,а тут как?)
case empty($pass): 
???


В таком случаи, возможно, имеет смысл также выделить в отдельные файлы каждый из блоков

ето в отдельный файл и вставить в case include (моя страница .php); и так же во второй случай ?

  Ответить  
 
 автор: cheops   (02.03.2011 в 18:18)   письмо автору
 
   для: kvins   (02.03.2011 в 18:14)
 

Так как у вас всего два случая, то для второго случая уже ничего не имеет значения, так как если первое условие не срабатывает, то должно срабатывать второе условие (почему собственно и ропото поднялся на тему if ... else ...). Я бы вместо втрого условия использовал default - это бы оградило бы возможных неожиданностей, когда и первое условие не сработало и второе возвращает false
<?php
switch (!empty($_SESSION['access']))
{
  case 
true:
    echo 
'variant 1 - личная страница пользователя';
    break;
  default:
    echo 
'variant 2 - страница для всех';
    break;
}
?>

  Ответить  
 
 автор: kvins   (02.03.2011 в 18:28)   письмо автору
 
   для: cheops   (02.03.2011 в 18:18)
 

ееее спасибо за код , буду делать теперь

  Ответить  
 
 автор: kvins   (03.03.2011 в 00:19)   письмо автору
 
   для: cheops   (02.03.2011 в 18:18)
 

блин я еще забыл про людей которые не зарегестрированы

надо же 3 случая если
$_SESSION существует и пароль подходит это 1 случай
если существует но не сходятся пароли (или по другому) то другое
а если вообще не существует то тогда просим зайти под своим логином

как еще дописать код?

а так получается любой не зарегестрированый сможет тоже что и зарегестрированый =)

  Ответить  
 
 автор: Trianon   (03.03.2011 в 00:30)   письмо автору
 
   для: kvins   (03.03.2011 в 00:19)
 

логин с неподходящим для него паролем (со стороны киента) должен восприниматься сервером, как несуществующий.

  Ответить  
 
 автор: kvins   (03.03.2011 в 00:35)   письмо автору
 
   для: Trianon   (03.03.2011 в 00:30)
 

ну тогда получается что мы обделим человека который под логином на чужой странице , если делать ограничения для не зарегестрированных

  Ответить  
 
 автор: Trianon   (03.03.2011 в 00:54)   письмо автору
 
   для: kvins   (03.03.2011 в 00:35)
 

почему?
Если человек под логином, значит его пароль проверен.

  Ответить  
 
 автор: kvins   (03.03.2011 в 11:06)   письмо автору
 
   для: Trianon   (03.03.2011 в 00:54)
 

а ты с каким кодом сравниваешь?? ты по моему сравниваешь 2 значения а у меня получается 3
1 своя страница проверенная паролем
2чужая страница проверенная логином (что он человек залогинелся)
3 человек без нечего попытался попасть на страницу

в принципе я уже решил проблему с помощью кода cheops который ниже просто хочу вас понять =)

  Ответить  
 
 автор: cheops   (03.03.2011 в 00:34)   письмо автору
 
   для: kvins   (03.03.2011 в 00:19)
 

Знаете тут наверное лучше воспользоваться все-таки if ... else, так как характер данных не однородный.
<?php
  
if($_SESSION['access'] == $pass) {
    
// Своя страница
  
} else if(!empty($_SESSION['access'])) {
    
// Авторизован, но страница чужая
  
} else {
    
// Не авторизован
  
}
?>

  Ответить  
 
 автор: kvins   (03.03.2011 в 00:37)   письмо автору
 
   для: cheops   (03.03.2011 в 00:34)
 

да наверно по другому не получится =)

  Ответить  
 
 автор: kvins   (03.03.2011 в 00:32)   письмо автору
 
   для: cheops   (02.03.2011 в 18:18)
 

получается что то типо


<?php
switch ($_SESSION['access'] == $pass)
{
case true:
echo 'variant 1 - личная страница пользователя';
break;

case : как тут написать?
echo 'variant 1 - страница чужого пользователя';
break;

default: ну а тут думаю надо чета типо иссет чтоль чтоб понять
что нету вообще $_SESSION['access']

echo 'variant 2 - залогинетесь пожалуста';
break;
}
?>

  Ответить  
 
 автор: cheops   (02.03.2011 в 17:43)   письмо автору
 
   для: kvins   (02.03.2011 в 17:29)
 

А почему именно switch хотите использовать, а не if else? Обычно switch используется, если случаев больше 2-х, а у вас их ровно два: пользователь на своей странице или пользователь на чужой странице...

  Ответить  
 
 автор: psychomc   (02.03.2011 в 17:43)   письмо автору
 
   для: kvins   (02.03.2011 в 17:29)
 

хм, а как вы определили что понадобилось? :)

  Ответить  
 
 автор: kvins   (02.03.2011 в 17:56)   письмо автору
 
   для: psychomc   (02.03.2011 в 17:43)
 

у меня там очень много проверок с if else и чтобы легче мне было ориентироваться между 2 вещами (своя и чужая страница) думаю удобно между ними разделить на switch case

а что не рекомендуется ее использовать? ;) вдруг мне бы просто так захотелось ее использовать

  Ответить  
 
 автор: cheops   (02.03.2011 в 18:04)   письмо автору
 
   для: kvins   (02.03.2011 в 17:56)
 

Нет, почему, как раз подходящий случай. А уже если вдруг захотелось использовать - обязательно используйте, пока не передумали :))), следование безопасной, но не эффективной традиции - это бич всех программистов, подвернулся шанс расширить горизонт - расширяйте без всякого сомнения и без спросу у других :)))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования