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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Как правильно указывает Джон П., без подготовленных операторов ваш код уязвим для атак с использованием 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>
Позвольте мне знать, если это помогает.
Этот ответ - чрезвычайно опасный пример. Это делает запрос уязвимым для атак с использованием SQL-инъекций.
Спасибо за ваши быстрые ответы ... Я очень ценю их обоих. К счастью, поскольку это будет использоваться только на сервере на моей машине, атака с использованием sql-инъекции не является для меня серьезной проблемой. Я очень ценю, что вы указали на это - думаю, я все еще очень зеленый. Решение, предлагаемое ECPerth, к сожалению, вызывает ошибку. Любые идеи?
Значит, он работает, как ожидалось, когда у вас жестко запрограммировано «13»? Вы пытались вывести $ catID перед запуском запроса (сразу после $ catID = $ _POST ['catID'];) и убедиться, что он содержит ожидаемое значение.
Это не только уязвимо для SQL-инъекций, но и подвержено ошибкам. Например, если входной $ catID содержит одинарную кавычку, запрос SQL становится синтаксически неверным.
ECPerth - это правильно, жестко закодированные 13 (и другие значения, которые есть в моей таблице, работают), и попытка предложения эха не показывает входное значение. Панг - спасибо, что поделились своим наблюдением.
Я снова отредактировал свой ответ, теперь я знаю, что это не уведомляет вас автоматически. Надеюсь, это решит проблему. Я тоже все еще изучаю правильную практику на этом сайте.
Похоже, вы определили настоящую причину этой проблемы, и наблюдение Панга также было полезным в том, что переменная, необходимая для чтения '$ catID' (с одинарными кавычками), заставила это работать. Ваше здоровье!
Этот ответ должен дать вам некоторое представление о том, кто должен решить вашу проблему. а также защитит себя от атак SQL-инъекций: stackoverflow.com/a/60496/4665