2 回答
TA贡献1828条经验 获得超13个赞
我并不是在提倡这是一种好的做法,但出于演示目的,以显示您的代码有什么问题,我将“按原样”将其放在这里-尽管确实应该使用prepared statement!!!
表单提交array非常有效,您在错误级别访问数据。您需要访问在form_fields数组中找到的字段而不是POST数组本身(尽管当然form_fields是在 POST 数组中)
为简单起见,此处使用variable variable语法将各种值分配为变量
$fields=$_POST['form_fields'];
foreach( $fields as $field => $value )${$field}=$value;
$sql = "INSERT INTO `Draw_tabel`
(`Date`, `A113d`, `A112d`, `A111d`, `A133d`, `A132d`, `A131d`, `A173d`, `A172d`, `A171d`, `A183d`, `A182d`, `A181d`, `A193d`, `A192d`, `A191d`)
VALUES
('$date', '$am113d', '$am112d', '$am111d', '$pm13d', '$pm12d', '$pm11d', '$pm53d', '$pm52d', '$pm51d', '$pm63d', '$pm62d', '$pm61d', '$pm73d', '$pm72d', '$pm71d');";
echo $sql;
最终呈现的 SQL 如下所示:
INSERT INTO `Draw_tabel`
(`Date`, `A113d`, `A112d`, `A111d`, `A133d`, `A132d`, `A131d`, `A173d`, `A172d`, `A171d`, `A183d`, `A182d`, `A181d`, `A193d`, `A192d`, `A191d`)
VALUES
('2020-12-12', '1', '2', '3', '4', '5', '6', '78', '45', '12', '99', '56', '45', '12', '115', '0');
这些数字在这里毫无意义——只是随机输入的简单整数。
如前所述,更好的方法是使用 a prepared statementwhich 可能会这样做:
if( $_SERVER['REQUEST_METHOD']=='POST' && !empty( $_POST['form_fields'] ) ){
$fields=$_POST['form_fields'];
$types=array();
$values=array();
foreach( $fields as $field => $value ){
$values[]=$value;
$types[]=is_numeric( $value ) ? 'i' : 's';
}
$sql='insert into `draw_tabel`
(`date`, `a113d`, `a112d`, `a111d`, `a133d`, `a132d`, `a131d`, `a173d`, `a172d`, `a171d`, `a183d`, `a182d`, `a181d`, `a193d`, `a192d`, `a191d`)
values
( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? );';
$stmt=$conn->prepare( $sql );
$stmt->bind_param( implode('',$types), ...$values );
$res=$stmt->execute();
echo $res ? 'New record created successfully' : 'Error';
}
TA贡献1784条经验 获得超9个赞
你有:
<input type="date" name="form_fields[date] " >
和
$Dateee = $_POST['form_fields[date]'];
但 PHP 会采用该字段名称并将其放入:
$_POST['form_fields']['date']
……你在所有其他领域都有类似的错误。
您还应该使用带有占位符的预准备语句,而不是将用户输入混入 SQL 字符串。
- 2 回答
- 0 关注
- 182 浏览
添加回答
举报