baserunner

数据输入与编辑

数据输入与编辑函数使用HTML表单来获取需要增加或修改过的数据。表单中的字段名与数据库中的字段名应该一致。编辑数据时你首先需要将数据库中的值送到表单变量之中。你也可以在数据输入过程中使用缺省值(直接输入或从当前记录中取理)。输入与编辑的唯一区别是:输入时会增加一个记录,而编辑时更新当前记录的数据。

 

<input type="checkbox" name="logic_field" value="T">

如果你正在编辑的控件需要明确的提供True或False则可以使用以下程序:

<input type="radio" value="T"
{iif(log_field=.T.,'checked','        ')} name="log_field"> Yes
<input type="radio" value="F"
{iif(.NOT.log_field,'checked','        ')} name="log_field"> No

还可以在输入或编辑表单中包含计算值(或其他表达式)。这可能通过在字段名前加%来实现。表达式的值在用户输入数据之后进行分析计算,因此可以在表达式中使用所有的变量。通常使用表达式的字段是隐藏字段。 在下面的例子中,当raating的值是R时将blk_wht设为逻辑真。

<input type="hidden" name="%blk_wht" value="(rating='R')">

在输入的表达式中,计算表达式"rating='R'",根据计算的结果对blk-wht进行相应的设置。

对于输入与编辑,空字段将被忽略。例如,当如果用户提交了一个空值,数据库的字段是不会被修改的)。

baserunner不对用户的输入值进行检验。例如,如果用户输入的字符超过数据库字段的长度,超长部分会被切掉;如果用户输入的内容不能被存入数据库,如日期字段的不对,baserunner会将简单的把它忽略掉。因此,你需要提供一个JavaSript程序必要的检验与检查。.

有三个逻辑变量来决定字段是如何输入到数据库(字符型或备注型)之中的。

_striphtml 如果设置了该变量,在数据被存入数据库之前所有的HTML代码都将被删除。此时,包含在<>之中的符号都将被删除。
_modhtml 如果设置了该变量,HTML代码将被转换为普通的文本,即将< 转换为&lt,将>转换为&gt。

 

如果允许用户输入HTML代码,你应该注意到的是HTML代码可能会引起安全性问题。有些HTML代码是恶意的。

当使用memo字段时,由于换行是在memo文件中由HTML代码进行处理的,所以可能会出现一些问题。尤其是对记录进行重复的修改时,如果增加了回车符,可能会在编辑时出现问题。如果将回车符转换到baserunner系统中依赖于<textarea>字段中的WRAP标志。对于备注字段,这个标志有四种选项:第一种是什么也不做,在多数情况下这种选择是最好的。或者你可以在表单中使用_stripreturns变量。 _stripreturns可以有三个值:

_stripreturns=X 这是一个逻辑值,只要它有值就行,无论什么都行。如果它有值,输入的\r(换行)将被换为\n(回车).
_stripreturns=all 如果_stripreturns的值是all,换行符将被删除,而新行(\n)将被换为空格。
_stripreturns=htmlbreak 如果值为htmlbreak,回车符将被删除,而新行(\n)将将被转换成<br>.
:
例子:
<form action="/cgi-bin/baserun.exe" method="POST">
<input type="hidden" name="_ses" value="{session}">
<input type="hidden" name="_act" value="entry">
Character field:<input type="text" name="chr_field" size="20">

Character field 2:
<select name="chr_field2" size="1">
  <option value="Value 1">First choice</option>
  <option value="Value 2">Second choice</option>
  <option value="Value 3">Third choice</option>
</select>
Memo field:<textarea name="mem_field" rows="5" cols="20">
Date field:<input type="text" name="dat_field" size="20" value="{dtoc(date()}">
Logic field:<input type="checkbox" name="log_field" value="T">

<input type="submit" value="Submit"><input type="reset" value="Reset">

本表单建立一个新的记录,将输入的记录增加到数据库的最后。表单中的字段名与数据库中的相同。本例使用在表单中使用POST方法,是因为要录入 备注型字段,如果使用GET可能参数太多了。例子中使用复选框来录入逻辑型字段,如果用户选中了它,字段的值是True,否则为False。日期字段中含有当前日期作为缺省值,其格式为_dateformat变量中指定的。

<form action="/cgi-bin/baserun.exe" method="POST">
<input type="hidden" name="_ses" value="{session}">
<input type="hidden" name="_act" value="edit">
<p>Character field:

<input type="text" name="chr_field" size="20" value="{trim(chr_field)}">
<p>
Character field 2:
<select name="chr_field2" size="1">
  <option value="{trim(chr_field2)}">{trim(chr_field2)}</option>
  <option value="Value 1">Value 1</option>
  <option value="Value 2">Value 2</option>
  <option value="Value 3">Value 3</option>
</select>
Memo field:<textarea name="mem_field" rows="5" cols="20" value="{mem_field}">
Date field:<input type="text" name="dat_field" size="20" value="{dtoc(dat_field)}">

<input type="radio" value="T" {iif(log_field=.T.,'checked','        ')} name="log_field"> Yes
<input type="radio" value="F" {iif(.NOT.log_field,'checked','        ')} name="log_field"> No
<input type="submit" value="Submit"><input type="reset" value="Reset">

这个例子用于编辑数据,与上一个例子的区别是它需要从数据库中取出数据(对于逻辑字段使用了单选按钮)。也可能使用下面的程序:

Character field 2:
<select name="chr_field2" size="1">
  <option value="{trim(chr_field2)}">{trim(chr_field2)}</option>
  <option value="Value 1" {iif(trim(chr_field2)='Value 1','SELECTED','         ')}>
  Value 1</option>
  <option value="Value 2" {iif(trim(chr_field2)='Value 2','SELECTED','         ')}>
  Value 2</option>
  <option value="Value 3" {iif(trim(chr_field2)='Value 3','SELECTED','         ')}>
  Value 3</option>
</select>