vphantom/nanosurvey

无客户端和服务器端依赖的简化PHP调查框架

v0.5.0 2017-08-15 10:42 UTC

This package is not auto-updated.

Last update: 2024-09-23 06:30:27 UTC


README

license GitHub release

无客户端和服务器端依赖的简化PHP调查框架。

多页、分支调查框架,不需要客户端JavaScript或cookie,也不需要会话或SQL后端服务器。

在每一页,隐藏的表单变量会保存之前给出的答案,直到表单完成时,结果将按顺序保存在纯CSV文件中。

请参阅包含的示例页面和下面NanoSurvey类的文档以了解用法。

安装

您可以直接在项目中包含NanoSurvey.php,或者使用Composer。

$ composer require vphantom/nanosurvey

用法

实例化NanoSurvey类,该类将处理$_REQUESTapx CGI变量以定位自身。调用page()<form>块中显示当前页面。

<?php

// Manual
require_once 'NanoSurvey.php';

// Composer
require_once __DIR__ . '/vendor/autoload.php';

?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Survey</title>
</head>
<body>

<h1>Survey</h1>

<?php

$survey = new NanoSurvey('/tmp/answers.csv');
echo $survey->page();

?>

</body>
</html>

class NanoSurvey

NanoSurvey类

public function __construct($filename, $savePartial = false)

初始化调查

第一个CSV列是保存响应的时间戳,其余的是按顺序排列的每个响应。

如果将$savePartial设置为true,每次参与者提交一页时,都会在CSV行中追加所有迄今为止获得的答案。在此模式下,在时间戳之后添加了2个额外列:一个唯一的参与者ID和一个页面编号。这使得仅保留每个参与者的最完整响应变得容易,包括那些没有完成调查的参与者。

如果省略或$savePartial为false,则仅保存完整调查。

参数

  • $filename — 字符串 — CSV结果文件的路径和名称
  • $savePartial — 布尔型|null — 在进度中保存不完整的行

public function previousAnswer($id)

获取之前的答案,如果有

答案计数从1开始,单选按钮共享相同的ID,其他类型每次递增。

引用上一页答案的最安全方式是在客户端首先构建这些页面并查看它们的HTML源代码。

参数

  • $id — 整数 — 之前答案的序列号

返回: mixed — 答案内容

public function progressVars()

将当前进度保存在隐藏的表单变量中

返回: string — 带有隐藏输入的HTML

public function newQuestion($type = 'normal')

开始新的问题

初始化内部数据。每个问题必须以对this函数的调用开始。

参数

  • $type — 字符串 — 默认为'normal',指定为'radio'以创建单选按钮组

返回: void

public function endQuestion()

结束当前问题

最终确定内部数据。每个问题必须以对this函数的调用结束。

返回: void

public function radioCheckbox($value, $default = false)

单选框(多个中的一个是)

参数

  • $value — 混合型 — 如果复选框被选中,则保存的内部值
  • $default — 布尔型|null — 设置为true以将此设置为默认输入

返回: string — HTML复选框

public function checkbox($value)

复选框(多个可能)

参数

  • $value — 混合型 — 如果复选框被选中,则保存的内部值

返回: string — HTML复选框

public function textbox($placeholder = "请指定", $size = 0)

单行文本输入框

参数

  • $placeholder — 字符串|null — 当框为空时显示的文本
  • $size — 整数|null — 输入应该有多少个字符宽?

返回: string — HTML输入框

public function beginSelectOne()

选择多个中的一个是

与单选按钮不同之处在于显示单个下拉列表。

返回: string — HTML选择初始化

公共函数 endSelectOne($first, $last)

关闭多个选项中的单个选择

如果指定了可选参数 $first 和 $last,将自动创建并附加每个可能性的数字选项。在调用此函数之前,如果您想创建一个“未选择”的选项并使用空值,仍然可以这样做。

参数

  • $first — int|null — 第一个选项
  • $last — int|null — 最后一个选项(最大值:$first + 500)

返回: string — HTML选择终结

公共函数 placeholder()

占位符答案

当只有特定问题或答案选项需要条件性地跳过,而不是整个页面时,在这些占位符中显示这些答案,这些占位符原本是跳过的答案所在的位置。这始终保持答案数量的完整性。

返回: string — HTML隐藏输入

公共函数 submitButton($label = "Continue")

创建下一页的提交按钮

参数

  • $label — string — 按钮的HTML内容(默认值:"Continue")

返回: string — HTML

公共函数 page()

显示当前/下一页

页面应按顺序排列,从 "page-0.inc","page-1.inc",等等,直到最后页面调用 endSurvey()。

变量 $survey 在这些页面中可用,表示 NanoSurvey 的当前实例。

返回: string — 页面的HTML

公共函数 skipPage()

跳过当前页面,显示下一页

如果在页面中,您评估应该跳过该页面(即基于之前的答案),请调用此方法。

返回: void

公共函数 endSurvey()

终止调查,如果需要,保存到CSV文件

返回: void

MIT许可证

MIT许可证

版权所有(c)2017 Stéphane Lavergne https://github.com/vphantom

特此授予任何获得本软件及其相关文档文件(以下简称“软件”)副本的任何人,免费使用该软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,以及允许向软件提供的人进行此类操作的权利,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按“现状”提供,不提供任何形式的保证,无论是明示的、暗示的还是与特定目的的适用性或非侵权相关的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该责任是因合同行为、侵权或其他原因而产生的,与软件或软件的使用或其它交易有关。