Во-первых, я новичок, поэтому прошу прощения за недостаточные знания.

Я нашел код, которым я манипулировал, чтобы делать большую часть того, что мне нужно. Есть один маленький шаг, который ускользает от меня. Я надеюсь, что кто-то здесь может пролить свет на это.

«Кнопка фильтра» должна захватывать входной catID #, который используется в предложении WHERE в операторе SELECT. Я безуспешно пытался заменить 13 в строке 72 на «$ catID».

При вводе определенного значения для числа 'category_id' в файле php, затем сохранении файла и обновлении браузера - это работает, но при использовании кнопки в браузере - нет.

Оператор SELECT звучит ... он работает в phpMyAdmin.

Если я что-то пропустил, дайте мне знать.

Заранее спасибо,

Дейв

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8">
      <title>Dashboard</title>
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.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>
      <style type="text/css">
         .wrapper{
         width: 650px;
         margin: 0 auto;
         }
         .page-header h2{
         margin-top: 0;
         }
         table tr td:last-child a{
         margin-right: 15px;
         }
      </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">
                     <h2 class="center">Tag H Details</h2>
                     <div>
                        <!--Filter Button  -->
                        <d
                        <div class="col-md-3">
                           <p class="margin"></p>
                           <div class="input-group">
                              <div class="input-group-btn">
                                 <form action="http://localhost/fp/rt/index.php" method="post">
                                 <input type="text" name = "catID" placeholder="Category" class="form-control" >
                                 <input type="submit" name = "catID" value= "Filter" class="btn btn-primary ">Filter</button></d>
                              </div>
                           </div>
                        </div>
                     </div>
                  </div>
                  <?php
                     // Include config file
                     require_once "config.php";

                     // Attempt select query execution

                     if(isset($_POST['catID']))
                     {

                     $catID = $_POST['catID'];

                     $sql = "SELECT
                     coh_items.id,
                     coh_items.tag_h_id,
                     coh_vendors.name,                          
                     coh_vendors.phone,
                     coh_vendors.c_code,
                     coh_items.purchase_price,
                     COUNT(tag_h_id) AS Reports
                     FROM
                     coh_items
                     INNER JOIN coh_vendors ON coh_items.tag_h_id = coh_vendors.id
                     WHERE
                     category_id = 13
                     GROUP BY
                     tag_h_id;";

                     $search_result = catID($sql);
                     }

                     else {
                     $sql = "SELECT * FROM `coh_items`";
                     $search_result = catID($sql);
                     }
                     function catID($sql){

                     $connect = mysqli_connect("localhost", "root", "", "green");
                     $filter_Result = mysqli_query($connect, $sql);
                     return $filter_Result;
                     };

                     if($result = mysqli_query($link, $sql)){
                         if(mysqli_num_rows($result) > 0){
                             echo "<table class='table table-bordered table-striped'>";
                                 echo "<thead>";
                                     echo "<tr>";
                                      echo "<th>ID</th>";
                                      echo "<th>Name</th>"; 
                                      echo "<th>Phone</th>";
                                      echo "<th>Status</th>";   
                                      echo "<th>Reports</th>";
                                      echo "<th>Rate</th>";
                                      echo "<th>Action</th>";
                                      echo "</tr>";
                                      echo "</thead>";
                                      echo "<tbody>";
                                      while($row = mysqli_fetch_array($result)){
                                      echo "<tr>";
                                      echo "<td>" . $row['tag_h_id'] . "</td>";
                                      echo "<td>" . $row['name'] . "</td>"; 

                                      echo "<td>" . $row['phone'] . "</td>";
                                      echo "<td>" . $row['c_code'] . "</td>";
                                       echo "<td>" . $row['Reports'] . "</td>";
                                       echo "<td>" . $row['purchase_price'] . "</td>";
                                       echo "<td>";
                                       echo "<a href='read.php?id=". $row['id'] ."' title='View Record' data-toggle='tooltip'><span class='glyphicon glyphicon-eye-open'></span></a>";
                                       echo "<a href='update.php?id=". $row['id'] ."' title='Update Record' data-toggle='tooltip'><span class='glyphicon glyphicon-pencil'></span></a>";
                                       echo "<a href='delete.php?id=". $row['id'] ."' title='Delete Record' data-toggle='tooltip'><span class='glyphicon glyphicon-trash'></span></a>";

                                         echo "</td>";
                                     echo "</tr>";
                                 }
                                 echo "</tbody>";                            
                             echo "</table>";
                             // Free result set
                             mysqli_free_result($result);
                         } else{
                             echo "<p class='lead'><em>No records were found.</em></p>";
                         }
                     } else{
                         echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
                     }

                     // Close connection
                     mysqli_close($link);
                     ?>
               </div>
            </div>
         </div>
      </div>
   </body>
</html>
0
Dave Zest 5 Окт 2018 в 03:01

1 ответ

Лучший ответ

Как правильно указывает Джон П., без подготовленных операторов ваш код уязвим для атак с использованием SQL-инъекций. Так что вам действительно нужно перекодировать SQL, используя подготовленные операторы. Однако, если вы просто работаете на домашнем компьютере и не беспокоитесь о безопасности своей базы данных, ниже вы найдете быстрое решение.

Переменная $ sql - это просто строка, и вам нужно создать ее, используя конкатенацию. Как показано ниже:

$sql = "SELECT
          coh_items.id,
          coh_items.tag_h_id,
          coh_vendors.name,                          
          coh_vendors.phone,
          coh_vendors.c_code,
          coh_items.purchase_price,
          COUNT(tag_h_id) AS Reports
        FROM
          coh_items
          INNER JOIN coh_vendors ON coh_items.tag_h_id = coh_vendors.id
        WHERE
          category_id = ".$catID." 
        GROUP BY
          tag_h_id;";

РЕДАКТИРОВАТЬ:

Хорошо, я нашел проблему. Вы назвали ввод текста и ввод отправки как catID, но, поскольку отправка идет после, его значение (фильтр) перезаписывает значение из текста и используется в методе POST. Простое изменение имени в отправке или удаление имени решит проблему.

    <p class="margin"></p>
    <div class="input-group-btn">
        <form action="http://localhost/fp/rt/index.php" method="post">
            <input type="text" name = "catID" placeholder="Category" class="form-control"/>
            <input type="submit" value= "Filter" class="btn btn-primary "/>
        </form>
    </div>
0
ECPerth 8 Окт 2018 в 04:23