2

我为计算构建了一个广泛的表格,我以一种自动化的方式构建它,因此输入是从数据库生成的,它们的名称类似于 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;
        }
4

4 回答 4

2

您可以尝试使用数组来存储 $_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;
}
于 2018-09-13T10:32:53.367 回答
2

您可以使用extract

extract — 从数组中将变量导入当前符号表

但是,请注意:

警告不要对不受信任的数据使用 extract(),例如用户输入(例如 $_GET、$_FILES)。

您也可以使用list,

或者,您可以使用我在评论中建议的内容,也就是说,您循环$_POST并获取键/值并将它们推送到数组中。

$data = [];    

foreach ($_POST as $key => $value) {
    if (!in_array($key, ['submit-button'])) {
        $data[$key] = $value;
    }
}

这样你就有了在$data.

于 2018-09-13T10:32:34.903 回答
2

您可以将array_push函数和count()函数用于循环长度:

 $dataObject = [];
for ($i = 0; $i <= count($_POST); ++$i) {
         array_push($dataObject,htmlentities($connect->real_escape_string($_POST['a_'.$i])));
    }
于 2018-09-13T10:35:45.870 回答
0

只是您可以使用数组作为 html 输入的名称,如下所示:

<form method="post" action="collect_vals.php">
<div class="input_fields_wrap">
    <button class="add_field_button">Add More Fields</button>
    <div><input type="text" name="mytext[]"></div>
    <div><input type="text" name="mytext[]"></div>
    <div><input type="text" name="mytext[]"></div>
    <div><input type="text" name="mytext[]"></div>
    <div><input type="text" name="mytext[]"></div>
</div>
</form>

从上面的输入字段中收集值非常简单,请看下面的示例:

echo $_POST["mytext"][0];
echo $_POST["mytext"][1];

看看这个漂亮的例子

于 2018-09-13T11:10:14.450 回答