php - 自动生成 $_POST 变量

标签 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 以插入我已有的数据库之后,只有这一部分丢失了。

编辑:

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

fatal error :在/home/gmtemhic/urbanos.gm-tests.xyz/modules/form_particular/view/form_particular.tpl.php 第 261 行中只能通过引用传递变量

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}"]));
}

或者如果您更喜欢使用元素的名称作为数组中的索引:

$值=数组();

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;
}

关于php - 自动生成 $_POST 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52311766/

相关文章:

sql - 我可以在 SQL 的聚合函数中包含非聚合列而不将其放入 GROUP BY 子句中吗?

java - Hibernate 类 - 从一个 View (表)读取,并写入另一个

mysql - 如果项目没有序列号,则设置 sum(count),如果有序列号,则设置 1

mysql - 返回所有父表行,但对于与 MYSQL 的 WHERE 子句不匹配的子表行返回 null

php - 如何从字符串中提取多个变量值(PHP)

php - 根据 'closest' 匹配 'earlier' 行替换当前行中的 NULL 值。 (基于日期的表格)

php - 应用多个时区的最佳方式是什么?

mysql - SQL - 根据 YTD 数字计算出 MTD 数字

php - 使用 PHP 将数据从 HTML 表单传递到 MySQL 数据库

php - 将 PHP 变量传递给 Javascript 代码