Как сделать запрос sql для отображения 1 результата на основе идентификатора в таблице базы данных - PullRequest
0 голосов
/ 17 июня 2020

Мне нужна помощь, я не могу понять, я не могу понять, почему у меня возникают ошибки, и я не могу достичь чего-то чертовски простого.

Короче говоря, у меня есть веб-сайт для управления проектами, поэтому когда я запускаю функцию поиска, она выдает таблицу с некоторыми записями из базы данных, есть кнопка под названием «просмотреть детали», которая назначается идентификатору проекта с базой данных, т.е. 21, 1, 48 и т. д. c, проблема в том, что когда я нажимаю "просмотреть подробности", он выбрасывает все из предложений таблицы вместо 1 проекта, независимо от того, какую кнопку я нажимаю, если его id 1, 21, 48, он печатает все.

подробности страница подробности. php:

<?php 
         include '../includes/config.php';

                // Check connection
                  if($link === false){
                    die("ERROR: Could not connect. " . mysqli_connect_error());
                  }
                  // Attempt select query execution
                  $sql = "SELECT * FROM proposals_table WHERE id LIKE '_%'";


                  if($result = mysqli_query($link, $sql)){
                      if(mysqli_num_rows($result) > 0){
                          echo "<table class='table table-bordered'>";
                              echo "<tr>";
                                  echo "<th>Organisation</th>";
                                  echo "<th>Project</th>";
                                  echo "<th>Proposal Date</th>";
                                  echo "<th>Date Received</th>";
                                  echo "<th>Notes</th>";
                              echo "</tr>";
                          while($row = mysqli_fetch_array($result)){
                              echo "<tr>";
                                  echo "<td>" . $row['company'] . "</td>";
                                  echo "<td>" . $row['project'] . "</td>";
                                  echo "<td>" . $row['proposal_date'] . "</td>";
                                  echo "<td>" . $row['date_received'] . "</td>";
                                  echo "<td>" . $row['notes'] . "</td>";

                              echo "</tr>";
                          }
                          echo "</table>";
                          // Free result set
                          mysqli_free_result($result);
                      } else{
                          echo "No records matching your query were found.";
                      }
                  } else{
                      echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
                  }
                  ?>

страница поиска / результатов предложения. php

      <?php 
         include '../includes/config.php';

                // Check connection
                  if($link === false){
                    die("ERROR: Could not connect. " . mysqli_connect_error());
                  }
                  // Attempt select query execution
                  $sql = "SELECT * FROM proposals_table";
                  if($result = mysqli_query($link, $sql)){
                      if(mysqli_num_rows($result) > 0){
                          echo "<table class='table table-bordered'>";
                              echo "<tr>";
                                  echo "<th>Organisation</th>";
                                  echo "<th>Project</th>";
                                  echo "<th>Proposal Date</th>";
                                  echo "<th>Date Received</th>";
                                  echo "<th>Options</th>";
                              echo "</tr>";
                          while($row = mysqli_fetch_array($result)){
                              echo "<tr>";
                                  echo "<td>" . $row['company'] . "</td>";
                                  echo "<td>" . $row['project'] . "</td>";
                                  echo "<td>" . $row['proposal_date'] . "</td>";
                                  echo "<td>" . $row['date_received'] . "</td>";
                                  echo "<td> <a class='btn btn-primary' href='details.php?id={$row['id']}'>See details</a></td>";
                              echo "</tr>";
                          }
                          echo "</table>";
                          // Free result set
                          mysqli_free_result($result);
                      } else{
                          echo "No records matching your query were found.";
                      }
                  } else{
                      echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
                  }
                  ?>

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

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

Прежде всего следует отделить HTML от PHP. Лучше всего хранить их в отдельных файлах. В PHP вы подготавливаете данные для отображения, а затем в HTML вы заполняете пробелы значениями PHP.

Чтобы выбрать значение из MySQL с использованием данного идентификатора, вы должны использовать подготовленный операторы с привязкой параметров. Итак, если вы создаете ссылку таким образом:

echo "<td> <a class='btn btn-primary' href='details.php?id=".urlencode($row['id'])."'>See details</a></td>";

, вы можете получить этот идентификатор на своей странице сведений, используя $_GET['id']. Вы можете привязать это значение к вашему предложению WHERE в SQL.

<?php 
include '../includes/config.php';

// Attempt select query execution
$stmt = $link->prepare("SELECT * FROM proposals_table WHERE id=?");
$stmt->bind_param('s', $_GET['id']);
$stmt->execute();
$proposals = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);


if($proposals) {
?>
    <table class='table table-bordered'>
        <tr>
            <th>Organisation</th>
            <th>Project</th>
            <th>Proposal Date</th>
            <th>Date Received</th>
            <th>Notes</th>
        </tr>
    <?php foreach($proposals as $row): ?>
        <tr>
            <td><?=$row['company'] ?></td>
            <td><?=$row['project'] ?></td>
            <td><?=$row['proposal_date'] ?></td>
            <td><?=$row['date_received'] ?></td>
            <td><?=$row['notes'] ?></td>

        </tr>
    <?php endforeach; ?>
    </table>
<?php
} else {
    echo 'No records matching your query were found.';
}

И, конечно же, ваша страница config. php должна выглядеть так:

<?php

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = new mysqli('localhost', 'user', 'pass', 'db');
$link->set_charset('utf8mb4'); // always set the charset
0 голосов
/ 17 июня 2020

Из вашего кода я скопировал из подробности. php:

 // Attempt select query execution
$sql = "SELECT * FROM proposals_table WHERE id LIKE '_%'";

  1. В приведенном выше запросе используется LIKE, который возвращает все, что близко к тому, что вы ищете для.
  2. Но вы не получали значение, переданное из result_page. php.

FIX

В вашем search / result_page_proposal. php, измените его на это:

<?php 
include '../includes/config.php';
// Check connection
if($link === false){
  die("ERROR: Could not connect. " . mysqli_connect_error());
}

//Accept the value from previous page
$id = $_GET['id'];
// Attempt select query execution
$sql = "SELECT * FROM proposals_table WHERE id = '$id'";

//Code continues

См.: Вам необходимо выполнить проверку безопасности и нулевые проверки.

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