插入数据库的数据不正确

Incorrect data getting inserted into database

我正在尝试将从 HTML 表单中获取的数据插入 phpmyadmin 数据库。

我的javascript:

document.getElementById("submit").addEventListener('click',submit);
function submit(){
    const dForm = document.getElementById('details');          
    dForm.addEventListener('submit', function(e) {
        e.preventDefault();
        fetch("database_registration.php",{
        method: "post",
        body:JSON.stringify({'name': localStorage.getItem("name"),
                            'contact': localStorage.getItem("contact"),
                            'email': localStorage.getItem("email"),
                            'id_no': localStorage.getItem("id"),
                            'image': localStorage.getItem("image")}),
        headers: {'Accept': 'application/json',
                  'Content-Type': 'application/json',
                  'Access-Control-Allow-Headers': '*',
                  'Access-Control-Allow-Origin': '*',
                  'Access-Control-Allow-Methods': 'GET, POST, HEAD, OPTIONS'
                 },
        }).then(function (response){
            return response.text();
        }).then(function (text){
            console.log(text);
        }).catch(function (error){
            console.error(error);
        })
    });
}

javascript 使用 fetch api 向服务器发送请求,从 localStorage 接收的数据包含从 HTML表格.

我的 php 脚本:

<?php
session_start();
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, HEAD, OPTIONS");
header("Access-Control-Allow-Headers: *");

$servername = "localhost"; 

$username = "root"; 

$password = ""; 

$date = date("Y-m-d");

$contentType = isset($_SERVER["CONTENT_TYPE"]) ? trim($_SERVER["CONTENT_TYPE"]) : '';

if ($contentType === "application/json") {

  $content = trim(file_get_contents("php://input"));

  $decoded = json_decode($content, true);

  if(! is_array($decoded)) {
      echo "Invalid json";

  } else {
      $name=$decoded['name'];
      $org_number=(int)$decoded['id_no'];
      $ph_number=(int)$decoded['contact'];
      $email=$decoded['email'];
      $image=base64_encode($decoded['image']);
  }
}

$conn = new mysqli($servername,  
            $username, $password, "Employee_information"); 
   
if ($conn->connect_error) { 
    die("Connection failure: " 
        . $conn->connect_error); 
}  
  
/*$sql="CREATE TABLE IF NOT EXISTS `Employees`(Sl_no INTEGER NOT NULL primary key AUTO_INCREMENT, Full_name varchar(30), 
      ID_no INT(2), Contact UNIQUE KEY INT(10), Email varchar(30), registration_date DATE, 
      ID_preview varchar(100))";
$conn -> query($sql);*/

$stmt = $conn->prepare("INSERT INTO `Employees` (Full_name, ID_no, Contact, Email, 
                                    registration_date, ID_preview) 
                                    VALUES (?, ?, ?, ?, ?, ?)");
$stmt->bind_param("siisss", $name, $org_number, $ph_number, $email, $date, $image);
$stmt->execute();

if($stmt->execute())
    echo "record inserted";
else
    echo $stmt->error;
   
$stmt->close();
$conn->close(); 
?>

例如:这是我在表格中给出的输入:

但在数据库中我得到:

如您所见,Contact 数据与我输入的数据不同。谁能告诉我我做错了什么?

编辑:感谢@danblack,问题已解决;这次我执行了创建 table:

的查询
CREATE TABLE IF NOT EXISTS `Employees`(Sl_no SMALLINT NOT NULL primary key AUTO_INCREMENT, Full_name varchar(30), 
      ID_no SMALLINT, Contact varchar(10), Email varchar(30), registration_date DATE, 
      ID_preview varchar(100));

但是现在出现了一个新问题,我的数据一直被连续插入两次。

int(2)int(10) 中 int 周围的数字不是长度说明符。它们是不推荐使用的显示宽度。

int 的最大值为 per the documentation,大于此值的值将被截断(这就是您所拥有的)。

建议存储 phone 个数字 varchar,因为它们不是传统意义上的有序数字。这也有助于区号或以 0

开头的号码