首页 > 解决方案 > 如何在关联数组中指定变量,在循环中获取值并插入数据库

问题描述

该代码将数据插入数据库。我在用变量替换数组值之一时遇到问题,即我想将 $fac_id 指定为值,而不是从输入字段中获取值。当我执行代码时, db 中的值是空的,但是当我 echo 时$fac_id,我得到了登录用户的值,例如7.

$current_user = wp_get_current_user();
$fac_id = get_current_user_id();
for ($i = 0; $i < count($_POST["service"]); $i++) {
    $fields = [
          1 => 'shifttype',
          2 => 'shiftstype',
          3 => ''.$fac_id.'',
          4 => 'cvd',
          7 => 'facname',
          8 => 'facadd',
    ];

    foreach ($fields as $formInputId => $inputValueKey) {
        $d_id = '';
        $appointmentid = $insertId;
        $customerid = $custs->id;
        $forminputid = $formInputId;
        $inputvalue = $_POST[$inputValueKey][$i];
        $inputfilename = 'NULL';

        $insert_cust = "INSERT INTO wp_appointment_custom_data (id, appointment_id, customer_id, form_input_id, input_value, input_file_name) VALUES ('$d_id', '$appointmentid', '$customerid', '$forminputid', '$inputvalue', '$inputfilename')";
        $query_run = mysqli_query ($que_cust, $insert_cust);
    } 
}

标签: phpmysqlwordpress

解决方案


您实际上根本没有插入$fac_id数据库。您的$fields数组所做的是确定$_POST每个插入使用哪个值。

因此,如果您设置$fields['3']7then,它将尝试$inputvalue = $_POST[$inputValueKey][$i]使用该值运行 - 例如,如果$i0,则它将尝试从$inputvalue = $_POST[7][0].

然而

a) 我怀疑你有一个$_POST名为 的字段7,并且

b)它没有删除从用户输入中读取的过程(尽管它正在使它读取一个可能不存在的值)。

我怀疑以下内容会起作用 - 当您希望它从固定的服务器端值而不是用户输入中读取时,您可能需要一种特殊情况。请注意硬编码条目以及实现特殊情况$fields[3]的行上的三元运算符。$inputvalue =此外,无需$fields使用相同的值重复重新定义,因此我已将其移出循环。

$current_user = wp_get_current_user();
$fac_id = get_current_user_id();
$fields = [
      1 => 'shifttype',
      2 => 'shiftstype',
      3 => 'userID',
      4 => 'cvd',
      7 => 'facname',
      8 => 'facadd',
];

for ($i = 0; $i < count($_POST["service"]); $i++) {

    foreach ($fields as $formInputId => $inputValueKey) {
        $d_id = '';
        $appointmentid = $insertId;
        $customerid = $custs->id;
        $forminputid = $formInputId;
        $inputvalue = ($inputValueKey == "userID" ? $fac_id : $_POST[$inputValueKey][$i]);
        $inputfilename = 'NULL';

PS您还应该紧急修复代码中的SQL注入漏洞,如评论中所述。


推荐阅读