Эта функция php в настоящее время перенаправляет пользователя на другую страницу, если они не вошли в систему
if(!isset($_SESSION['SESS_USER_ID']) || (trim($_SESSION['SESS_USER_ID']) == '')){ header("location: login_failed.html"); exit(); }
Как я могу изменить функцию, чтобы вместо перенаправления пользователя она выполняла следующее:
loginFailed();
функцию javascript: loginFailed();
!isset($_SESSION['SESS_USER_ID'])
. Функции, которые я хочу вызвать / предотвратить
function loginFailed() { $().toastmessage('showToast', { text: 'Log In Failed<br/><br/>Please check your username and password', sticky: false, position: 'top-center', type: 'message', closeText: '', close: function () { console.log("toast is closed ...") } }); } $(function () { $(".fancybox").fancybox({ preload: true, }); $(".fancybox").eq(0).trigger('click'); });
Я пробовал:
echo "<script>loginFailed();</script>"; echo "<script type="text/javascript">loginFailed();</script>"; echo "<script type="text/javascript">loginFailed;</script>";
Добавляем к ответу techfoobar …
Как правило, рекомендуется перевести переменные из PHP в Javascript (если необходимо) и позволить Javascript обрабатывать его, а не повторять разные javascript в зависимости от переменной PHP.
Имейте в виду, что все переменные javascript могут управляться клиентом.
Попробуйте что-то вроде этого:
if(!isset($_SESSION['SESS_USER_ID']) || (trim($_SESSION['SESS_USER_ID']) == '')){ $t="no_session"; } else{ $t="yes_session"; } .... <script> var session="<?php echo $t; ?>"; if(session == "no_session") loginFailed(); </script>
PHP работает на стороне сервера. JavaScript работает на стороне клиента внутри браузера. PHP не может напрямую вызывать функции JavaScript.
Однако PHP может отображать JavaScript вместе с HTML в браузере, чтобы браузер мог его запустить.
В вашем конкретном случае одна вещь, которую вы можете сделать, это проверить статус входа в систему с помощью вызова AJAX и вызвать требуемые методы JS в своем обратном вызове.
Пример:
Для проверки статуса входа в систему:
/* JS */ function checkLoginState() { $.post('/yourserver.com/isloggedin.php', function(data) { if(data != "OK") { // not logged in // call your JS method thats disables stuff etc. loginFailed(); } }); } // Periodically check login state setInterval(checkLoginState, 10000); // check every 10 seconds, change as needed. /* PHP - isloggedin.php */ if(!isset($_SESSION['SESS_USER_ID']) || (trim($_SESSION['SESS_USER_ID']) == '')){ echo "NOT OK"; } else { echo "OK"; }
Я объединил предложение @ hellohellosharp с решением, которое было дано мне @willoller для другой проблемы и выяснил 🙂
Добавьте это в php:
$logged_in = (isset($_SESSION['SESS_USER_ID']));
Добавьте это в javascript:
<?php if ($logged_in) : ?> <a class="fancybox" data-fancybox-type="iframe" href="iframe1.html"></a> <?php else : ?> loginFailed(); <?php endif; ?>
Я также использую это, чтобы изменить параметры меню в зависимости от того, зарегистрирован ли пользователь.
Просто напоминание – это использует ISSET для определения того, что должен показывать javascript, но это только изменяет опыт пользователя и не обеспечивает никакой безопасности.