Привет ,
До того, как этот вопрос будет помечен как дублирующий вопрос, остальные вообще не относятся к моей ситуации.
Итак, я делаю простую библиотечную систему, используя PHP и HTML. На данный момент моя проблема заключается в том, что при поиске книги она выполняет запрос SQL и возвращает правильные результаты. Проблема в том, что для того, чтобы узнать больше информации о книге, вы должны нажать на кнопку, которая выполняет sql запросов, а что нет, а затем открывает модальное окно с информацией. Это также работает нормально, но когда вы это делаете, поскольку он выполняет код php, страница обновляется, и данные поиска исчезают, и вам нужно искать снова, чтобы получить те же результаты, если вам нужно. Извините, если я объяснил это плохо, я буду рад уточнить, если потребуется.
Я не хочу использовать AJAX, я не могу использовать node.js, поэтому у меня действительно нет никакой подсказки.
Бит, отображающий книгу:
$library = $_COOKIE["userLibrary"];
if(isset($_GET['search'])){
$author = $_GET['author'];
$title = $_GET['booktitle'];
if($author!='' and $title == '' && mysqli_num_rows(mysqli_query($conn,"SELECT * FROM `$library` WHERE Author LIKE '%$author%' ORDER BY Author"))>0){
echo "<table align='center' class='table table-striped table-hover table-bordered'>";
$allBooks = mysqli_query($conn,"SELECT * FROM `$library` WHERE Author LIKE '%$author%' ORDER BY Author");
if(mysqli_num_rows($allBooks)>0){
echo "<td id='book'><strong>Title</td>";
echo "<td id='book'><strong>Author</td>";
echo "<td id='book'><strong>More Information</td>";
while($row = mysqli_fetch_array($allBooks)){
//list($row['Title']) = explode("::", $row['Title']);
$currentCode = $row['InternalBarcode'];
echo "<tr><td id='book'>".$row["Title"]."</td><td id='book'>".$row["Author"]."</td><td id='book' align='center'> <form method='get'><input type='hidden' name='action' value='submit' /><input type='hidden' name='more' value=".$row['InternalBarcode']." /><input type='image' src='More.png' name='more' value='".$row['InternalBarcode']."'></form></td>";
}
echo "</tr></table>";
}
}
else{
echo "<table align='center' class='table table-striped table-hover table-bordered'>";
$allBooks = mysqli_query($conn,"SELECT * FROM `$library` ORDER BY Author");
if(mysqli_num_rows($allBooks)>0){
echo "<td id='book'><strong>Title</td>";
echo "<td id='book'><strong>Author</td>";
echo "<td id='book'><strong>More Information</td>";
while($row = mysqli_fetch_array($allBooks)){
//list($row['Title']) = explode("::", $row['Title']);
$currentCode = $row['InternalBarcode'];
echo "<tr><td id='book'>".$row["Title"]."</td><td id='book'>".$row["Author"]."</td><td id='book' align='center'> <form method='get'><input type='hidden' name='action' value='submit' /><input type='hidden' name='search'><input type='hidden' name='more' value=".$row['InternalBarcode']." /><input type='image' src='More.png' name='more' value='".$row['InternalBarcode']."'></form></td>";
}
echo "</tr></table>";
}
}
}
else{
echo "<table align='center' class='table table-striped table-hover table-bordered'>";
$allBooks = mysqli_query($conn,"SELECT * FROM `$library` ORDER BY Author");
if(mysqli_num_rows($allBooks)>0){
echo "<td id='book'><strong>Title</td>";
echo "<td id='book'><strong>Author</td>";
echo "<td id='book'><strong>More Information</td>";
while($row = mysqli_fetch_array($allBooks)){
//list($row['Title']) = explode("::", $row['Title']);
$currentCode = $row['InternalBarcode'];
echo "<tr><td id='book'>".$row["Title"]."</td><td id='book'>".$row["Author"]."</td><td id='book' align='center'> <form method='get'><input type='hidden' name='action' value='submit' /><input type='hidden' name='more' value=".$row['InternalBarcode']." /><input type='image' src='More.png' name='more' value='".$row['InternalBarcode']."'></form></td>";
}
echo "</tr></table>";
}
Код PHP для формы поиска:
if(isset($_GET['action'])){
$barcode = $_GET['more'];
//unset($_GET['action']);
$bookTitleA = mysqli_query($conn, "SELECT Title FROM `$library` WHERE InternalBarcode = '$barcode'");
$bookTitle = mysqli_fetch_array($bookTitleA)[0];
$desc = mysqli_fetch_array(mysqli_query($conn, "SELECT Description FROM `$library` WHERE Title = '$bookTitle'"))[0];
$onLoanA = mysqli_query($conn, "SELECT OnLoan FROM `$library` WHERE InternalBarcode = '$barcode'");
$onLoanQuery = mysqli_fetch_array($onLoanA)[0];
$onLoanTo = mysqli_fetch_array(mysqli_query($conn, "SELECT username FROM users where id = '$onLoanQuery'"))[0];
$anyOthers = mysqli_query($conn, "SELECT * from `$library` WHERE Title = '$bookTitle' and OnLoan = '0'");
if($onLoanQuery == '0'){
global $onLoan;
$onLoan = 'This book is currently not on loan';
}
elseif(mysqli_num_rows($anyOthers)>0){
global $onLoan;
$onLoan = "This book is currently on loan to ".$onLoanTo."<br>There are ".mysqli_num_rows($anyOthers)." more coppies available";
}
else{
global $onLoan;
$onLoan = 'This book is currently on loan to '.$onLoanTo."<br>There are no more coppies available.";
}
echo "<script>BookModal(`$bookTitle`, `$barcode`, `$desc`, '$onLoan')</script>";
}
?>
Форма поиска:
<h2 align="center">Search:</h2>
<form action="" method="get">
<div class="form-group">
<label for="author">Author:</label>
<input type="text" class="form-control" name="author" id="author" placeholder="Name of Author"/>
</div>
<div class="form-group">
<label for="booktitle">Title:</label>
<input type="text" class="form-control" name="booktitle" id="booktitle" placeholder="Title of Book"/>
</div>
<input class="form-control" type="submit" name="search" id="search" value="Search">
</form>
Вот JS если вам это нужно:
function ModalOpen(modalName){
$(modalName).modal('show');
}
function BookModal(title, barcode, description, available){
document.getElementById('bookTitle').innerHTML=title;
document.getElementById('barcode').innerHTML=barcode;
document.getElementById('desc').innerHTML=description;
document.getElementById('available').innerHTML=available;
$('#myModal').modal('show');
}
function ModalClose(modalName){
$(modalName).modal('hide');
}
Я ценю вашу помощь!
Обновление
Я решил использовать AJAX, который работает, Сорта. Он отлично работает для первой строки в таблице, но в остальном модал все равно всплывает, но показывает те же данные, что и книга в верхней части таблицы. Неважно, что я нажимаю первым, все равно отображаются только данные из первой строки таблицы.
Бит, отображающий книги (php):
include 'connect.php';
$library = $_COOKIE["userLibrary"];
if(isset($_GET['search'])){
$author = $_GET['author'];
$title = $_GET['booktitle'];
if($author!='' and $title == '' && mysqli_num_rows(mysqli_query($conn,"SELECT * FROM `$library` WHERE Author LIKE '%$author%' ORDER BY Author"))>0){
echo "<table align='center' class='table table-striped table-hover table-bordered'>";
$allBooks = mysqli_query($conn,"SELECT * FROM `$library` WHERE Author LIKE '%$author%' ORDER BY Author");
if(mysqli_num_rows($allBooks)>0){
echo "<td class='book'><strong>Title</td>";
echo "<td class='book'><strong>Author</td>";
echo "<td class='book'><strong>More Information</td>";
while($row = mysqli_fetch_array($allBooks)){
//list($row['Title']) = explode("::", $row['Title']);
$currentCode = $row['InternalBarcode'];
echo "<tr><td id='book'>".$row["Title"]."</td><td id='book'>".$row["Author"]."</td><td id='book' align='center'> <form method='get'><input type='button' class='more' src='More.png' value='".$row['InternalBarcode']."'></form></td>";
}
echo "</tr></table>";
}
}
else{
echo "<table align='center' class='table table-striped table-hover table-bordered'>";
$allBooks = mysqli_query($conn,"SELECT * FROM `$library` ORDER BY Author");
if(mysqli_num_rows($allBooks)>0){
echo "<td id='book'><strong>Title</td>";
echo "<td id='book'><strong>Author</td>";
echo "<td id='book'><strong>More Information</td>";
while($row = mysqli_fetch_array($allBooks)){
//list($row['Title']) = explode("::", $row['Title']);
$currentCode = $row['InternalBarcode'];
echo "<tr><td id='book'>".$row["Title"]."</td><td id='book'>".$row["Author"]."</td><td id='book' align='center'> <form method='get'><input type='button' class='more' src='More.png' value='".$row['InternalBarcode']."'></form></td>";
}
echo "</tr></table>";
}
}
}
else{
echo "<table align='center' class='table table-striped table-hover table-bordered'>";
$allBooks = mysqli_query($conn,"SELECT * FROM `$library` ORDER BY Author");
if(mysqli_num_rows($allBooks)>0){
echo "<td id='book'><strong>Title</td>";
echo "<td id='book'><strong>Author</td>";
echo "<td id='book'><strong>More Information</td>";
while($row = mysqli_fetch_array($allBooks)){
//list($row['Title']) = explode("::", $row['Title']);
$currentCode = $row['InternalBarcode'];
echo "<tr><td id='book'>".$row["Title"]."</td><td id='book'>".$row["Author"]."</td><td id='book' align='center'> <form method='get'><input type='button' class='more' src='More.png' value='".$row['InternalBarcode']."'></form></td>";
}
echo "</tr></table>";
}
}
Код PHP, который выполняет AJAX:
<?php
if(isset($_POST["barcode"])){
$library = $_COOKIE["userLibrary"];
include 'connect.php';
$barcode = $_POST['barcode'];
$bookTitleA = mysqli_query($conn, "SELECT Title FROM `$library` WHERE InternalBarcode = '$barcode'");
$bookTitle = mysqli_fetch_array($bookTitleA)[0];
$desc = mysqli_fetch_array(mysqli_query($conn, "SELECT Description FROM `$library` WHERE Title = '$bookTitle'"))[0];
$onLoanA = mysqli_query($conn, "SELECT OnLoan FROM `$library` WHERE InternalBarcode = '$barcode'");
$onLoanQuery = mysqli_fetch_array($onLoanA)[0];
$onLoanTo = mysqli_fetch_array(mysqli_query($conn, "SELECT username FROM users where id = '$onLoanQuery'"))[0];
$anyOthers = mysqli_query($conn, "SELECT * from `$library` WHERE Title = '$bookTitle' and OnLoan = '0'");
if($onLoanQuery == '0'){
global $onLoan;
$onLoan = 'This book is currently not on loan';
}
elseif(mysqli_num_rows($anyOthers)>0){
global $onLoan;
$onLoan = "This book is currently on loan to ".$onLoanTo."<br>There are ".mysqli_num_rows($anyOthers)." more coppies available";
}
else{
global $onLoan;
$onLoan = 'This book is currently on loan to '.$onLoanTo."<br>There are no more coppies available.";
}
$thing = "BookModal(`$bookTitle`, `$barcode`, `$desc`, '$onLoan'";
echo json_encode(['booktitle' => $bookTitle,
'barcode' => $barcode,
'desc' => $desc,
'onloan' => $onLoan], JSON_FORCE_OBJECT);
exit();
}
?>
Код AJAX:
$(function(){
$('.more').on('click', function(){
var barcodeNum = $('input[class="more"]').val();
$.ajax({
type: 'post',
url: '',
data: {barcode: barcodeNum},
success: function(data){
let allVar = JSON.parse(data);
let booktitle = allVar.booktitle;
let desc = allVar.desc;
let onloan = allVar.onloan;
let barcode = allVar.barcode;
document.getElementById('bookTitle').innerHTML=booktitle;
document.getElementById('barcode').innerHTML=barcode;
document.getElementById('desc').innerHTML=desc;
document.getElementById('available').innerHTML=onloan;
$('#myModal').modal('show');
},
error: function(data){
console.log('error');
alert('error');
}
});
});
})