Node.js处理表单undefined值仅插入有效值到SQL的实现方法
实现方案
- 第一步:过滤dates对象中的undefined值
可以通过遍历键值对的方式筛选出所有有效选中项,示例代码如下:// 原dates定义保持不变 var dates = { monday: req.body.monday, tuesday: req.body.tuesday, wednesday: req.body.wednesday, thursday: req.body.thursday, friday: req.body.friday, saturday: req.body.saturday, sunday: req.body.sunday } // 过滤出值不为undefined的有效项 const validDateEntries = Object.entries(dates).filter(([weekDay, value]) => value !== undefined) // 可根据业务需求选择存储格式: // 选项1:存储为JSON字符串,后续读取解析最方便 const finalDates = JSON.stringify(Object.fromEntries(validDateEntries)) // 选项2:存储为选中的星期名称逗号分隔字符串,例如 "monday,sunday" // const finalDates = validDateEntries.map(([weekDay]) => weekDay).join(',') // 选项3:存储为选中的对应值逗号分隔字符串,例如 "2,1" // const finalDates = validDateEntries.map(([_, value]) => value).join(',') - 第二步:优化SQL写法,避免SQL注入风险
你当前直接拼接字符串生成SQL的写法存在严重的SQL注入漏洞,必须替换为参数化查询,示例(以mysql驱动为例):const addclient = "insert into clients (NAME, EMAIL, PHONE_NUMBER, TRAINER_NAME, HOUR, MINUTE, DATES) values (?, ?, ?, ?, ?, ?, ?)"; // 执行查询时传入参数数组,驱动会自动处理转义 connection.query(addclient, [name, email, phonenumber, req.session.username, hour, minute, finalDates], (err, result) => { if (err) { console.error('插入失败', err) return } // 插入成功后续逻辑 })
内容的提问来源于stack exchange,提问作者developerg1000
相关产品推荐
相关产品推荐

