У меня есть скрипт PHP, который перечисляет элементы в таблице. Есть кнопка для отметки предметов. Эта страница работает с перебоями
Я не знаю с чего начать. Работает хорошо, когда работает, но ненадежно. Поискал в сети, и некоторые говорят, что нужно увеличить буфер отправки TCP и внести некоторые изменения в Apache2. Не знаю, где и как это сделать. (много ответов, которые конфликтуют друг с другом относительно того, где и как).
Вот сценарий. Я знаю, что это место для инъекций, но в настоящее время не стоит беспокоиться. Исправлю это позже (когда научусь). Знать о заполнителях и т. Д., Но не о том, как их использовать. (это вещи, которые мне нужны, чтобы убрать их с дороги ...) По запросу других я разместил здесь последнюю версию.
Более новая версия
<?php
/**
* Mark item 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);
$buyernumber = $_POST["submit"];
$itemnumber = $_POST["itemnumber"];
/*following two lines for debugging*/
echo "buyernumber $buyernumber";
echo "itemnumber $itemnumber";
$sqlupd = "UPDATE consignsold SET paid='y' WHERE itemnumber = $itemnumber AND buyernumber = $buyernumber AND sold = 'y' AND paid = 'n' ";
$statement = $connection->prepare($sqlupd);
$statement->bindValue(':buyernumber', $buyernumber);
$statement->bindValue(':itemnumber', $itemnumber);
$statement->execute();
$success = "Item successfully updated";
} catch(PDOException $error) {
echo $sqlupd . "<br>" . $error->getMessage();
}
}
try {
$connection = new PDO($dsn, $username, $password, $options);
$sqlsel = "SELECT * FROM consignsold WHERE paid='n' ORDER BY buyernumber ASC";
$statement = $connection->prepare($sqlsel);
$statement->execute();
$result = $statement->fetchAll();
} catch(PDOException $error) {
echo $sqlsel . "<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) : ?>
<form method="post">
<input name="csrf" type="hidden" value="<?php echo escape($_SESSION['csrf']); ?>">
<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"]); ?><input type="hidden" name="itemnumber" value="<?php echo escape($row["itemnumber"]); ?>"></td>
<td><input type="submit" name="submit" value="<?php echo escape($row["buyernumber"]); ?>">Mark as Paid</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</form>
<br>
<?php require "templates/footer.php"; ?>
более старая версия
<?php
/**
* Mark item 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);
$buyernumber = $_POST["submit"];
$itemno = $_POST["itemno"];
$sql = "UPDATE consignsold SET paid='y' WHERE paid='n' AND sold='y' AND buyernumber = $buyernumber AND itemnumber = $itemno";
$statement = $connection->prepare($sql);
$statement->bindValue(':buyernumber', $buyernumber);
$statement->bindValue(':itemnumber', $itemno);
$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' ORDER BY buyernumber ASC";
$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"]); ?><input type="hidden" name="itemno" value="<?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["buyernumber"]); ?>">Mark as Paid</button></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</form>
<br>
<?php require "templates/footer.php"; ?>
Эта вещь работает точно так, как она должна, когда она работает. Он просто случайным образом выбирает предметы, и кнопка «Пометить как оплаченное» перестает работать. Случайно кнопки работают. Как только он перестает работать, он обычно не будет работать снова до более позднего времени (намного позже), или если последний элемент в списке помечен, или иногда, если страница просто обновляется. Почти всегда последний пункт в списке работает. Что может быть причиной этого?
Не вижу никаких сообщений об ошибках, кнопка просто мигает и ничего не происходит. Я могу сказать, что страница перезагружается (что должно быть после того, как каждый элемент помечен), но это не меняет данные в таблице.
Может ли это быть проблема синхронизации или что-то еще? Как может быть, страница загружается до того, как ОБНОВЛЕНИЕ завершено или что-то? Если да, то где и как можно было бы добавить некоторую задержку, и где бы она там находилась, если так?
Я добавил задержку сразу после раздела ОБНОВЛЕНИЕ, просто чтобы посмотреть, поможет ли это иэто не имело никакого значения. Это просто заставило меня ждать, чтобы увидеть, как это не работает. : -D
Просто ради забавы я изменил порядок, в котором происходит ОБНОВЛЕНИЕ. Я не знаю, как он ищет в таблицах, но логически это будет слева направо. Поэтому я упорядочил их в строке ОБНОВЛЕНИЕ в том же порядке, в котором они показаны в PHPMYADMIN. Не сильно изменился. ,.
Хорошо, люди, это странно. ,,Я загрузил elinks, текстовый браузер и попытался запустить эту страницу оттуда. Ка-ZING! Там написано, что есть какая-то такая синтаксическая ошибка. ,,Мне интересно, почему это не отображается в обычном браузере! Могу поспорить, я могу найти это сейчас! Просто подумал, что вы все хотели бы это знать!