#php #facebook
#php #Facebook
Вопрос:
всем доброго утра!
мне нужна помощь в объединении двух операторов if, относящихся к текущим состояниям входа пользователей, и создании третьего.
существует 3 состояния:
- пользователь входит в систему с помощью facebook connect
- пользователь входит в систему с помощью формы входа на веб-сайт
- пользователь не вошел в систему, используя либо
я смог составить условные операторы как для 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. Приятно, мой друг. Удачного кодирования.