Я установил JavaScript и AJAX, которые должны извлекать данные из базы данных с учетом набора фильтров и возвращать таблицу результатов, соответствующих этим фильтрам.Я думал, что у меня правильно настроен код, но когда я отправляю форму фильтра поиска, страница перезагружается, и больше ничего не происходит.Я не могу понять, где я ошибаюсь!
connection.php - это просто файл, содержащий данные моей базы данных / имя пользователя / пароль, и я знаю, что это работает правильно.Я искал синтаксические ошибки и не могу их найти, поэтому это должно быть связано с тем, как я написал свой код.Тем не менее, я очень новичок во всем этом, поэтому я действительно изо всех сил пытаюсь понять, что именно я сделал неправильно.Буду очень признателен за любую помощь!
мой javascript:
function showStock(search, genre, publisher, minyear, maxyear) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("results").innerHTML = this.responseText;
}
xmlhttp.open("GET", "stock.php?search=" + search + "&genre=" + genre + "&publisher=" + publisher +
"&min-year=" + min - year + "&max-year=" + max - year, true);
xmlhttp.send();
}
}
моя форма фильтра:
<form id="filters">
<label> Search by Title:</label><br>
<input type="search" name="search">
<label>Genre:</label><br>
<select name='genre'>
<option value='All'> All </option>
<?php
function dropdownOptions($category) {
require('connection.php');
$sql = "SELECT DISTINCT ".$category." FROM stock";
$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
echo "<option value='" . $row[$category] . "'>" . $row[$category] . "</option>";
}
}
dropdownOptions("genre");
?>
</select>
<label>Publisher:</label><br>
<select name="publisher">
<option value="all"> All</option>
<?php
dropdownOptions("publisher");
?>
</select>
<div class="year">
<label>Release Year:</label><br>
<input type="number" name="min-year" min="1970" max="2018">
<label> to </label>
<input type="number" name="max-year" min="1970" max="2018">
</div>
<div class="buttons">
<button type="submit" onclick="showStock(search, genre, publisher, min-year, max-year)">SEARCH</button>
<button type="reset">CLEAR</button>
</div>
</form>
мой код stock.php:
<?php
require('connection.php');
$search = $_GET['search'];
$publisher = $_GET['publisher'];
$genre = $_GET['genre'];
$minyear = intval($_GET['min-year']);
$maxyear = intval($_GET['max-year']);
if ($search == "") {
$searchQ = "";
} else {
$searchQ = "AND CONTAINS(title, $title) ";
}
if ($genre == "all") {
$genreQ = "";
} else {
$genreQ = "AND genre = $genre ";
}
if ($publisher == "all") {
$publisherQ = "";
} else {
$publisherQ = "AND publisher = $publisher ";
}
if ($minyear == "" && $maxyear == "") {
$yearQ = "";
} else if ($minyear == "" && $maxyear != "") {
$yearQ = "AND release_date <= $maxyear ";
} else if($minyear != "" && $maxyear == "") {
$yearQ = "AND release_date >= $minyear ";
} else if ($minyear != "" && $maxyear != ""){
$yearQ = "AND release_date BETWEEN $minyear AND $maxyear ";
}
$sql = "SELECT * FROM stock WHERE id > 0".$searchQ.$genreQ.$publisherQ.$yearQ.";";
$result = $conn->query($sql);
echo "<table>
<tr>
<th>ID</th>
<th>Title</th>
<th>Publisher</th>
<th>Genre</th>
<th>Price</th>
<th>Release Year</th>
<th>Stock Units</th>
</tr>";
while($row = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['title'] . "</td>";
echo "<td>" . $row['publisher'] . "</td>";
echo "<td>" . $row['Hometown'] . "</td>";
echo "<td>" . $row['genre'] . "</td>";
echo "<td>" . $row['price'] . "</td>";
echo "<td>" . $row['release_date'] . "</td>";
echo "<td>" . $row['stock_units'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_close($con);
?>
Я ожидал, что таблица релевантных результатов будет загружена на мою веб-страницу (размещена на моем универ-сервере здесь: https://students.emps.ex.ac.uk/admt201/webdev/stock-lookup.php),, но вместо этого все, что происходит, это то, что мои параметры поиска добавляются в URL исходной веб-страницы и ничегоновые грузы.