bessj / webform-storage
使用SQLite简单存储网页表单提交。
Requires
- php: >=7.0
- ext-sqlite3: *
This package is auto-updated.
Last update: 2024-09-05 22:06:37 UTC
README
Webform Storage 将通过HTML表单提交的提交保存到SQLite数据库。它被设计为一个简单的即插即用后端解决方案,适用于需要最小集成的静态(或主要静态)网站。您如何处理前端完全取决于您,但有一些示例可以帮助您开始。
要求
PHP 7.0+,需要 'sqlite3'(《不是》'pdo_sqlite') 扩展。如果您的网页表单允许用户上传图片,您还需要 'gd2' 扩展。
安装和设置
如果您不是使用Composer安装,您可以将整个目录直接保存到您的项目中。为此,提供了一个替代自动加载器:在Webform.php中,注释或删除 require __DIR__ . '/vendor/autoload.php'
行,并取消注释 require __DIR__ . '/src/autoload.php'
。
您需要创建一个配置文件,该文件提供SQLite数据库的路径和字段列表,如下面在 配置 中所述。如果您尚未创建数据库,可以使用示例中包含的 installer.php。只需创建您的配置文件,并编辑安装文件的 第一行。
配置
使用 config.php 作为模板。配置是一个关联数组,具有以下属性
database_path
- SQLite数据库的绝对路径(从根目录开始)。table_name
- 将保存和读取网页表单提交的数据库表名称。primary_key
- 表列的自动递增键名称。 这仅由安装程序使用,因此如果您使用现有数据库实现此功能,则可以省略此选项。fields_to_save
- 预期通过网页表单提交接收的字段关联数组。不要包括submission_date_column
或attachments
列(见下文)。每个项目应结构为column_name
=> [ 属性 ],并包括以下值type
- 列的SQLite数据类型:TEXT
或INTEGER
。SQLite还允许其他数据类型,但网页表单提交作为字符串发送,您不太可能使用其他数据类型。对于INTEGER
字段收到的值将在保存之前转换为数值。required
- 布尔值;是否可以接受null/空字段值。alias
- 可选 如果您不想在网页表单本身中使用实际列名(出于安全性或可读性考虑),请输入一个替代名称。
submission_date_column
- 可选 如果指定,Webform Storage 将将表单接收的YYYY-MM-DD HH:MM:SS日期时间保存为字符串在此列中。如果未使用,设置为null
。attachments
- 可选 一个关联数组,包含有关如何保存和处理附加文件的信息。有关更多信息,请参阅 附加文件。如果用户不会通过网页表单提交文件,则将此属性设置为null
。
用法
请参考request-handler.php示例,了解Webform存储的基本实现。Web表单必须通过POST方式发送。GET请求将被忽略。接收请求的脚本必须从Webform.php中实例化一个新的Webform
,该Webform接收配置文件作为参数,然后调用Webform上的handleRequest
方法。
应用程序处理Web表单提交和检索保存数据的请求。每个请求必须包含一个request_type
参数。应用程序返回一个包含布尔型 'success'和字符串 'message'属性的JSON对象。如果请求是从数据库检索信息,它还将包括一个'数据'属性,其中包含记录数组,如果成功的话。
Web表单提交必须包含一个request_type
为save_form。然后应用程序尝试将请求的其他属性与配置数组中的列/字段(或其别名)匹配。如果包含所有必需字段,则表单数据将被插入到一个新的数据库行中。请参阅webform.html以获取示例实现。
检索存储数据的请求必须包含一个request_type
为get_entries。默认情况下,此应用程序对这些请求不进行任何安全检查。如果Web表单的用户提交任何类型的私人信息,您必须添加自己的安全检查以防止数据库记录被公开访问。请注意,request-handler.php示例中包含一个空语句,其中可以插入安全代码。
返回的数据将包括所有表列。默认情况下,它将包括所有保存的表单提交,但您可以通过在您的POST请求中包含这些属性来限制或排序结果。
fields
- 要包含的列/字段名(或别名)的逗号分隔列表。如果不存在或设置为false或null值,则包含所有列。sort_by
- 按照您希望结果排序的列/字段名(或其别名)。filters
- 一个对象数组,将限制结果。每个对象必须具有以下属性column_name
- 要过滤的列/字段(或其别名)。filter_value
- 要比较的值。comparator
- 如何检查字段值与过滤值的比较。允许的比较器有'EQUALS'、'='、'LESS THAN'、'<'、'GREATER THAN'、'>'、'<='、'>='、'<>'、'!='、'NOT EQUAL'、'LIKE'和'INCLUDES'。注意,最后两个是同义的,并执行部分/通配字符串匹配。请参阅get-records.html以获取获取和显示提交的表单的示例实现。
附件
如果用户将在他们的提交的Web表单中附加文件,Webform存储可以检查POSt请求中的文件,将它们保存到服务器上的指定位置,并将它们的URL作为字符串存储在数据库中。(此应用程序不会将文件作为blob保存到数据库本身。)您可以通过配置的attachments
属性设置此功能,该属性应该是一个具有以下属性的关联数组
save_path
- 应保存文件的文件夹的绝对路径column_name
- 存储上传文件URL的数据库列的名称required
- 是否必须包含一个或多个文件以保存Web表单allowed_file_types
- 允许的文件扩展名数组,例如['pdf', 'txt']等。任何不以这些扩展名结束的文件都将被忽略。process_images
- 布尔类型;当设置为true
时,Webform 存储将在保存之前压缩和/或调整提交的 JPG 和 PNG 图片的大小,具体取决于以下两个属性。jpg_quality
- 从 1 到 100,保存 JPG 图片时使用的压缩级别。如果设置为假值,则默认使用 90。max_image_dimensions
- 包含width
和height
值的数组;图片将被减小,保持宽高比,以确保它不超过这两个值中的任何一个。
关于多行值的说明
SQLite 不识别多行文本值,因此如果您有任何 <textarea> 元素,您可能需要解析这些输入的换行符,并在前端按需处理。