Jump to content
  • 0

логическое условие не срабытывает


jurassik
 Share

Question

ставлю код

<?php if ($_GET['page']!="shop.browse") {этот текст скрыт на странице page=shop.browse}

работает.

добавляю условие

<?php if (($_GET['page']!="shop.browse") or ($_GET['flypage']!="flypage.tpl")) {этот текст скрыт на странице page=shop.browse и на странице flypage=flypage.tpl}

не работает..

Link to comment
Share on other sites

24 answers to this question

Recommended Posts

  • 0

Оператор or (или):

<?php if (($_GET['page']!="shop.browse") или ($_GET['flypage']!="flypage.tpl")) {этот текст скрыт на странице page=shop.browse и на странице flypage=flypage.tpl}

то есть, если хотя бы одно условие сработает, то текст не выведет.

Link to comment
Share on other sites

  • 0

Доброго времени суток. Я не большой знаток php но мне тоже кажется что надо поставить || вместо or.

Объясняю почему, дело в том что они практически идентичны, отличаются только тем что у || приоритет больше чем у or.

Edited by KurguzIlya
  • Like 1
Link to comment
Share on other sites

  • 0

странно, должно выполняться, можно больше кода?

мне тоже очень странно,

внутри кода находится строка таблицы а в ней <object>

страница - шаблон джумла

если убираю одно из условий, то там где надо объекта нет.

если ставлю || (их то изначально и ставил) то результат тот же.

не работает..

На одной и той же странице? Этого быть не может. Не там копаете, значит.

как это не там копаю, где еще можно копать?...

проблему решил по-иному, о интерес остался.

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

Edited by jurassik
  • Like 1
Link to comment
Share on other sites

  • 0

Какая разница, or или ||, если операнды в скобках стоят?

не работает..

На одной и той же странице? Этого быть не может. Не там копаете, значит.

А вы предложенный ТС код пробовали или это теоретически ?

Оператор or (или):

<?php if (($_GET['page']!="shop.browse") или ($_GET['flypage']!="flypage.tpl")) {этот текст скрыт на странице page=shop.browse и на странице flypage=flypage.tpl}

то есть, если хотя бы одно условие сработает, то текст не выведет.

Логически я тоже так думал, ан нет.

странно, должно выполняться, можно больше кода?

Больше не надо ибо не работает в этом ограниченном куске

Как выглядит url и не заменить ли or на ||?

Не меняет ситуацию.

Так url какой?

Дело не в урле, дело в условии.

Link to comment
Share on other sites

  • 0

А если разветвить на:

if($_GET['page']!="shop.browse") {
if($_GET['flypage']!="flypage.tpl") {echo 12; }
else { echo 1; }
} else {
if($_GET['flypage']!="flypage.tpl") { echo 2; }
else { echo 0; }
}

чего показывает?

И на всякий случай спрошу, может понял не так:

у вас в первом варианте программа в блок заходит, а во втором не заходит - я правильно понимаю?

Edited by Gaspode
Link to comment
Share on other sites

  • 0

А если разветвить на:

if(первое условие) {
if(второе) {echo 12; }
else { echo 1; }
} else {
if(второе) { echo 2; }
else { echo 0; }
}

чего показывает?

я уже решил, немного по другому.

вопрос: почему первый вариант не катит..

Link to comment
Share on other sites

  • 0

Вы на мой вопрос ответьте, тогда я, может, отвечу на ваш.

вот кусок:

if($_GET['page']!="shop.browse") {
if($_GET['flypage']!="flypage.tpl") {echo 12; }
else { echo 1; }
} else {
if($_GET['flypage']!="flypage.tpl") { echo 2; }
else { echo 0; }
}

что он выводит?

Edited by Gaspode
Link to comment
Share on other sites

  • 0

Вы на мой вопрос ответьте, тогда я, может, отвечу на ваш.

вот кусок:

if($_GET['page']!="shop.browse") {
if($_GET['flypage']!="flypage.tpl") {echo 12; }
else { echo 1; }
} else {
if($_GET['flypage']!="flypage.tpl") { echo 2; }
else { echo 0; }
}

что он выводит?

это вариант очень-очень громоздкий, должно быть одно "echo"

\уж извините, но как сказано выше: "А вы предложенный ТС код пробовали или это теоретически ?"

допустим Ваш код выводит как надо - какой ответ намой вопрос?

допусти нет - тогда какое умозаключения

\я тут че-то придумал- вы проверь - а там дальше поглядим

Edited by jurassik
Link to comment
Share on other sites

  • 0
это вариант очень-очень громоздкий, должно быть одно "echo"

:facepalmxd:

*очень медленно и разборчиво*

Просто вставьте кусок в код. И скажите мне, что он выведет. Мне это надо, чтобы вам помочь. Помочь. Вам. Вставьте кусок и скажите, что он выведет, чтобы я смог вам помочь.

допустим Ваш код выводит как надо - какой ответ намой вопрос?

допусти нет - тогда какое умозаключения

\я тут че-то придумал- вы проверь - а там дальше поглядим

