Невозможно выполнить MySQL запросов на PHP веб-странице. - PullRequest
0 голосов
/ 06 марта 2020

Итак, я работаю над сайтом, на котором мне нужно получить данные с сервера MySQL и показать их на веб-странице. Я написал простой PHP скрипт для чтения данных из базы данных в зависимости от аргумента, переданного в URL, и он работает просто отлично.

Вот скрипт:

<?php
function updator($item)
{
  $servername = "localhost";
  $username = "yaddvirus";
  $password = "password";
  $dbname = "database";

  // Create connection
  $conn = mysqli_connect($servername, $username, $password, $dbname);

  // Check connection
  if (!$conn) {
      die("Connection failed: " . mysqli_connect_error());
  }
  echo "Connected successfully";
  $table = "inventory";
  //$item = "Rose Almonds";

  $sql = "SELECT * FROM $table WHERE item = '$item'";
  $result = $conn->query($sql);

  while($data=$result->fetch_assoc()){
    echo "<h1>{$data['item']}</h1><br>";
    echo "<h1>{$data['item_desc']}</h1><br>";
    echo "<h1>{$data['price125']}</h1><br>";
    echo "<h1>{$data['price250']}</h1><br>";
  }
      //echo "0 results";
  $conn->close();
}
if (defined('STDIN')) {
  $item = $argv[1];
} else {
  $item = $_GET['item'];
}
//$item = "Cherry";
updator($item);

?>

Этот скрипт работает точно так, как ожидалось. Я называю это с помощью http://nutsnboltz.com/tester.php?item=itemname, и он тянет и показывает данные очень хорошо.

PS Вы можете проверить это, используя Cherry или Blueberry в качестве элементов.

Проблема в том, что когда я пытаюсь поместить эти данные в мою страницу продукта. php файл, я не могу получить данные для отображения. Вот как выглядит файловая иерархия:

<php
*Exact same php script as above*
?>
<html>
<head>
Header and navbar come here
</head>
<body>
  <div class="container-fluid">
    <div class="row">
      <div class="col-4">
        <h1> RANDOM TEXT BEFORE </h1>
        <?php
        while($data=$result->fetch_assoc()){
          echo "<h1>{$data['item']}</h1><br>";
          echo "<h1>{$data['item_desc']}</h1><br>";
          echo "<h1>{$data['price125']}</h1><br>";
          echo "<h1>{$data['price250']}</h1><br>";
        } 
         ?>

      </div>
      <div class="col-8">
        <H!> MORE RANDOM TEXT</h1>
      </div>

    </div>
</div>
</body>
<footer>
footer here
scripts etc
</footer>
</html>

Так что скрипт над нижним колонтитулом печатает все просто отлично. Однако там, где находится HTML, после кода PHP ничего не печатается. Он показывает только мой Navbar и тег H1, говорящий «СЛУЧАЙНЫЙ ТЕКСТ ДО», и это все. Мой нижний колонтитул пропал вместе со всем остальным.

В чем именно заключается проблема и как я могу это исправить?

1 Ответ

0 голосов
/ 06 марта 2020

Кажется, проблема в том, что вы объявляете $result внутри функции updator, поэтому она недоступна, когда вы пытаетесь вызвать ее позже.

Лучшее, что можно сделать, это вернуть $result из функции и присвоить ее переменной - что-то вроде этого:

function updator($item)
{
    // ... some code ...

    $sql = "SELECT * FROM $table WHERE item = '$item'";
    $result = $conn->query($sql);

    // ... some more code ...

    return $result;
}

<-- HTML CODE HERE -->

<?php
$item = !empty($_GET['item']) ? $_GET['item'] : false;

// yes I know it's a bit hacky to assign the variable
// within the 'if' condition...
if($item && $result = updator($item)) {
    while($data=$result->fetch_assoc()){
        echo "<h1>{$data['item']}</h1><br>";
        echo "<h1>{$data['item_desc']}</h1><br>";
        echo "<h1>{$data['price125']}</h1><br>";
        echo "<h1>{$data['price250']}</h1><br>";
    } 
}
?>
...