如何检查文本变量是否等于数组

How to check whether a text variable is equal to an Array

我的要求是检查文本变量是否等于 mysql 输出数组。

我取的mysql输出数组如下,

$connect = mysqli_connect("localhost", "root", "", "newbooks");
$query = "SELECT book_name FROM takenbooks order by ID DESC";
$result = mysqli_query($connect, $query);
while( $row = mysqli_fetch_assoc( $result)){
    $avail_books[] = $row['book_name']; // Inside while loop
}

现在我需要检查用户是否输入了上面包含的任何书籍array.So我已经实现如下。

$(document).ready(function(){
  $('#insert_form').on("submit", function(event){  
    event.preventDefault();
    $('#book_name').val()=$book_required;


    if(in_array($book_required,$avail_books))
    {
      alert("Not Available");
    }
    else{
      $.ajax({

        url:"books.php",  
        method:"POST",  
        data:$('#insert_form').serialize(),  
        beforeSend:function(){  
          $('#insert').val("Inserting");  
        },  
        success:function(data){  
          $('#insert_form')[0].reset();  
          $('#add_data_Modal').modal('hide');  
          $('#employee_table').html(data);  
        }  

      });  
    }
  }
}

但这不起作用。谁能告诉我哪里搞砸了?

它可能有一些语法错误,但这是您要实现的基本概念。有人输入文本,脚本搜索数据库并 returns 结果。

<html>
<body>
<form action="" method="POST">
 <input type="text" name"book" required placeholder="Type the name of the Book" />
 <input type="submit" value="Search Book" />
</form>

<div><h2>Results:</h2>

<?php

if(isset($_POST['book'] && !empty($_POST['book'])){

   mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

   $connect = new mysqli("localhost", "root", "", "newbooks");
   $stmt = $mysqli->prepare("SELECT ID, book_name FROM takenbooks WHERE book_name LIKE ? ORDER BY ID DESC;");
   $stmt->bind_param("s", "%" + $_POST['book'] + "%");
   $stmt->execute();
   $result = $stmt->get_result();
  
   while ($row = $result->fetch_assoc()) {
      echo '<p>Book \"' . $row['book_name'] . '\" was found.<br/></p>';
   }
}

?>
</div>
</body>
</html>

可以有其他方法来完成您想要的。

例如,使用以下查询:

SELECT count(*) FROM takenbooks where book_name = ? 

但是对于如何检查一个文本变量是否等于一个数组并且根据你的原始代码,正常的方法是传递用户输入数据(我相信是 $('#book_name').val()) 通过 ajax 到一个 PHP 文件来检查这个数据是否在数组中,然后 return 结果返回(或做进一步处理)

对于HTML

<script
  src="https://code.jquery.com/jquery-3.6.0.js"
  integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk="
  crossorigin="anonymous"></script>


<form id=insert_form>
<input type=text id="book_name">
<input type=submit>
</form>

<script>
$(document).ready(function(){
  $('#insert_form').on("submit", function(event){  
   event.preventDefault();

  $.ajax({
   type: "POST",
   url: 'checkdata.php',
   data: {data1: $('#book_name').val()},
   success: function(data){
   alert(data);
   },
    error: function(xhr, status, error){
    console.error(xhr);
   }
  });
 })
})
 </script>

对于PHP (checkdata.php)

<?php
 
if (isset($_POST["data1"])){

$connect = mysqli_connect("localhost", "root", "", "newbooks");
$query = "SELECT book_name FROM takenbooks order by ID DESC";
$result = mysqli_query($connect, $query);

while( $row = mysqli_fetch_assoc( $result)){
    $avail_books[] = $row['book_name']; // Inside while loop
}

   if(in_array($_POST["data1"],$avail_books)) {
     echo "Not Available";
     } else {

    // Place insert query here

     echo "New Record inserted";

    }
}

?>

可以先获取一次书名列表,然后编写一个Javascript数组,从中搜索输入的书名。 (如果书籍列表经常更改,或者列表非常长,这可能不实用。)

<?php

$connect = mysqli_connect("localhost", "root", "", "newbooks");
$query = "SELECT book_name FROM takenbooks order by ID DESC";
$result = mysqli_query($connect, $query);
$avail_books = [];
while( $row = mysqli_fetch_assoc( $result)){
    $avail_books[] = $row['book_name']; // Inside while loop
}

?>
<!DOCTYPE html>
<html>
<body>
<form id="insert_form">
  Book name: <input type="text" name="book_name">
  <input type="submit" value="Check for availability">
</form>
<div id="available"></div>
<script>

const avail_books = <?php json_encode($avail_books); ?>;

document.querySelector('#insert_form').addEventListener(function (evt) {
  evt.preventDefault();

  let book_name = evt.target.book_name.value;
  let not_available = (-1 === avail_books.indexOf(book_name))? 'not': '';
  document.querySelector('#available').innerHTML = book_name + " is " + not_available + " available.";
});
</script>    

</body>
</html> 

PHP 在服务器上获取书籍并将列表存储在 PHP 数组中。当写出 HTML 和 Javascript 时,使用 PHP 写出一个 Javascript avail_books 数组,其中包含从数据库中检索到的书名。

现在服务器可以向客户端发送 HTML/Javascript 渲染代码。在浏览器中加载后,如果您“查看源代码”,Javascript 代码将如下所示:

const avail_books = ["To Kill a Mockingbird", "Animal Farm", "Atlas Shrugged"];

有了它,用户可以检查图书列表,而不必在每次查询时都向服务器发送查询。它速度更快,使用的资源更少。