Ora-Apex:如何从手动 HTML 表单中捕获屏幕字段值

Posted

技术标签:

【中文标题】Ora-Apex:如何从手动 HTML 表单中捕获屏幕字段值【英文标题】:Ora-Apex:How to capture screen field values from a manual HTML form 【发布时间】:2015-10-26 14:06:46 【问题描述】:

我有一个过去 2 天让我头疼的问题。我正在 Oracle APEX 5 中开发应用程序。问题是,在一个页面上,我必须根据表中的一些数据手动生成 html 表单(不是通过 APEX 中提供的表单向导),但是当我提交表单时,在下一页上,我无法参考上一页填写的表单字段。这是我的页面区域代码,格式如下:

/* PL/SQL 动态区域的源代码 */

声明

vc1   varchar2(107);
vc2   varchar2(35);
vc3   varchar2(35);
vc4   varchar2(35);
vc5   varchar2(35);
vc6   varchar2(35);
item_typ varchar2(50);

开始

htp.p ('<form name="page1_form" method="get" action="user_resp.php">');

htp.p ('<div style="font-size:x-small;">');

htp.p ('Email: &nbsp;<input type="text" id="v_email"> &nbsp;');

htp.p ('<br/> <br/>');


select todayq,opt1,opt2,opt3,opt4,opt5,item_type
  into vc1,vc2,vc3,vc4,vc5,vc6,item_typ
  from todaysq
 where dowk = to_number(to_char(sysdate,'D'));

htp.p ('<p id="vc1">' || vc1 || ' </p> <br/>');
IF upper(item_typ) IN ('RADIO','CHECKBOX') THEN
   if vc2 is not null and vc2 != ' ' then 
      htp.p ('&nbsp;<input type="' || item_typ || '" name="ans1"   value="1" id="vc2"> ' || vc2 || ' <br/> '); 
   end if;
   if vc3 is not null and vc3 != ' ' then 
      htp.p ('&nbsp;<input type="' || item_typ || '" name="ans1" value="2" id="vc3"> ' || vc3 || ' <br/> ');
   end if;   
   if vc4 is not null and vc4 != ' ' then    
      htp.p ('&nbsp;<input type="' || item_typ || '" name="ans1" value="4" id="vc4"> ' || vc4 || '<br/> ' );
   end if;
   if vc5 is not null and vc5 != ' ' then 
      htp.p ('&nbsp;<input type="' || item_typ || '" name="ans1" value="3" id="vc5"> ' || vc5 || '<br/> ');
   end if;
   htp.p ('<br/> <br/>');
ELSIF upper(item_typ) IN ('TEXT','PASSWORD','TEXTAREA') THEN 
      htp.p ('&nbsp;1.<input type="' || item_typ || '" name="ans1"   id="vc2" value="' || vc2 || '"> <br/> '); 
      htp.p ('&nbsp;2.<input type="' || item_typ || '" name="ans2" id="vc3" value="' || vc3 || '"> <br/> ');
      htp.p ('&nbsp;3.<input type="' || item_typ || '" name="ans3" id="vc4" value="' || vc4 || '"> <br/> ' );
      htp.p ('<br/> <br/>');
END IF;

htp.p ('<button type="submit"> Submit </button>');

htp.p ('</div>');

htp.p ('</form>');

例外

WHEN OTHERS THEN

  htp.p('What is causing you to search for a new job? <br/> <br/>');

  htp.p('&nbsp;<input type="radio" name="ans1" value="1"> Current Salary <br/> ');

  htp.p('&nbsp;<input type="radio" name="ans1" value="2"> Location<br/> ');

  htp.p('&nbsp;<input type="radio" name="ans1" value="4"> Unhappy with Management<br/> ' );

  htp.p('&nbsp;<input type="radio" name="ans1" value="3"> Less Vacations<br/> <br/>');

  htp.p('<button type="submit"> Submit </button>');

  htp.p('</div>');

  htp.p ('</form>');

结束;

(如果代码格式不正确,我很抱歉)。但问题是……当我单击提交按钮时,我有一个 PL/SQL 进程,旨在将在先前表单中输入的值插入到表中:

/* '页面处理'部分中的 PL/SQL 处理代码 */

开始

插入用户意见

(uemail,tquestion,uanswer)

值 (:v_email, :vc1, :v2) ;

结束;

但在结果中,我总是看到插入了所有空值的记录......这意味着表单字段值对“页面处理”部分中的 PL/SQL 进程不可用。

有人可以帮我说说如何在会话状态中引用表单字段值,以便我们可以在 PL/SQL 中使用它们。

提前致谢。

【问题讨论】:

oracle apex 有一个内置的表单工具,您可以在 Application Express Application Builder 用户指南文档的开发表单部分检查它是否有能力,如果您必须使用 html 表单,请检查地址栏当您提交页面时,您的应用程序通常会在地址栏中将项目数据传输为:P18_ROWID:123456,如果您无法提交数据,您应该会看到:vc1:12345 可能存在问题 我无法理解您的示例 htp.p 中的以下代码('
');据我所知,apex 与 php 代码没有任何关系。可能您的表单试图将您的数据提交到 oracle apex 上不存在的 php 页面
大家好,请忽略我上面代码中的 PHP 文件引用。我实际上已经删除了它,并且表单元素没有“操作”属性......可能当我将代码粘贴到我的问题中时,我使用了不正确的脚本版本。因此,只需忽略具有 PHP 脚本引用的行。我的问题是没有 php 参考的代码。 如果您在 APEX 中使用手动 HTML 表单,您将会遇到麻烦 /southparkreference。我会质疑你为什么不使用 APEX 的声明性。 我同意@ScottWe。你正在做的是一个坏主意。我看不出你为什么需要这样做。使用 apex 有什么问题?你为什么要使用 apex 然后不使用它?...相反,你为什么不告诉我们你正在尝试解决的实际问题,而不是让我们帮助解决你想出的解决方案? 【参考方案1】:

使用以下代码插入值:

begin

insert into user_opinions

(uemail,tquestion,uanswer)

values (:v_email, vc1, vc2) ;

end;

【讨论】:

以上是关于Ora-Apex:如何从手动 HTML 表单中捕获屏幕字段值的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Django 中的表单中捕获错误?

从表单中的文本框中捕获文本时,如何修复运行时错误?

从用户 HTML 检查和手动属性删除中禁用 Angular 反应式表单字段是不是安全?

xamarin 表单从按钮单击捕获列表视图

使用 PHP 从动态输入字段中捕获数组值并通过电子邮件发送它们

如何从父文档中捕获 iframe 内部的刷新?