自动生成$ _POST变量

时间:2018-09-13 10:26:46

标签: php sql

我正在构建一个广泛的计算形式,以一种自动化的方式构建它,因此输入是从数据库中生成的,其名称就像这样,在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;
        }

3 个答案:

答案 0 :(得分:2)

您可以尝试使用数组存储$ _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;
}

答案 1 :(得分:2)

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

 $dataObject = [];
for ($i = 0; $i <= count($_POST); ++$i) {
         array_push($dataObject,htmlentities($connect->real_escape_string($_POST['a_'.$i])));
    }

答案 2 :(得分: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];

看看这个漂亮的exemple