为什么我不能使用php将值传递到数据库

svgewumm  于 2023-01-08  发布在  PHP
关注(0)|答案(1)|浏览(119)

我已经建立了一个使用PHP的ISBN生成器。但是,一旦ISBN号生成它不存储在数据库中。
下面是index.php

<form id="isbn-form" action="generate-isbn.php" method="POST">
  <label for="title">Book Title:</label><br>
  <input type="text" id="title" name="title"><br>
  <label for="author">Author:</label><br>
  <input type="text" id="author" name="author"><br>
  <button type="submit">Generate ISBN</button>
</form>

<script>
  const form = document.getElementById("isbn-form");
  form.addEventListener("submit", async (event) => {
    event.preventDefault();

    // Get the form data
    const formData = new FormData(form);

    // Send a POST request to the server
    const response = await fetch("generate-isbn.php", {
      method: "POST",
      body: formData,
    });

    // Get the generated ISBN number
    const data = await response.json();
    const isbn = data.isbn;

    // Display the ISBN number
    alert(`Your ISBN number is: ${isbn}`);
  });
</script>

这里是isbn.php

function generate_unique_isbn() {
    // Generate a unique ISBN
    do {
      // Generate the first three digits (ISBN agency)
      $isbn = rand(100, 999) . "-";
  
      // Generate the language code
      $isbn .= rand(0, 9) . "-";
  
      // Generate the book identifier using a cryptographically secure random number generator
      $isbn .= bin2hex(random_bytes(4)) . "-";
  
      // Calculate the check digit
      $check_digit = 0;
      for ($i = 0; $i < strlen($isbn); $i++) {
        if ($i % 2 == 0) {
          $check_digit += (int)$isbn[$i];
        } else {
          $check_digit += 3 * (int)$isbn[$i];
        }
      }
      $check_digit = 10 - ($check_digit % 10);
      if ($check_digit == 10) {
        $check_digit = 0;
      }
      $isbn .= $check_digit;
  
      // Connect to the database
      $conn = new mysqli("localhost", "root", "", "isbn");
  
      // Check if the ISBN is already in the database
      $result = $conn->query("SELECT * FROM books WHERE isbn = '$isbn'");
  
      // Close the database connection
      $conn->close();
    } while ($result->num_rows > 0);
  
    return $isbn;
  }

下面是生成的文件-isbn.php

<?php

require "isbn.php";

header("Content-Type: application/json");

// Get the form data
$title = $_POST["title"];
$author = $_POST["author"];

// Generate a unique ISBN number
$isbn = generate_unique_isbn();

// Save the book to the database
$conn = new mysqli("localhost", "root", "", "isbn");
$conn->query("INSERT INTO books (isbn, title, author) VALUES ('$isbn', '$title', '$author')");
$conn->close();

echo json_encode(["isbn" => $isbn]);
?>

为什么值没有通过呢?将书保存到generate-isbn.php中的数据库代码中。值生成了,但只有一个值存储在数据库中。如果我想将生成的值保存在数据库中,我必须删除以前存储在数据库中的值,并运行脚本。然后它就被存储了,在它不存储之后,我必须重新运行这个过程,删除这个值并运行代码。

yi0zb3m4

yi0zb3m41#

books表中的id列是主键,但您还必须将其设置为AUTO_INCREMENT,然后您可以插入多行。
要执行此操作,您必须首先单击“更改操作”。

然后选中结构面板中的A_I复选框。

相关问题