Блджад. До свидания. Читать научитесь - приходите.

Edited by Gaspode
  • Like 1
Link to comment
Share on other sites

  • 0

КАКОЙ URL? КАКОЙ URL? КАКОЙ URL? КАКОЙ URL? КАКОЙ URL? КАКОЙ URL? КАКОЙ URL? КАКОЙ URL? КАКОЙ URL? КАКОЙ URL? КАКОЙ URL? КАКОЙ URL? КАКОЙ URL? КАКОЙ URL?

Может ты не на той странице ждёшь появления своего текста.

этот текст скрыт на странице page=shop.browse и на странице flypage=flypage.tpl
Этот текст появится на всех страницах, на которых page != shop.browse, а так же на странице page=shop.browse&flypage!=flypage.tpl
Link to comment
Share on other sites

  • 0

Этот текст появится на всех страницах, на которых page != shop.browse, а так же на странице page=shop.browse&flypage!=flypage.tpl

там услоловие or, а не and.

page != shop.browse - на этой странице текст есть, (условие !=)

page=shop.browse&flypage!=flypage.tpl - такой стриницы вообще нет

Link to comment
Share on other sites

  • 0

Ваш код(для наглядности):


<?php if (($_GET['page']!="shop.browse") or ($_GET['flypage']!="flypage.tpl"))
{этот текст скрыт на странице page=shop.browse и на странице flypage=flypage.tpl}

По условию не совпадает что «этот текст скрыт на странице page=shop.browse и на странице flypage=flypage.tpl»

На самом деле: Этот текст отображается если page не равна или flypage не равен или их не существует.

Для того чтоб было именно скрыт нам нужно поставить инверсию условия


if (!(($_GET['page']=="shop.browse") || ($_GET['flypage']=="flypage.tpl"))) {
Echo '<p>этот текст скрыт на странице page=shop.browse и на странице flypage=flypage.tpl';
}

как-то так

  • Like 1
Link to comment
Share on other sites

  • 0


if (!(($_GET['page']=="shop.browse") || ($_GET['flypage']=="flypage.tpl"))) {
Echo '<p>этот текст скрыт на странице page=shop.browse и на странице flypage=flypage.tpl';
}

как-то так

тема раскрыта!

Этот текст отображается если page не равна или flypage не равен или их не существует.

==

если page равна или flypage равен, то не отображается..

Link to comment
Share on other sites

  • 0
там услоловие or, а не and.
Вот именно, or - сложение, and - умножение.

Рассмотрим фразу "Я не люблю пирожки с капустой и повидлом". Это значит, что человеку не нравится пирожки с начинкой из капусты и подвидла одновременно (умножение). Тоже самое: "За утерю и поломку номерка штраф - 500р.". Означает, что штраф берётся только если номерок потерян и сломан одновременно.

В твоём случае условие срабатывает если первый член равен истине, или же (если он не равен истине) истине равен второй член.

  • Like 1
Link to comment
Share on other sites

  • 0
там услоловие or, а не and.
Вот именно, or - сложение, and - умножение.

Рассмотрим фразу "Я не люблю пирожки с капустой и повидлом". Это значит, что человеку не нравится пирожки с начинкой из капусты и подвидла одновременно (умножение). Тоже самое: "За утерю и поломку номерка штраф - 500р.". Означает, что штраф берётся только если номерок потерян и сломан одновременно.

В твоём случае условие срабатывает если первый член равен истине, или же (если он не равен истине) истине равен второй член.

or - это или.

если условие перевернуть (!= заменим ==)

if (($_GET['page']=="shop.browse") or ($_GET['flypage']=="flypage.tpl"))

то условие ведет себя как я и думаю:

если одна из страниц есть в запросе, то показать текст.

Link to comment
Share on other sites

  • 0
or - это или.
дизъюнкция (или) - это сложение. Смотри таблицы истинности.

есть правило (!a | !c)=(a & c), то есть когда ты убираешь отрицание, ты должен заменить и действие.

Соответственно:

if (!($_GET['page']=="shop.browse") && !($_GET['flypage']=="flypage.tpl"))

Я эту алгебрологику в университете проходил.

  • Like 1
Link to comment
Share on other sites

  • 0
or - это или.
дизъюнкция (или) - это сложение. Смотри таблицы истинности.

есть правило (!a | !c)=(a & c), то есть когда ты убираешь отрицание, ты должен заменить и действие.

Соответственно:

if (!($_GET['page']=="shop.browse") && !($_GET['flypage']=="flypage.tpl"))

Я эту алгебрологику в университете проходил.

победил.

Link to comment
Share on other sites

  • 0

Поправка:

!(a & c) = !a | !c => (a & c) = !(!a | !c)

Верно и обратное:

!(a | c) = !a & !c

А искомое в первом посте условие я написал верно:

if ($_GET['page'] != "shop.browse" && $_GET['flypage'] != "flypage.tpl")

Оно соответствует твоему перевёрнутому условию, но поскольку нужен обратный эффект, то отрицание перед скобкой убираем.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy