这是一个"最佳实践"/"最有效"的问题。我有一个大表单(20多个字段)。将post形成一个大型MySQL表。
不,我不能分解表格,不,我也不能分解桌子(它是用来装尺寸的);由管理员销售代表使用。此外,我不想使用Javascript。
我知道我可以做到:HTML
<form action="etc.php" method="post">
<input type="text" name="neck" value="">
<input type="text" name="arm" value="">
<input type="text" name="back" value="">
<input type="text" name="chest" value="">
<input type="text" name="legs" value="">
<submit button>
PHP
<?
$_POST['neck'];
$_POST['back'];
$_POST['arm'];
$_POST['chest'];
$_POST['legs'];
$postMeasurements = "INSERT INTO measurements (etc, etc, etc,) VALUES (etc, etc, etc) WHERE etc='etc'; query ($postMeasurements);
?>
但是有更快的方法吗?不必声明每个单独的post,只需运行一个循环,获取所有数据post并插入到表中即可。即使数据与表的列的顺序相同,或者输入名称必须与表的列名相同,我也可以;我只是觉得累了,不得不一直把这些$_POST变量写进去。
第二个问题:在出现错误时,保存这些数据的最佳方式是什么?现在,我将所有内容都保存在$_SESSION中(每个输入一个会话变量),如果出现错误并显示错误消息,则重定向回表单页面。然后将每个$_SESSION变量作为该输入值进行回显。
谢谢,
如果字段的名称与字段名称完全相同。帖子只能有字段,没有其他
//if $_POST has the form then, also this is very unsafe because there is no injection prevention too
$sql = "INSERT INTO table (" . implode(",", array_keys($_POST)) . ")"
. "VALUES ('" . implode("','", array_values($_POST)) . "')";
您可以在查询中直接使用$_POST['fo'],而无需声明:)。
保存数据可以在会话或内联缓存中,如果您有大量数据,最好在服务器中使用一些缓存,并且在加载表单时,它会基于session_ID 从服务器检索数据
让页面自己发布。
然后这样做:
if($_SERVER["REQUEST_METHOD"] == "POST"){
// validate and insert post data
header("Location: $successUrl");
exit();
}
?>
<form action="etc.php" method="post">
<input type="text" name="neck" value="<?= $_POST["neck"]?>">
<input type="text" name="arm" value="<?= $_POST["arm"] ?>">
....