Может ли оператор PDO $ -> выполнять более одного параметра?

Это последняя часть этого, что ускользает от меня, я надеюсь, что кто-то сможет пролить свет на то, чего не хватает.

Более длинная часть этого кода работает нормально, это часть 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>

Использовать ? в качестве параметра в sql-запросе и используйте метод execute ($ arrayOfParameter) для выполнения запроса.

Haidangdevhaui 17.10.2018 09:10
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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 создается в другом файле?

Dave Zest 18.10.2018 03:44

@DaveZest В каком еще файле он сгенерирован? Разве это не $_POST['catID'], о котором вы говорите позже в коде?

Nick 18.10.2018 03:48

Это правильно ... весь сценарий указан чуть ниже файла dis_adjust.php.

Dave Zest 18.10.2018 04:13

Это отдельный файл?

Nick 18.10.2018 04:15

Да, приношу свои извинения ... (Я в этом новичок). Возможно, мне следовало поставить строку под файлом dis_adjust.php и назвать вторую часть dis_tabs3.php. Заголовок («Местоположение:») относится к основному файлу, который содержит файл dis_tabs3.php.

Dave Zest 18.10.2018 04:30

Лучше иметь два отдельных блока кода. Тогда очевидно, что это разные файлы. Если заглянуть дальше, возможно, вы сможете изменить <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.

Nick 18.10.2018 04:34

Вот как у меня теперь код: <? 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 ");} Но он по-прежнему не обновляет таблицу.

Dave Zest 18.10.2018 05:19

Правильно ли перенаправляется (т.е. $statement не является ложным?)?

Nick 18.10.2018 05:59

Комментируя строку заголовка («Местоположение:») и нажимая кнопку «Вознаграждение», открывается окно с URL-адресом: localhost / green / management / disbursements /… Что я считаю правильным, но сообщение гласит: Примечание: неопределенная переменная: catID в C: \ xampp \ htdocs \ green \ management \ disbursements \ dis_adjust.ph‌ в строке 7

Dave Zest 18.10.2018 06:09

Ах да - глядя на ваш код, у вас $cat_id = $_GET['catID']; вместо $catID = $_GET['catID'];

Nick 18.10.2018 06:14

Ладно, не следует говорить спасибо ... но они ничего не говорят об ОГРОМНОМ чувстве благодарности. Оно работает!!! Ура, дружище!

Dave Zest 18.10.2018 06:22

Другие вопросы по теме