【问题标题】:Incorrect data getting inserted into database插入数据库的数据不正确
【发布时间】:2021-04-23 09:00:28
【问题描述】:

我正在尝试将取自 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,问题得到解决;这次我执行了这个查询来创建表:

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));

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

【问题讨论】:

    标签: javascript php mysql phpmyadmin xampp


    【解决方案1】:

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

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

    建议存储电话号码为varchar,因为它们不是传统意义上的有序号码。这也有助于以0开头的区号或号码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      相关资源
      最近更新 更多