Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Не срабатывает условие (https://javascript.ru/forum/server/70392-ne-srabatyvaet-uslovie.html)

Sonya 02.09.2017 10:29

Не срабатывает условие
 
Здравствуйте! Подскажите, пожалуйста, почему не срабатывают условия. Есть скрипт определяющий разрешение экрана, его результат записываю в переменную, а потом создаю условия. Вот так работает:
$width='<script>var ScreenWidth = screen.width; document.write(ScreenWidth);</script>';
     if ($width = 1280) {
	    echo "Да";
	    }else{
        echo "Нет";
     }
, если же указываю диапазон, то нет:
$width='<script>var ScreenWidth = screen.width; document.write(ScreenWidth);</script>';
     if ($width >= 1280 && $width <= 1440) {
	    echo "Да";
	    }else{
        echo "Нет";
     }
. подскажите, пожалуйста, почему такое происходит?

laimas 02.09.2017 10:57

А первый "работает" потому, что отвечает "Да", поэтому вы заключаете, что код рабочий?

Sonya 02.09.2017 11:22

Да, а разве нет?

laimas 02.09.2017 12:11

Цитата:

Сообщение от Sonya
а разве нет?

А вы как думаете? :)

'<script>var ScreenWidth = screen.width; document.write(ScreenWidth);</script>' - для браузера это JS код, который может быть выполнен, если его вывести в браузер, чего у вас нет и для РНР, это просто строка. Но даже будучи выведенным в браузер результат его работы не будет доступен серверному языку.

В первом случае вы будете всегда получать "Да", так как в условии вы не проверяете на равенство, а переназначаете значение этой переменной на 1280:

if ($width = 1280)

булево значение которой конечно же возвратит true, вот отсюда и "Да", и "ура, работает". Если же написать условие правильно:

if ($width == 1280)

то конечно же будет "Нет", так как строковое значение $width не равно 1280, оно же не будет соответствовать и $width >= 1280 && $width <= 1440.

Sonya 02.09.2017 12:21

Что посоветуете? Сначала передать значение на сервер, и уже потом его использовать?

Sonya 02.09.2017 12:23

Или использовать JS, дописав скрипт?

laimas 02.09.2017 12:25

Цитата:

Сообщение от Sonya
Сначала передать значение на сервер, и уже потом его использовать?

Вот тут я не знаю, это зависит от того, чего требуется. Если это некое отображение содержания зависящее от разрешения, то этим должен заниматься клиент - либо JS, либо CSS.

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

Sonya 02.09.2017 12:37

Да, это отображение содержания зависящее от разрешения. Есть код таймера:
jQuery(document).ready(function() {
		jQuery(".eTimer").eTimer({
			etType: 0, etDate: "03.09.2017.0.0", etTitleText: "До окончания акции осталось:", etTitleSize: 20, etShowSign: 1, etSep: ":", etFontFamily: "Trebuchet MS", etTextColor: "#a3a3a3", etPaddingTB: 15, etPaddingLR: 15, etBackground: "#333333", etBorderSize: 0, etBorderRadius: 2, etBorderColor: "white", etShadow: " 0px 0px 10px 0px #333333", etLastUnit: 4, etNumberFontFamily: "Impact", etNumberSize: 35, etNumberColor: "white", etNumberPaddingTB: 0, etNumberPaddingLR: 8, etNumberBackground: "#11abb0", etNumberBorderSize: 0, etNumberBorderRadius: 5, etNumberBorderColor: "white", etNumberShadow: "inset 0px 0px 10px 0px rgba(0, 0, 0, 0.5)"
		});
	});

надо, чтобы значение etNumberSize было в зависимости от разрешения экрана. Можно было бы это значение выводить как разрешение деленное на 10 с получением целого числа и подставлять в значение etNumberSize.

laimas 02.09.2017 12:48

Ну так и пишите в этом js-коде:

..., etNumberSize: (screen.width/10).toFixed(), ....

Sonya 02.09.2017 12:53

Спасибо большое!


Часовой пояс GMT +3, время: 15:48.