#php #if-statement #operators
#php #if-statement #операторы
Вопрос:
Кто-нибудь может мне помочь с этим?
Я пытаюсь показать некоторый контент, который является отдельным для НАС или посетителей AU. Я геолокирую IP, а также использую сеанс PHP (чтобы пользователь мог переключать страны, если требуется)
if (($jsonobj->countryCode == "AU" || $_SESSION['username'] == "AU") amp;amp; ($jsonobj->countryCode !== "US" || $_SESSION['username'] !== "US"))
{
echo 'australian content';
}
if (($jsonobj->countryCode == "US" || $_SESSION['username'] == "US") amp;amp; ($jsonobj->countryCode !== "AU" || $_SESSION['username'] !== "AU"))
{
echo 'us content';
}
Я не могу заставить это работать — в принципе, я хочу гибкости, чтобы либо автоматически по IP показывать контент, либо они могли вручную переключать его. Есть идеи?
Комментарии:
1. В чем именно ваша проблема?
Ответ №1:
Итак, мы имеем…
/**
* GEO_IP Session country_code Result
*
* AU AU AU AU || AU AND
* AU US US
* US US US
* US AU AU US || AU
*
*/
if(( $geo_ip_country_code == "AU" || $_SESSION['country_code'] == "AU" ) amp;amp;
( $geo_ip_country_code == "US" || $_SESSION['country_code'] == "AU" )
) {
echo 'australian content';
} else {
echo 'us content';
}
Но, похоже, здесь есть закономерность! В принципе, GEO_IP может использоваться для первоначальной установки кода страны сеанса, но именно сеанс определяет, в какой стране они хотят находиться, поэтому вышеуказанное можно упростить.
ПРИМЕЧАНИЕ: Если $ _SESSION[‘country_code’] уже установлен, и я предполагаю, что вы делаете это при загрузке 1-й страницы с установленной страной, то вы не хотите ее обновлять.
Лучшее решение
Там, где вы устанавливаете свой сеанс, вы могли бы использовать что-то вроде этого…
if(!isset($_SESSION['country_code'])){
$_SESSION['country_code'] = $geo_ip_country_code;
}
И тогда это просто вопрос выбора текущего значения сеанса
$country_code = $_SESSION['country_code'];
switch(strtolower($country_code)){
case 'au':
echo "Aussie Content";
break;
case 'usa':
echo "USA Content";
break;
default:
echo "Sorry you can not access this.";
}
Комментарии:
1. Этот вид работает при переключении на страницу, но не при посещении страницы из региона AU или US (используя geo_ip)
2. Итак, как вы устанавливаете значение сеанса, записывается ли оно при загрузке страницы из geo_ip?
3. Ну, это был мой другой вопрос — в заголовке PHP у меня есть: session_start(); $_SESSION [‘country’] = $ jsonobj-> CountryCode; Но проблема в том, что он сбрасывает его каждый раз — я хочу, чтобы он запускался только один раз, независимо от того, с какой страницы пользователь заходит
4. На самом деле, я могу решить это с помощью if(session_id() == «) { session_start(); $_SESSION[‘country’] = $ jsonobj-> CountryCode; }
Ответ №2:
Ваше условие if было неправильным. Это была проверка обоих условий одновременно.
Это должно решить вашу проблему.
if ($jsonobj->countryCode == "AU" || $_SESSION['username'] == "AU"){
echo 'australian content';
}
if ($jsonobj->countryCode == "US" || $_SESSION['username'] == "US"){
echo 'us content';
}
Комментарии:
1. Нет, поскольку это отображало бы оба содержимого, если имя пользователя — AU или код страны — US
Ответ №3:
Вы можете выполнить поиск в обоих полях в поисках слова, букв или фразы, чтобы решить, что отображать. Если он содержит оба, он отобразит оба (если вы хотите одно или другое, удалите второе if и измените его на else)
if((bool)strpos(strtolower($jsonobj->countryCode . $_SESSION['username']), 'au')) {
// Australlian
}
if((bool)strpos(strtolower($jsonobj->countryCode . $_SESSION['username']), 'us')) {
// American
}
Если у вас их несколько, вы можете создать функцию для сохранения написанного кода:
function checkDisplay($code) use ($jsonobj) {
return (bool)strpos(strtolower($jsonobj->countryCode . $_SESSION['username']), $code);
}
Затем используйте его как:
if(checkDisplay('au')) {
// Australian
} elseif(checkDisplay('us')) {
// USA
} else {
// default or error
}