自动生成$ _POST变量 - php

我建立了一个广泛的计算形式,以一种自动化的方式来建立它,因此输入是从数据库中生成的,其名称就像这样,在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插入到我已经拥有的db中,仅缺少这一部分。

编辑:

尝试添加到数组后,我知道在插入时收到此消息:

致命错误:只能在第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 = array();

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),该数组将存储每个字段的名称。您可以像以前一样使用0 - 119的for循环并将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;
}

由于array_count_values()而显示警告消息 - php

我正在使用PHP的Codeigniter框架,并尝试从页面中提取关键字。完整的参考代码可见here。但是它还没有现成的。该问题是由于以下行中的数组函数引起的:$keywordCounts = array_count_values( $words ); 显示的错误消息如下:A PHP Error was encountered Severity: Warnin…

PHP Count数组元素 - php

嗨,有人可以解释为什么这会返回“数组由0个元素组成”。 :$arr = array(1,3,5); $count = count($arr); if ($count = 0) { echo "An array is empty."; } else { echo "An array has $count elements.…

PHP:从函数返回值并直接回显它? - php

这可能是一个愚蠢的问题,但是……的PHPfunction get_info() { $something = "test"; return $something; } html<div class="test"><?php echo get_info(); ?></div> 有没有办…

PHP:将数据从二维数组复制到一维数组的最快方法 - php

我有一个巨大的二维PHP数组,带有500万行。$t = [ [ "id" => 1, "name" => "foo" ], [ "id" => 2, "name" => "bar" ] ]; 现在,我必须将此数组的I…

php-printf和sprintf具有不同的输出 - php

我编写了以下微型php程序来测试printf和sprintf:<?php $str_1 = printf("%x%x%x", 65, 127, 245); $str_2 = sprintf("%x%x%x", 65, 127, 245); echo $str_1 . "\n"; echo $s…