我正在尝试将来自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));
但是现在出现了一个新问题,我的数据一直连续插入两次。
in in附近的数字int(2)
和int(10)
不是长度说明符。它们是不推荐使用的显示宽度的东西。
一个int的最大值根据文档,并且大于此值的值将被截断(这是您拥有的)。
推荐存储电话号码是varchar
因为它们不是传统意义上的有序号码。这也有助于以以下开头的区号或数字0
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句