【发布时间】:2019-12-01 08:33:51
【问题描述】:
我让我的用户在 HTML 表单中添加数字输入并用值填充它们。表单在提交时被序列化并发送到 PHP 文件,该文件将数据插入到带有 PDO 的 MySQL 数据库中。数据库表有一堆列用于存储表单中的其他值,但用于存储用户添加输入的列设置如下:
input_value_1
input_value_2
input_value_3
input_value_4
...
...
input_value_10
这些列允许NULL,因为我不知道用户是否会添加任何数字输入。
有没有更好的方法来存储这些数字?
下面是我的 JS 的一部分,用于获取表单数据并发送到 LandOwners.php,它将值插入到我的数据库中。代码没有数字输入(我还没有添加它们,因为我不确定应该如何存储它们的数据)。
$("#createLandOwnerForm").on( "submit", function( event ) {
event.preventDefault();
createLandOwner($(this).serialize(), appendCreatedLandOwnerToSelect, appendCreatedLandOwnerToSelect_Error);
$('#createLandOwnerForm')[0].reset();
});
function createLandOwner(landOwner, onSuccess, onError) {
var data = landOwner + "&action=create";
$.ajax({
type: "post",
url: host + 'LandOwners.php',
data: data,
success: onSuccess,
error: onError
});
}
下面是 LandOwners.php 的一部分,它插入到我的数据库没有数字输入(我还没有添加它们,因为我不确定我应该如何/如果应该)。
$stmt = $pdo->prepare("INSERT INTO land_owner (land_owner_name, land_owner_identification_number, land_owner_contact, land_owner_phone, land_owner_email, land_contracts) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->execute([$land_owner_name, $land_owner_identification_number, $land_owner_contact, $land_owner_phone, $land_owner_email, $land_contracts]);
$last_inserted_land_owner_id = $pdo->lastInsertId();
$stmt = $pdo->prepare("SELECT * FROM land_owner WHERE land_owner_id = ?");
$stmt->execute([$last_inserted_land_owner_id]);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$arr[] = $row;
}
if(!$arr) exit('No rows');
echo json_encode($arr);
$stmt = null;
下面是从我的数据库中选择数据的 LandOwners.php 部分。我想(仍然能够)得到 JSON 格式的结果。
$arr = [];
if (isset($_POST["land_owner_id"])){
$stmt = $pdo->prepare("SELECT * FROM land_owner WHERE land_owner_id = ?");
$stmt->execute([$land_owner_id]);
} else {
$stmt = $pdo->prepare("SELECT * FROM land_owner");
$stmt->execute();
}
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$arr[] = $row;
}
if(!$arr) exit('No rows');
echo json_encode($arr);
$stmt = null;
break;
【问题讨论】:
-
是的,你应该有一个表,其中包含值和与它们相关的任何内容的关系 - 更简单的行而不是许多重复的列更好。
-
@Qirel 所以我应该用一个名为
input_values的新列替换这十列,并将其与具有外键的新表相关联?如果这是正确的,如果有人添加了 15 个输入,input_values应该是什么样子?新表应该如何构建?谢谢! -
@Qirel 我已经用我的正确代码更新了我的问题。应该怎么改?
-
创建一个
land_owner_input并将其中的所有输入放在单独的行中,并引用land_owner的唯一标识符(可能是 ID)。 -
看起来很棒!这样一来,您就可以为每个
land_owner提供无限的、未指定数量的输入。
标签: php mysql sql arrays serialization