Это последняя часть этого, что ускользает от меня, я надеюсь, что кто-то сможет пролить свет на то, чего не хватает.
Более длинная часть этого кода работает нормально, это часть UPDATE (в файл dis_adjust.php), вызывающий горе.
Вместо жестко запрограммированного числа 13 он должен принять переменную catID.
Переменная catID изначально фильтрует число 1, а затем ОБНОВЛЯЕТСЯ до 5 при нажатии кнопки «Вознаграждение».
Не уверен, правильно ли я это объясняю или ясно ... возможно, это недосыпание.
dis_adjust.php
<?php
require 'dis_db.php';
$tag_h_id = $_GET['id'];
$sql = 'UPDATE `coh_items` SET `enabled`=5, `rewarded_at`= now() WHERE `category_id`=13 AND `tag_h_id`=:id';
$statement = $connection->prepare($sql);
if ($statement->execute([':id' => $tag_h_id])) {
header("Location: http://localhost/green/management/disbursements.php");
}
<?php
require 'dis_db.php';
$sql = 'SELECT
coh_items.id,
coh_items.tag_h_id,
coh_vendors.name,
coh_vendors.phone,
coh_vendors.tax_number,
coh_vendors.currency_code,
coh_items.purchase_price,
COUNT(tag_h_id) AS Reports,
(
purchase_price * COUNT(tag_h_id)
) AS Reward
FROM
coh_items
INNER JOIN coh_vendors ON coh_items.tag_h_id = coh_vendors.id
WHERE
coh_items.enabled = 1 AND category_id = ?
GROUP BY
tag_h_id;';
$statement = $connection->prepare($sql);
//$statement ->bindParam(':category_id', $catID, PDO::PARAM_INT);
$statement->execute([$_POST['catID']]);
$people = $statement->fetchAll(PDO::FETCH_OBJ);
?>
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<title>Disbursement</title>
<link rel = "stylesheet" href = "http://localhost/green/vendor/almasaeed2010/adminlte/bootstrap/css/bootstrap.min.css">
<!-- <script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> -->
<script src = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.js"></script>
<!-- <script src = "http://localhost/green/vendor/almasaeed2010/adminlte/bootstrap/js/bootstrap.js"></script> -->
<style type = "text/css">
</style>
<script type = "text/javascript">
$(document).ready(function(){
$('[data-toggle = "tooltip"]').tooltip();
});
</script>
</head>
<body>
<div class = "wrapper">
<div class = "container-fluid">
<div class = "row">
<div class = "col-md-12">
<div class = "page-header clearfix">
<h3 class = "center">Details by Category</h3>
<div>
<!--Filter Button -->
<div>
<div class = "col-md-2">
<p class = "margin"></p>
<div class = "input-group">
<div class = "input-group-btn">
<form action = "http://localhost/green/management/disbursements.php" method = "post">
<input type = "text" name = "catID" placeholder = "Category" class = "form-control" >
<input type = "submit" value= "Filter" class = "btn btn-primary ">Filter</button></d>
</div>
</div>
</div>
</div>
</div>
<br>
<br>
<div class = "col-md-8">
<table class = "table table-bordered">
<tr>
<th>ID</th>
<th>Name</th>
<th>Phone</th>
<th>Zip</th>
<th>Status</th>
<th>Number of Reports</th>
<th>Award</th>
<th>Action</th>
</tr>
<?php foreach($people as $person): ?>
<tr>
<td><?= $person->tag_h_id; ?></td>
<td><?= $person->name; ?></td>
<td><?= $person->phone; ?></td>
<td><?= $person->tax_number; ?></td>
<td><?= $person->currency_code; ?></td>
<td><?= $person->Reports; ?></td>
<td><?= $person->Reward; ?></td>
<td>
<a href = "./disbursements/dis_adjust.php?id=<?= $person->tag_h_id ?>" name = 'adjust' class='btn btn-success'>Rewarded</a>
</td>
</tr>
<?php endforeach; ?>
</table>
</div>
</div>
</div>
</div>





PDO подготовил отчеты может принимать произвольное количество параметров. Чтобы изменить свой запрос на использование переменной $catId, измените свой запрос на:
$sql = 'UPDATE `coh_items` SET `enabled`=5, `rewarded_at`= now() WHERE `category_id`=:cat_id AND `tag_h_id`=:id';
и execute вызывает:
$statement->execute([':id' => $tag_h_id, ':cat_id' => $catID])
Доброго времени суток, спасибо, что ответили так быстро, я очень ценю это. К сожалению, это не решило проблему. Интересно, не потому ли, что переменная catID создается в другом файле?
@DaveZest В каком еще файле он сгенерирован? Разве это не $_POST['catID'], о котором вы говорите позже в коде?
Это правильно ... весь сценарий указан чуть ниже файла dis_adjust.php.
Это отдельный файл?
Да, приношу свои извинения ... (Я в этом новичок). Возможно, мне следовало поставить строку под файлом dis_adjust.php и назвать вторую часть dis_tabs3.php. Заголовок («Местоположение:») относится к основному файлу, который содержит файл dis_tabs3.php.
Лучше иметь два отдельных блока кода. Тогда очевидно, что это разные файлы. Если заглянуть дальше, возможно, вы сможете изменить <a href = "./disbursements/dis_adjust.php?id=<?= $person->tag_h_id ?> на <a href = "./disbursements/dis_adjust.php?id=<?= "{$person->tag_h_id}&catID = {$_POST['catID']}" ?>, а затем получить доступ к этому значению как $_GET['catID'] в dis_adjust.php.
Вот как у меня теперь код: <? Php require 'dis_db.php'; $ tag_h_id = $ _GET ['id']; $ cat_id = $ _GET ['catID']; $ sql = 'UPDATE coh_items SET enabled = 5, rewarded_at = now () WHERE tag_h_id =: id AND category_id =: cat_id'; $ statement = $ connection-> подготовить ($ sql); $ statement-> execute ([': id' => $ tag_h_id, ': cat_id' => $ catID]); if ($ statement) {header ("Location: localhost / зеленый / менеджмент / disbursements.php ");} Но он по-прежнему не обновляет таблицу.
Правильно ли перенаправляется (т.е. $statement не является ложным?)?
Комментируя строку заголовка («Местоположение:») и нажимая кнопку «Вознаграждение», открывается окно с URL-адресом: localhost / green / management / disbursements /… Что я считаю правильным, но сообщение гласит: Примечание: неопределенная переменная: catID в C: \ xampp \ htdocs \ green \ management \ disbursements \ dis_adjust.ph в строке 7
Ах да - глядя на ваш код, у вас $cat_id = $_GET['catID']; вместо $catID = $_GET['catID'];
Ладно, не следует говорить спасибо ... но они ничего не говорят об ОГРОМНОМ чувстве благодарности. Оно работает!!! Ура, дружище!
Использовать ? в качестве параметра в sql-запросе и используйте метод execute ($ arrayOfParameter) для выполнения запроса.