Ошибка при передаче переменной URL со страницы индекса на страницу, прошедшую проверку, без значения изменения - PullRequest
0 голосов
/ 04 марта 2020

Я выполнил поиск в похожих вопросах, но не нашел решения для своей проблемы.

Я хотел бы передать часть URL-адреса со страницы индекса другой функции, которая вызывается, если пользователь аутентифицирован. Я могу напечатать переменную url на следующей странице, до аутентификации. Но поскольку URL-адрес изменяется при аутентификации пользователя, я получаю пробел. Как сохранить значение на другой странице после изменения URL-адреса?

В моем индексе. php Я вызываю функцию js, которая выдает номер курса при загрузке страницы:

<body onload="myFunction()">

myFunction - это код js в данных. js файл, который получает часть URL:

  const url = location.href;

  const urlCourse=url.split('=')[1];

  document.getElementById("demo").innerHTML = urlCourse.toString(8);
}

В callCourses. php, у меня есть :

const course='<p id=demo></p>';
 echo course; // It works!


if ($GLOBALS['authenticated'] ) { //here the URL will change because the user is now authenticated

echo course; // Error does not get the course number.

1 Ответ

2 голосов
/ 04 марта 2020

Если URL-адрес изменяется после аутентификации и если у вас нет доступа к изменению этого URL-адреса, вам нужно будет сохранить эту переменную в одном из следующих мест:

На сервере

  • Cookie-файлы
  • Сессионные Cookies
// Before authentication
$_SESSION['courseNumber'] = getCourseNumberFromURL();
...
// In authenticated
$courseNumber = $_SESSION['courseNumber'];

Веб-браузер

  • Локальное хранилище
  • Хранилище сеансов
// Before authentication
localStorage.set('courseNumber', getCourseNumberFromURL())
...
// After Authentication
const courseNumber = localStorage.get('courseNumber')

Редактировать - Расширенный ответ Итак, я думаю, что здесь необходимы некоторые пояснения. PHP и JavaScript не могут общаться друг с другом так, как я думаю, вы понимаете. Вы можете использовать PHP для генерации динамических c сценариев, но как только пользователь отправит html, PHP больше не сможет взаимодействовать с этой страницей или манипулировать ею. Это означает, что вы не можете получить доступ к переменной JavaScript через PHP.

Если нам нужно отправить данные JavaScript на наш сервер, мы выполняем одно из двух действий:

  1. Создайте пользовательскую форму и отправьте ее на конечную точку PHP.
  2. Создайте запрос XMLHttpRequest.

Для 2 я рекомендую посмотреть выборку, которая очень поддерживается в все современные браузеры. (https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)

Принимая это во внимание, вот что я рекомендую сделать для вашего случая:

<?php
// Whatever you had before

// Store the courseNumber if we haven't already
if (!$_SESSION['courseNumber']) {
  $_SESSION['courseNumber'] = $_GET['courseNumber'];
}
// More junk
// Now, let's check if authenticated:
if ($GLOBALS['authenticated'] ) {
  // We are! Let's echo the courseNumber
  echo $_SESSION['courseNumber'];
  // Or, if you need to do it in a tag, try this:
  // This directly inserts the data as the page is being generated to send by PHP
  echo "<p id='demo'>".$_SESSION['courseNumber']."</p>";
  // Or do this if you have to have the JavaScript insert the value for some reason
  echo "<p id='demo'></p>";
  echo "<script>document.querySelector('#demo').innerText = '" . $_SESSION['courseNumber'] . "'</script>";
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...