объединение двух операторов if else, относящихся к состоянию входа пользователя в систему

#php #facebook

#php #Facebook

Вопрос:

всем доброго утра!

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

существует 3 состояния:

  1. пользователь входит в систему с помощью facebook connect
  2. пользователь входит в систему с помощью формы входа на веб-сайт
  3. пользователь не вошел в систему, используя либо

я смог составить условные операторы как для 1), так и для 2), которые не работают должным образом.

это еще предстоит усовершенствовать.

если пользователь вошел в систему с использованием опции facebook connect, условный оператор не останавливается на 1), он переходит к 2), что приводит к ошибке Undefined index: uid.

это происходит потому, что индекс uid создается только тогда, когда пользователь входит в систему с помощью формы веб-сайта.

на данный момент я понятия не имею о реализации 3)!

я был бы признателен за любую помощь в продвижении этого кода.

заранее спасибо.

 <?php
// if logged in using fb connect
if ($user) {
      echo "fb";
// proceed knowing you have a logged in user who's authenticated
} else {
// proceed knowing you require user login and/or authentication
echo "this is shown to a user who has not logged in";
} 

// if logged in using login form
if (isset($_SESSION['uid'])) {
// proceed knowing you have a logged in user who's authenticated
  echo "kite"; } 
// proceed knowing you require user login and/or authentication
else { 
echo "this is shown to a user who has not logged in";
}
?>
  

Ответ №1:

Хорошо, вот разгадка этого:

 if (isset($user)){ // use isset() to avoid undefined index warning ..
    echo "fb";
} elseif($_SESSION['uid']){
    echo "kite";
}else{
   // Anonymous user
   echo "this is shown to a user who has not logged in";
}
  

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

Имейте в виду, что пользователи, которые могут входить в facebook, все еще могут иметь установленный uid $ _SESSION. Вам нужно было бы указать условие, которое вы хотите, чтобы распространенность оценивалась первым, или добавить условие, которое запрещает устанавливать как fb, так и $ _SESSION, я действительно не знаю, каковы ваши намерения для этого.

Комментарии:

1. пользователь не может войти в систему на обоих

Ответ №2:

 if ($user)
{
  echo "fb";
}
elseif(isset($_SESSION['uid']))
{
  echo "kite";
}
else
{
  echo "this is shown to a user who has not logged in";

}
  

Ответ №3:

 if($user || isset($_SESSION['uid'])){
  echo $user?('fb'.(isset($_SESSION['uid'])?' AND kite':'')):'kite';
}else{
  echo 'this is shown to a user who has not logged in';
}
  

Ответ №4:

Вам нужно поставить проверку на uid в else if вместо другого if . Следующий код должен устранить проблему:

 <?php
    // if logged in using fb connect
    if ($user) {
          echo "fb";
    // proceed knowing you have a logged in user who's authenticated
    } // if logged in using login form
    elseif (isset($_SESSION['uid'])) {
    // proceed knowing you have a logged in user who's authenticated
          echo "kite"; 
    } 
    // proceed knowing you require user login and/or authentication
    else { 
    // proceed knowing you require user login and/or authentication
          echo "this is shown to a user who has not logged in";
    } 

?>
  

Комментарии:

1. не рекомендуется использовать elseif, если иное не указано, предпочтительнее использовать elseif. Взято из руководства : Примечание: Обратите внимание, что elseif и else if будут считаться одинаковыми только при использовании фигурных скобок. При использовании двоеточия для определения ваших условий if / elseif, вы не должны разделять else if на два слова, иначе PHP завершится ошибкой синтаксического анализа.

2. @stefgosselin: 1. Спасибо за расширение моих знаний. У меня другой опыт, поэтому я использую его с тех пор, как он заработал, так как я всегда использовал {} вместо :

3. Приятно, мой друг. Удачного кодирования.