php - 自动生成 $_POST 变量
问题描述
我为计算构建了一个广泛的表格,我以一种自动化的方式构建它,因此输入是从数据库生成的,它们的名称类似于 while 循环中的计数
<input type="text" placeholder="0" value="0" name="a_'.$count.'" />
这部分工作正常,事情是我试图为 $_POST 生成变量,这是我目前拥有的,并且肯定它不正确。
for ($i = 0; $i <= 119; ++$i) {
${"a_$i"} = htmlentities($connect->real_escape_string($_POST['a_'.$i]));
}
在此之后构建了要插入到我已经拥有的数据库中的 sql,只有这部分丢失了。
编辑 :
尝试添加到数组后,我知道在插入时会收到此消息:
致命错误:第 261 行的 /home/gmtemhic/urbanos.gm-tests.xyz/modules/form_particular/view/form_particular.tpl.php 中只能通过引用传递变量
if($insert = $connect->prepare("INSERT INTO request_form_particular(nome,email,tel,morada_origem,codigopostal,morada_destino,codigopostal_destino,dataprevista,mensagem,a_1, a_2, a_3, a_4, a_5, a_6, a_7, a_8, a_9, a_10, a_11, a_12, a_13, a_14, a_15, a_16, a_17, a_18, a_19, a_20, a_21, a_22, a_23, a_24, a_25, a_26, a_27, a_28, a_29, a_30, a_31, a_32, a_33, a_34, a_35, a_36, a_37, a_38, a_39, a_40, a_41, a_42, a_43, a_44, a_45, a_46, a_47, a_48, a_49, a_50, a_51, a_52, a_53, a_54, a_55, a_56, a_57, a_58, a_59, a_60, a_61, a_62, a_63, a_64, a_65, a_66, a_67, a_68, a_69, a_70, a_71, a_72, a_73, a_74, a_75, a_76, a_77, a_78, a_79, a_80, a_81, a_82, a_83, a_84, a_85, a_86, a_87, a_88, a_89, a_90, a_91, a_92, a_93, a_94, a_95, a_96, a_97, a_98, a_99, a_100, a_101, a_102, a_103, a_104, a_105, a_106, a_107, a_108, a_109, a_110, a_111, a_112, a_113, a_114, a_115, a_116, a_117, a_118, a_119) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)")){
$insert->bind_param("ssissssssiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
$nome,$email,$tel,$morada_origem,$codigopostal,$morada_destino,$codigopostal_destino,$dataprevista,$mensagem,$values[0],$values[1],$values[2],$values[3],$values[4],$values[5],$values[6],$values[7],$values[8],$values[9],$values[10],$values[11],$values[12],$values[13],$values[14],$values[15],$values[16],$values[17],$values[18],$values[19],$values[20],$values[21],$values[22],$values[23],$values[24],$values[25],$values[26],$values[27],$values[28],$values[29],$values[30],$values[31],$values[32],$values[33],$values[34],$values[35],$values[36],$values[37],$values[38],$values[39],$values[40],$values[41],$values[42],$values[43],$values[44],$values[45],$values[46],$values[47],$values[48],$values[49],$values[50],$values[51],$values[52],$values[53],$values[54],$values[55],$values[56],$values[57],$values[58],$values[59],$values[60],$values[61],$values[62],$values[63],$values[64],$values[65],$values[66],$values[67],$values[68],$values[69],$values[70],$values[71],$values[72],$values[73],$values[74],$values[75],$values[76],$values[77],$values[78],$values[79],$values[80],$values[81],$values[82],$values[83],$values[84],$values[85],$values[86],$values[87],$values[88],$values[89],$values[90],$values[91],$values[92],$values[93],$values[94],$values[95],$values[96],$values[97],$values[98],$values[99],$values[100],$values[101],$values[102],$values[103],$values[104],$values[105],$values[106],$values[107],$values[108],$values[109],$values[110],$values[111],$values[112],$values[113],$values[114],$values[115],$values[116],$values[117],$values[118]);
$insert->execute();
echo "DONE";
}else{
echo "Error :".$connect->error;
}
解决方案
您可以尝试使用数组来存储 $_POST 值,例如:
$values = array();
for ($i = 0; $i <= 119; $i++) {
$values[$i] = htmlentities($connect->real_escape_string($_POST["a_{$i}"]));
}
或者,如果您更喜欢使用元素的名称作为数组中的索引:
$values = 数组();
for ($i = 0; $i <= 119; $i++) {
$values["a_{$i}"] = htmlentities($connect->real_escape_string($_POST["a_{$i}"]));
}
然后按如下方式引用数组中的每个元素($index
将是元素的位置$i
或元素的名称,a_$i
具体取决于您使用的方法:
foreach ($values as $index=>$value) {
// Perform your actions here
...
}
更新:
对于将值添加到数据库的关系,根据您的方法,您可以执行以下操作:
创建一个数组 (
$additional_fields
) 将存储每个字段的名称。您可以像以前一样使用 for 循环0 - 119
并将a_$i
值放入数组中,或者如果所有字段都将完成,则如下所示。创建另一个数组 (
$values_list
),它只存储要插入数据库的值。最后一个数组 (
$values_identifiers
) 将只是?
每个值的占位符 ( )。
代码如下:
$additional_fields = array();
$values_list = array($nome, $email, $tel, $morada_origem, $codigopostal, $morada_destino, $codigopostal_destino, $dataprevista, $mensagem);
$values_identifiers = array();
foreach ($values $key=>$value) {
$additional_fields[] = $key;
$values_list[] = $value;
$values_identifiers[] = '?';
}
$sql = "INSERT INTO request_form_particular (nome, email, tel, morada_origem, codigopostal, morada_destino, codigopostal_destino, dataprevista, mensagem, ".implode(', ', $additional_fields).' VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, '.implode(', ', $values_identifiers).')';
$stmt = $connect->prepare($sql);
if ($stmt->execute($values_list)) {
echo 'Done';
} else {
echo 'Error: '.$connect->error;
}
推荐阅读
- php - Doctrine 可以处理多列 UNIQUE 索引吗?
- html - 超过全高时如何使侧导航粘在左上角?
- c# - 如何在asp.net核心的相同会话ID中过期cookie
- javascript - 数组在组件状态中未定义(React)
- reactjs - 单击标签后如何防止触发输入onChange?
- linux - 意外删除内核文件
- tkinter - 如何让 Tkinter 在没有滚动条的情况下显示非常大的图像?
- ruby-on-rails - Rails 渐进式 Web 应用程序问题
- swift - CropPickerController 和 CropPickerView 在编译 Swift 项目时出错
- r - 此 R 代码是否会计算有多少调查提交具有所有 4 个变量的值?