Необходимо иметь возможность поиска по полю в таблице из формы ввода - PullRequest
0 голосов
/ 21 октября 2019

Мне нужно добавить форму ввода для поиска второго столбца в таблице.

Я попытался добавить форму. Попытался вручную положить то, что я ищу в строке SELECT, и он находит данные. Просто нужно быть в состоянии найти его с помощью ввода формы.


<?php

/**
 * Mark as Paid
 */

require "../config.php";
require "../common.php";

$success = null;

if (isset($_POST["submit"])) {
  if (!hash_equals($_SESSION['csrf'], $_POST['csrf'])) die();

  try {
    $connection = new PDO($dsn, $username, $password, $options);

    $itemnumber = $_POST["submit"];

    $sql = "UPDATE consignsold SET paid='y' WHERE paid='n' AND sold='y' AND itemnumber = $itemnumber";

    $statement = $connection->prepare($sql);
    $statement->bindValue(':itemnumber', $itemnumber);
    $statement->bindValue(':paid', $paid);
    $statement->bindValue(':sold', $sold);

    $statement->execute();

    $success = "Item successfully updated";
  } catch(PDOException $error) {
    echo $sql . "<br>" . $error->getMessage();
  }
}

try {
  $connection = new PDO($dsn, $username, $password, $options);

  $sql = "SELECT * FROM consignsold WHERE paid='n'";

  $statement = $connection->prepare($sql);
  $statement->execute();

  $result = $statement->fetchAll();
} catch(PDOException $error) {
  echo $sql . "<br>" . $error->getMessage();
}
?>
<?php require "templates/header.php"; ?>

<h2>Mark Items as Paid</h2>

<?php if ($success) echo $success; ?>
<style>
table, th, td {
  border: 1px solid black;
}
</style>
<form method="post">
  <input name="csrf" type="hidden" value="<?php echo escape($_SESSION['csrf']); ?>">
  <table>
    <thead>
      <tr>
        <th>Sale Number</th>
        <th>Item Number</th>
        <th>Lot Number</th>
        <th>Category</th>
        <th>Item Description</th>
        <th>Reserve</th>
        <th>Seller Number</th>
        <th>Amount</th>
        <th>Buyer Number</th>
        <th>Sold</th>
        <th>Paid</th>
        <th>Mark</th>
      </tr>
    </thead>
    <tbody>

    <?php foreach ($result as $row) : ?>
      <tr>
        <td><?php echo escape($row["salenumber"]); ?></td>
        <td><?php echo escape($row["itemnumber"]); ?></td>
        <td><?php echo escape($row["lotnumber"]); ?></td>
        <td><?php echo escape($row["category"]); ?></td>
        <td><?php echo escape($row["itemdescription"]); ?></td>
        <td><?php echo escape($row["reserve"]); ?></td>
        <td><?php echo escape($row["sellernumber"]); ?></td>
        <td><?php echo escape($row["amount"]); ?></td>
        <td><?php echo escape($row["buyernumber"]); ?></td>
        <td><?php echo escape($row["sold"]); ?></td>
        <td><?php echo escape($row["paid"]); ?></td>
        <td><button type="submit" name="submit" value="<?php echo escape($row["itemnumber"]); ?>">Mark as Paid</button></td>
      </tr>
    <?php endforeach; ?>
    </tbody>
  </table>
</form>
<br>

<?php require "templates/footer.php"; ?>

Если я пытаюсь добавить форму, я получаю пустую страницу. Я ожидаю форму с местом для ввода номера покупателя. Как есть, страница работает, но отображает все товары, и оператор должен вручную найти каждый товар по номеру покупателя и нажать кнопку «Пометить как оплаченную». То, что мне нужно сделать, это ввести данные, в которых он запрашивает номер покупателя, и перечислить только те элементы, которые отмечены кнопкой отметки в конце. Это операция с замкнутым контуром, поэтому в настоящее время не стоит беспокоиться об инъекциях.

Строка: $sql = "SELECT * FROM consignsold WHERE paid='n'"; будет изменена на что-то вроде: $sql = "SELECT * FROM consignsold WHERE paid='n' AND buyernumber = <from form input>"; Некоторые попросили уточнить. ,,Я думал, что было довольно ясно начать с но. ,,ПЕРЕСМОТР. Что мне нужно на этой странице, так это ввод формы, который запрашивает у оператора номер покупателя, а затем использует ввод из этой формы в строке SELECT, чтобы найти номер покупателя и продал = 'y'. «customernumber» - это столбец, а «sold» - это столбец в таблице: consignsold. Еще раз спасибо всем, кто пытается помочь!

1 Ответ

0 голосов
/ 21 октября 2019

Я не совсем уверен, я понимаю ваш вопрос, но позвольте мне ответить на то, что я вижу, неправильно.

Прежде всего, вы не должны ловить исключения. Это считается плохой практикой.

Вам также не нужно 3 привязки, вы можете просто передать $itemnumber в execute(). Для этого, однако, вам нужно поместить заполнитель в запросе. ? проще, чем именованный заполнитель.

$connection = new PDO($dsn, $username, $password, $options);

$itemnumber = $_POST["submit"];

$sql = "UPDATE consignsold SET paid='y' WHERE paid='n' AND sold='y' AND itemnumber=?";

$statement = $connection->prepare($sql);
$statement->execute([$itemnumber]);

$success = "Item successfully updated";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...