Невозможно отобразить переменную POSTed PHP в html - PullRequest
0 голосов
/ 18 января 2020

Я создаю простое приложение, которое позволяет пользователю просматривать и редактировать элементы в базе данных, а также добавлять новые.

Я хочу, чтобы пользователь мог щелкнуть элемент, скажем «Скрипка» ", на моей странице index. php и перенаправьте ее на новую страницу itemDisplay. php, где она отображает информацию (вес, длина, ширина, высота) элемента.

Это мой выпадающий селектор:

index. php

            <div class="btn-group w-25">
              <button 
                     type="button" 
                     class="btn btn-outline-dark dropdown-toggle" 
                     data-toggle="dropdown" 
                     aria-haspopup="true" 
                     aria-expanded="false">
                Items
              </button>
              <div class="dropdown-menu w-100">
                <a
                  class="dropdown-item"
                  href="itemDisplay.php"
                  id = "Fiddle"
                  onclick = "getItemInfo(this.id)">
                    Fiddle
                </a>
                <a
                  class="dropdown-item"
                  href="itemDisplay.php"
                  id = "Dish"
                  onclick = "getItemInfo(this.id)">
                    Dish
                </a>
                <a
                  class="dropdown-item"
                  href="itemDisplay.php"
                  id = "Spoon"
                  onclick = "getItemInfo(this.id)">
                  Spoon
                </a>
                <div class="dropdown-divider"></div>
                <a class="dropdown-item" href="./createItem.php">Create New Item</a>
              </div>
            </div>

А это моя функция getItemInfo (), в тот же файл:

index. js

    <script>

      function getItemInfo(id){
        $.ajax({
          url:"itemDisplay.php",
          type: "POST",
          data: {name: JSON.stringify(id)}
        })
          .fail(function(){
            console.log("sad");
          })
            .done(function(response){
              console.log(response);
            });
      }

    </script>

Наконец, вот itemDisplay. php file:

'itemDisplay. php'

<?php
  session_start();
  require_once "itemManagement/dbConnect.php";
  require_once "itemManagement/items.php";
  $_SESSION["name"] = json_decode($_POST["name"]);
  $myItem = new Item;
  $test = "test";

  $itemWeight = $myItem -> getItemWeight($name);
  $itemLength = $myItem -> getItemLength($name);
  $itemWidth = $myItem -> getItemWidth($name);
  $itemHeight = $myItem -> getItemHeight($name);

  echo $_SESSION["name"];
  echo $test;
?>

<!DOCTYPE html>
<html lang="en">
  <head>

    <script src="https://code.jquery.com/jquery-2.2.4.min.js" type="text/javascript"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

    <script type="text/javascript">

    </script>

    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
    <link rel="stylesheet" href="./problem4.css">
    <link rel="stylesheet" href="https://unpkg.com/tachyons@4.10.0/css/tachyons.min.css"/>

    <title>Item Display</title>
  </head>
  <body>

    <header class="sans-serif">
      <div class="cover bg-left bg-center-l">
        <div class="pb5 pb6-m pb7-l">
          <div class="tc-l mt4 mt5-m mt6-l ph3">

            <h1 class="f2 f1-l fw2 black-90 mb0 lh-title">
              <?php echo $_SESSION["name"]; ?>
            </h1>

          </div>
        </div>
      </div>
    </header>

    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
  </body>
</html>

Зарегистрированный ответ на вызов ajax в консоли показывает это, если я нажимаю «Fiddle»: консоль

'. вывод журнала (ответа) из индекса. php '

Fiddletest
<!DOCTYPE html>
<html lang="en">
  <head>

    <script src="https://code.jquery.com/jquery-2.2.4.min.js" type="text/javascript"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

    <script type="text/javascript">

    </script>

    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
    <link rel="stylesheet" href="./problem4.css">
    <link rel="stylesheet" href="https://unpkg.com/tachyons@4.10.0/css/tachyons.min.css"/>

    <title>Item Display</title>
  </head>
  <body>

    <header class="sans-serif">
      <div class="cover bg-left bg-center-l">
        <div class="pb5 pb6-m pb7-l">
          <div class="tc-l mt4 mt5-m mt6-l ph3">

            <h1 class="f2 f1-l fw2 black-90 mb0 lh-title">
              Fiddle            </h1>

          </div>
        </div>
      </div>
    </header>

    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
  </body>
</html>

Моя проблема заключается в том, что после загрузки страницы itemDisplay php на экране отображается только «test» верхний левый угол. Я полностью застрял в возможности отобразить переменную $ name.

После некоторых исследований я узнал, что переменные не сохраняются между запросами, что, по моему мнению, было моей проблемой, поэтому я изменил переменную $ name на переменную сеанса. Похоже, это ни на что не повлияло.

Я также попытался поставить условное выражение для рендеринга переменной $ test только если isset ($ _ SESSION ["name])", чтобы проверить, не отображается ли переменная, потому что это было как-то НЕДЕЙСТВИТЕЛЬНО, но это все равно только что показало «тест».

Сейчас я весьма озадачен, потому что кажется, что переменная действительно установлена ​​при загрузке этой страницы, но у меня нет доступа к ней.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 18 января 2020

Когда вы переходите по ссылке на item-display, $_POST['name'] не устанавливается, поэтому вы присваиваете null для $_SESSION['name']. Вы должны проверить, установлена ​​ли переменная POST, прежде чем назначать ее.

if (isset($_POST['name']) {
    $_SESSION['name'] = $_POST['name'];
}

Обратите внимание, что ваш метод использования AJAX сначала, а затем связывание небезопасен. Поскольку AJAX является асинхронным, нет гарантии, что запрос AJAX будет выполнен до того, как вы перейдете на страницу, поэтому переменная сеанса может быть еще не установлена. Было бы лучше перенаправить в .done() функцию:

    .done(function() {
        location.href = "itemDisplay.php?name=Dish";
    })

Я не уверен, почему вы чувствуете необходимость использовать AJAX для этого. Вы можете просто поместить параметр в URL, например, так:

                <a
                  class="dropdown-item"
                  href="itemDisplay.php?name=Dish"
                  id = "Dish">
                    Dish
                </a>

Затем используйте в скрипте $_GET['name'].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...