|
我让我的用户HTML以形式添加数字输入,并用值填充。表单在提交时序列化并发送到一个PHP文件,文件使用PDO插入数据MySQL数据库中。数据库表中有一堆列,用于存储表单中的其他值,但是用于存储用户添加的输入的列的设置如下:- J& h* N! }9 g; j$ {
input_value_1input_value_2input_value_3input_value_4......input_value_10允许使用这些列,NULL因为我不知道用户是否会添加任何数字输入。% v* ^& X9 T, k) H/ G! j
有没有更好的方法来存储这些数字?# ?: `& Z ~/ K7 L7 G6 x
以下是我的JS部分用于获取表单数据并发送到LandOwners.php,后者将值插入我的数据库。没有% ^/ L6 U0 ?+ h: d# P
数字输入(我还没有添加它们,因为我不确定如何存储它们的数据)。
* V8 x8 C# R2 r0 }6 G a5 X$("#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部分将插入 没有
+ e0 G5 @. V D( p8 G, }数字输入的mydatabase(我还没有添加它们,因为我不确定如何/不应该输入)。
5 v' Q( J: q0 L. R$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。8 X5 R Y0 g. s
$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;
. d) m; p/ _0 K* `' y8 O 解决方案: $ S: n0 Z1 x6 @# d1 y/ R6 }
如果你在一个情况发现自己在那里你开始有column1,column2在桌子上-有机会,你的设计越来越有缺陷,你应该建立一个单独的表-$ S- ~1 x* p) b3 e+ B
每个columnX每个人都有自己的一排。假如发现自己在同一张表上有多个重复列,最好有一个单独的表。
/ X5 \ [" c* L9 v# O U5 l4 h通过这种方式,您可以避免在列中存储逗号分隔的值,并在突然需要引入另一个值时破坏代码/查询column{X 1}-但可根据需要具有任意数量的输入值。
& X* G; e, }) i& l对你来说,这就像一块新手表land_owner_input,你在其中有一个值(你将把它放进去)columnX)和land_owner引用该值所属行。# L9 o2 b5 H+ g1 D! g3 F3 h
这是典型的设计模式。
# i2 D b/ w/ ^/ c4 h7 O7 ^% sCREATE TABLE land_owner_input land_owner_input_id INT(11) AUTO_INCREMENT land_owner_id INT land_owner_input_value VARCHAR(MAX));请记住,您land_owner_id新表中的类型和大小应与之一起引用ID完全相同。
5 I, x% [/ |6 p+ _: s您还可以在land_owner_id和的land_owner表ID创建外键约束,以确保数据的完整性。
g) G. p9 N( ^9 n. }0 w有了新表,就可以用来查询了LEFT JOIN(JOIN若有输入值,则只返回普通表)。
6 g+ |' k0 Q+ c e" Y+ MSELECT *FROM land_owner AS loLEFT JOIN land_owner_input AS loi ON loi.land_owner_id = lo.land_owner_id |
|