首先,请看一下此页面的示例:Click here
如果您查看“设施”部分,则有3组复选框(单位功能,社区功能和租用的实用程序)。
我的问题是:我如何使用PHP制作3个数组变量(例如$ unit_features,$ community_features和$ utilities_included)来存储哪些框未被检入3个相应的字段表
更重要的是:如何以相同的数组格式从表中提取数据,以便查看/编辑/删除详细信息?
答案 0 :(得分:6)
您在属性和设施之间存在多对多的关系。要对此进行建模,您需要一个单独的表,而不是可变数量的列。
有一个表存储您的属性。
INSERT INTO property (id, address, square_footage...) VALUES (111, '123 Main St', 1234...)
有一张桌子可存放所有可能的设施。
INSERT INTO amenities (id, type, description) VALUES (222, 'Unit Features', 'Air Conditioning');
对于财产所拥有的每一个设施,在表中插入一行与这两个相关:
INSERT INTO property_amenitities (property_id, amenity_id) VALUES (111, 222);
当您想知道特定属性具有哪些便利设施时,只需SELECT
此表中该属性密钥的所有行。当您要打印所有便利设施的复选框时,SELECT
表格中的amenities
并执行LEFT OUTER JOIN
到property_amenities
表格。 property_amenities
表中具有空值的那些行是未选中的框。
Related reading。你应该在他们破产之前从你当地的BORDERS那里拿一本关于关系数据库的书:)
答案 1 :(得分:1)
如果它们不相互排斥;你可以使用按位运算符来存储它们。
field = 0;
if($unity_features_selected == true) {
field |= (1<<0);
}
if($community_features_selected == true) {
field |= (1<<1);
}
if($utilties_included_selected == true) {
field |= (1<<2);
}
然后将字段存储为unsigned int。这使您可以查询(例如unity_features),例如
select * from <table> where field&(1<<0);
或社区功能:
select * from <table> where field&(1<<1);
答案 2 :(得分:-3)
1)php序列化和反序列化(http://php.net/manual/en/function.serialize.php )将帮助您在db中保留数组或对象或任何其他结构数据。
2)使用数组格式输入名称,如下所述:Submitting a multidimensional array via POST with php
3)请记住,根本不会发送未选中的复选框,因此请始终为每个复选框字段创建一个隐藏的输入字段。这将确保未经检查的checbox将被发送为false。以下是一个示例:Post the checkboxes that are unchecked
如此重新说明 - 你可以通过这种方式发送所有复选框(1或0),并将它们作为序列化对象存储在三个字段中。