用SQL数据库!我提交表单,表单有的为空时就出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用SQL数据库!我提交表单,表单有的为空时就出错相关的知识,希望对你有一定的参考价值。

<%
if action="add" then
dkid=request.form("dkid")
dk=request.form("dk")
dkpay=request.form("dkpay")
dksoyin=request.form("dksoyin")
dksygz=request.form("dksygz")
dkman=request.form("dkman")
dkcar=request.form("dkcar")
dkbank=request.form("dkbank")
dkmj=request.form("dkmj")
dkbd=request.form("dkbd")
dkover=request.form("dkover")
dkpt=request.form("dkpt")
dkbz=request.form("dkbz")
dkygbx=request.form("dkygbx")
dkcf=request.form("dkcf")
dkck=request.form("dkck")
dkbx=request.form("dkbx")
dkch=request.form("dkch")
dksd=request.form("dksd")
dkzx=request.form("dkzx")
dkcd=request.form("dkcd")
dkqt=request.form("dkqt")
set rs=server.createobject("adodb.recordset")
sql="select * from dk"
rs.open sql,conn,3,3
rs.addnew
rs("dkid")=dkid
rs("dk")=dk
rs("dkpay")=dkpay
rs("dksoyin")=dksoyin
rs("dksygz")=dksygz
rs("dkman")=dkman
rs("dkcar")=dkcar
rs("dkbank")=dkbank
rs("dkmj")=dkmj
rs("dkbd")=dkbd
rs("dkover")=dkover
rs("dkpt")=dkpt
rs("dkbz")=dkbz
rs("dkcf")=dkcf
rs("dkck")=dkck
rs("dkbx")=dkbx
rs("dkygbx")=dkygbx
rs("dkch")=dkch
rs("dksd")=dksd
rs("dkzx")=dkzx
rs("dkcd")=dkcd
rs("dkqt")=dkqt
rs("date")=date()
rs.update
rs.close
set conn=nothing
response.redirect"dkmanage.asp?action=view"
end if
%>

是不是有主键存在,

最好用insert,不要select之后addnew再update,这样效率低,在获得值之后构造insert字符串,然后再执行,

还有就是rs.open时,与打开的模式有关,把3,3改成1,3试试,
参考技术A 如果某字段为非字符(串)的类型,那么一旦传进去的值为空肯定报错

提交表单时对表单元素的引用为空

【中文标题】提交表单时对表单元素的引用为空【英文标题】:ref to form element is null when submitting the form 【发布时间】:2022-01-23 20:25:11 【问题描述】:

我有一个表单应该将文件(图像)上传到 NextJs API 路由。我尝试使用表单的引用来检索表单值。但是,当我尝试在 onSubmit 函数中访问表单时,引用仍然为空。我知道 refs 在第一次渲染时可以为 null,但我假设在提交表单时,应该解析 ref。

这是表单的样子:

<form ref=formRef onSubmit=onFormSubmit>
  <label htmlFor="image">Image:</label>
  <input id="image" accept="image/*" multiple=false onChange=onImageChange name="image" type="file" required />
  <button type="submit">Upload</button>
</form>

这是(函数)组件的其余部分的样子:

const UploadImageModal = (): JSX.Element => 
  const formRef = useRef<HTMLFormElement>(null)
  const onFormSubmit = async (event: SubmitEvent) => 
    event.preventDefault()
    console.log(formRef.current) //Shows null
    const data = new FormData(formRef.current)
    const res = await fetch('/api/upload-image', 
      method: 'POST',
      body: data
    )
  
  
  return (/* The component including the form */)

我正在使用 TypeScript,但我认为这无关紧要,因为 TypeScript 在运行时没有影响。我遗漏了我认为与这个问题无关的任何内容,例如样式和其他不触及表单的组件。

API 路由已经使用 Postman 进行了测试,并且可以正常工作。如果有办法直接从 SubmitEvent 获取表单数据,那也是一个很好的解决方案。我以为表单数据会通过那个事件暴露出来,但它并没有让我到任何地方。

感谢任何花时间帮助我的人!

【问题讨论】:

您能提供完整组件的代码吗?到目前为止,我无法使用您提供的代码重现该问题。 【参考方案1】:

你可以通过

获取表单DOM引用
const data = new FormData(event.target)

[信息] 您正在使用打字稿,所以处理程序的类型应该是

const onFormSubmit: FormEventHandler<HTMLFormElement > = async (event) => 

【讨论】:

谢谢!您的解决方案效果很好。但是,由于它不能解决缺少参考的问题,我还没有将答案标记为已接受(尚未)。也感谢您提供额外的信息。我最近才开始在 React 中使用 TypeScript,所以有时我会忘记输入某些内容。生产版本会让我大吃一惊;)【参考方案2】:

我附上了工作代码和下面的 Codesandbox。 https://codesandbox.io/s/react-functional-component-form-usage-with-typescript-16ghf?file=/src/App.tsx

import "./styles.css";
import  SyntheticEvent, useRef  from "react";

const UploadImageModal = (): JSX.Element => 
  const formRef = useRef() as React.MutableRefObject<HTMLFormElement>;

  const onFormSubmit = async (event: SyntheticEvent) => 
    event.preventDefault();
    console.log(formRef); //Shows null
    const data = new FormData(formRef.current);
    const res = await fetch("/api/upload-image", 
      method: "POST",
      body: data
    );
  ;

  return (
    <form ref=formRef onSubmit=onFormSubmit>
      <label htmlFor="image">Image:</label>
      <input
        id="image"
        accept="image/*"
        multiple=false
        name="image"
        type="file"
        required
      />
      <button type="submit">Upload</button>
    </form>
  );
;

export default function App() 
  return (
    <div className="App">
      <UploadImageModal />
    </div>
  );

【讨论】:

您好,感谢您的回复。您能否解释一下您为修复缺少的表单参考所做的更改?我只注意到一些额外/不同的打字和额外的代码,使示例在代码和框中实际运行(谢谢) 额外/不同的输入可能是问题所在。你能提供 tsconfig.json 吗?还要考虑您的拼写错误,例如type="file required /&gt; 谢谢我修正了错字。它只存在于问题中,而不是我的代码中,但很好。问题是,在运行 tsc 时,它编译得很好。编译后,typescript 不再执行任何操作,因此不会导致任何运行时错误。

以上是关于用SQL数据库!我提交表单,表单有的为空时就出错的主要内容,如果未能解决你的问题,请参考以下文章

当所需的文本框为空时,如何强制页面回发

00008 - layui 表单验证,需要验证,但非必输

尽管在空白字段上处理了错误,但表单正在提交

阻止模态按钮提交它所在的表单

PHP表单没有正确验证表单字段

提交表单后如何重新填充表单数据以及错误