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

Форум PHP

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

 

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

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

тема: if переменная_установлена И эта_переменная равна 1 { Может elseif поможет
 
 автор: root_xxx   (21.11.2014 в 02:07)   письмо автору
 
 

Мучаюсь вот с таким

function show_th(){
    $_SESSION['UOS']=1;
//    ;$UOS=1;

    if (isset ($_SESSION['UOS'])) && (($_SESSION['UOS']) == 1) {
    echo "Установлено";
}
else{
    echo"Не установлено";
}

//(isset ($_SESSION['UOS'])) && 

}

Если по одному условию проверять, то оно работает. А как проверить через И?

Пишет он "Parse error: syntax error, unexpected '&&' (T_BOOLEAN_AND) in..."

Может elseif поможет (только условие нужно изменить), но хотелось бы одной строкой сделать проверку.
---
В нете смотрел - не доходит :( мне

Кажись я догадываюсь в чем проблема... щас проверю...ВСЕ!!! довольный иду пить чай и спать! Нужно было ДДЯ if все_выражение заключить в скобки.

function show_th(){
    $_SESSION['UOS']=1;

   // $UOS=1;
    
    if ((isset ($_SESSION['UOS'])) && (($_SESSION['UOS'])) == 1) {
    echo "Установлено";
}
else{
    echo"Не установлено";
}

//(isset ($_SESSION['UOS'])) && 
}


if ((isset ($_SESSION['UOS'])) && (($_SESSION['UOS'])) == 1) {

НО это не все: Я вспомнил что нужны скобки потому что когда-то давненько нечто подобное было. Вопрос что именно значит ошибка
"Parse error: syntax error, unexpected '&&' (T_BOOLEAN_AND) in..."?

Очевидно if ожидает булевское значение (ложь или истина) - поэтому и матерится? а при ем тут T_BOOLEAN_AND ?

Спрашиваю для того чтобы понять логику возникновение ошибки в первом ошибочном примере.

  Ответить  
 
 автор: confirm   (21.11.2014 в 03:08)   письмо автору
 
   для: root_xxx   (21.11.2014 в 02:07)
 

>Я вспомнил что нужны скобки потому что когда-то давненько нечто подобное было.

Глупости, какие скобки, которых кучу лишних во тором случае прописали?

Вот причина ошибки:

if (isset ($_SESSION['UOS'])) && (($_SESSION['UOS']) == 1)) - нет закрывающей скобки, ибо вы лишних написали кучу, а нужной нет.
if (isset ($_SESSION['UOS'])) - а тут лишняя

А вообще так должно быть:

if (isset ($_SESSION['UOS']) && $_SESSION['UOS'] == 1)

А еще проще так:

if ($_SESSION['UOS'] == 1)

Ибо отсутствие установленной переменной вернет NULL.

И вообще зачем проверять, если в начале $_SESSION['UOS']=1?

$UOS и одновременно $_SESSION['UOS'] может вызвать проблемы.

  Ответить  
 
 автор: root_xxx   (21.11.2014 в 12:03)   письмо автору
 
   для: confirm   (21.11.2014 в 03:08)
 

хм-м... интересненько...
---
Об опасности применения одинаковых имен суперглоб и локальных переменных я знаю - тут ниже есть тема.

>И вообще зачем проверять, если в начале $_SESSION['UOS']=1?
Это для отладки.

Проверяется установлена ли переменная И равна ли она 1, потому что она возможно будет иметь значение НЕ равно 1. Это уже неважные детали.
---
>...какие скобки, которых кучу лишних во тором случае прописали?
%:)) Но оно работает.
---
Следующий вопрос: session_destroy(); - не удаляет $_SESSION['UOS'] . Нужно использовать unset ($_SESSION['UOS']); И использовать unset для всех переменных в сессионном масиве ($_SESSION['G_VARS']) ?

  Ответить  
 
 автор: confirm   (21.11.2014 в 14:32)   письмо автору
 
   для: root_xxx   (21.11.2014 в 12:03)
 

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

2 * 2 * 2 * 2 * 2 * .... - будет тоже работать, но прописывать таким образом даже для 2 в степени 16, вместо pow(2, 16), не имеет никакого смысла.

<?
$_SESSION
['a'] = 1;
$_SESSION['b'] = 2;

$_SESSION null;

echo 
$_SESSION['a'],$_SESSION['b'];


