Как заполнить эту HTML-таблицу с помощью PHP и MySQL

#php #html #mysql

#php #HTML #mysql

Вопрос:

Файл Mysql:

     <?php
  function query($sql, $array) {

    $servername = "localhost";
    $username = "verifyUser";
    $password = "test";
    $dbname = "verify";

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

    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    $result = $conn->query($sql);

    $stack = array();

    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            array_push($stack, $row);
            if(!$array) {
                return $row;
            }
        }
        return $stack;
    }
    $conn->close();

}
?>
  

Мой php-файл:

     <table>
    <tr>
        <th>Id</th>
        <th>Name</th>
        <th>Serial</th>
    </tr>

    <?php

        include_once("mysql.php");
        $result = query("SELECT ProductId, Name, SerialId FROM product", true);
        while ($row = mysqli_query($result)) {
            echo "<tr><td>" . $row['ProductId'] . "</td><td>" . $row['Name'] . "</td><td>" . $row['SerialId'] . "</td></tr>";
        }

    ?>
</table>
  

Вывод:

 Id  Name    Serial
  

Это мой первый день, когда я пытаюсь что-либо сделать с php. Так что полегче со мной 🙂
Я следовал различным руководствам и просматривал документацию по php, но я не смог заставить свою таблицу печатать что-либо, кроме заголовков таблицы.
Я не думаю, что мой запрос неверен, потому что я возвращаю результаты в workbench
https://gyazo.com/ab588fa7b7498444a5e8dcd1b172f315

Комментарии:

1. Здравствуйте, добро пожаловать в Stack Overflow. Прежде всего, спасибо за погружение и попытку освоить ценный новый навык! Я думаю, что вы здесь на правильном пути, хотя, как вы признаете, вы не совсем там. У меня есть один первоначальный вопрос, почему у вас здесь два отдельных файла? ИМХО, я думаю, их можно легко объединить в одну.

2. Другая проблема, которую я вижу сразу, находится в вашем нижнем php-файле, вы пытаетесь использовать sql-запрос для заполнения таблицы, который не будет работать, пока ($ row = mysqli_query($ result)) { echo «<tr><td>» . $row[‘ProductID’] . «</td><td>» . $row[‘Name’] . «</td><td>» . $row[‘SerialId’] . «</td></tr>»; } Я думаю, вам нужно использовать данные в $ stack здесь.

3. Я использовал два отдельных файла, чтобы попытаться повторно использовать как можно больше кода. По крайней мере, такова была моя логика. Каков наилучший способ получить данные $ stack?

4. Смотрите мой ответ ниже, он должен, по крайней мере, направить вас в правильном направлении. Кроме того, проведите некоторое исследование метода foreach() в PHP, он выполняет итерации по массиву. Это должно помочь вам начать. Немного поиграйте с ней, и если у вас возникнут какие-либо дополнительные вопросы, дайте мне знать.

5. Кроме того, пока вы еще молоды и впечатлительны в этой области, проведите некоторое исследование PDO и SQL-инъекций. На самом деле было обнаружено, что используемый вами метод запроса к БД (Mysqli) довольно небезопасен, сегодня лучше использовать PDO.

Ответ №1:

 <?php
 $table='<table>
            <tr>
             <th>Id</th>
             <th>Name</th>
             <th>Serial</th>
           </tr>';


  $servername = "localhost";
  $username = "";
  $password = "";
  $dbname = "verify";

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

 // Check connection
 if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
  }

 $result = $conn->query($sql);

  $stack = array();

if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
    array_push($stack, $row);
    if(!$array) {
        return $row;
     }
 }
}

$conn->close();

 $table_content='';
 foreach($stack as $item)
 {
  $table_content.= "<tr>
                     <td>" . $row['ProductId'] . "</td>
                     <td>" . $row['Name'] . " </td>.  
                     <td>" . $row['SerialId'] . "</td>
                   </tr>";

 }
echo $table.$table_content.'</table>';
 ?>
  

Ответ №2:

   <table>
<tr>
    <th>Id</th>
    <th>Name</th>
    <th>Serial</th>
</tr>

<?php


$servername = "localhost";
$username = "";
$password = "";
$dbname = "verify";

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

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$result = $conn->query($sql);

$stack = array();

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        array_push($stack, $row);
        if(!$array) {
            return $row;
        }
    }
}

$conn->close();




foreach($stack as $item)
{
    echo "<tr><td>" . $row['ProductId'] . "</td><td>" . $row['Name'] . "</td>.  <td>" . $row['SerialId'] . "</td></tr>";
}




?>
  

Комментарии:

1. Спасибо вам за всю помощь на данный момент. К сожалению, я все еще получаю тот же результат, который был у меня изначально.