Пишите код не в тетрадке в клеточку, а в редакторе, который всегда автоматом добавит закрывающие скобки, кавычки и т.д.

  Ответить  
 
 автор: root_xxx   (21.11.2014 в 16:47)   письмо автору
 
   для: confirm   (21.11.2014 в 14:32)
 

>Пишите код не в тетрадке в клеточку, а в редакторе, который всегда автоматом добавит закрывающие скобки, кавычки и т.д.

http://linux.org.ua/yabbfiles/Smilies/36.gif http://linux.org.ua/yabbfiles/Smilies/wacko2.gif http://linux.org.ua/yabbfiles/Smilies/angry2.gif

Дело в том что я и пишу в редакторе с автодополнением. Если спереди нужно что то дописать в скобках, то рядом появляется закрывающаяся скобка ... ( _)_ (isset ($_SESSION['UOS'])) - ото так и путаюсь в том что и так плохо знаю.

---
>Это не опасность, ничего не развалится
Я не о развале (потери) сессии и данных написал. (или я не так понял?) У меня ничего страшного не выдает.

Опасность в том что можно перепутать локальные и суперглоб переменные - можно не то записать или сделать не то шо нада. Но это зависит от уровня разраба.
---
>2 * 2 * 2 * 2 * 2 * .... - будет тоже работать, но :) ага.
---
>$_SESSION = null;
Внатуре убивает сессию. щас допроверю кои щто...

  Ответить  
 
 автор: confirm   (21.11.2014 в 17:05)   письмо автору
 
   для: root_xxx   (21.11.2014 в 16:47)
 

К чему вы указываете ссылки на смайлы ресурса linux, вы думаете кто-то непременно пройдется по ссылкам чтобы увидеть их? Не надо мусорить, пишите только то, что касается сути, хлам загромождает пост и отвлекает.

Вы просто запутались к куче ненужных скобок. Это результат или не внимательности, или не понимания.

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

if(
    exp(
         ....
    )
)


Что касается о развале и у вас ничего не происходит, так вам никто и не говорит, что таковое будет, вам сказали, что могут быть проблемы, думаю, что у вас есть шанс столкнуться с этим.

$_SESSION = null; не убивает сессию, это очищает ее.

  Ответить  
 
 автор: root_xxx   (21.11.2014 в 17:14)   письмо автору
 
   для: confirm   (21.11.2014 в 17:05)
 

---
>$_SESSION = null;
Внатуре убивает сессию. щас допроверю кои щто...

ага, вот в чем вопрос: Сессионнй массив исчезает, но остаются другие переменные и куки.

Я не уверен, но по правилам хорошего тона (этикета :%)) программирования нужно все НЕНУЖНЫЕ куки и все переменный удалить (например после того как пользователь нажал "Выход" из форума, магазина либо другого сайта). Вот в этом случае нужно использовать только unset () ?

Впринципе уже понял что это не убивает, а очищает. Вот только не пойму я почему session_destroy(); не убивает сессию ???

Возможно у меня где-то вызывается session_start();?
---
Остальное понял (по поводу хлама).

  Ответить  
 
 автор: confirm   (21.11.2014 в 17:22)   письмо автору
 
   для: root_xxx   (21.11.2014 в 17:14)
 

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

При выходе session_destroy удалит текущую сессию, а при входе будет генерироваться новая, так что воспользоваться данными прошлой сессии будет невозможно.

Установка массива $_SESSION в NULL - не убивает сессию, так что в натуре вы ошибаетесь.

  Ответить  
 
 автор: Trianon   (21.11.2014 в 04:34)   письмо автору
 
   для: root_xxx   (21.11.2014 в 02:07)
 

if ожидает выражение внутри скобок, за которым сразу следует оператор
У вас выражением внутри скобок оказалась первая половина условия, за которым последовала лексема && ( Логическое_И , в терминах лексического анализатора php зовется T_BOOLEAN_AND) с которой оператор начинаться ну никак не может.
Диагностика при этом: Ошибка синтаксического анализа: неожиданное появление лексемы && (логическое И) в контексте.... только по аглицки.

  Ответить  
 
 автор: root_xxx   (21.11.2014 в 11:43)   письмо автору
 
   для: Trianon   (21.11.2014 в 04:34)
 

понятно.

И я уже выше написал, что по отдельности эти условия работают без ошибок. И я прибавил лишних скобок, чтобы заключить эти два условия в одно. Так оно стало правильным. Но все таки - да!, много там скобок.

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

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