【问题标题】:How to specify variable inside an associative array, fetch value in a loop and insert in database [closed]如何在关联数组中指定变量,在循环中获取值并插入数据库[关闭]
【发布时间】:2021-05-19 12:08:02
【问题描述】:

代码将数据插入数据库。我在用变量替换数组值之一时遇到问题,即我想将 $fac_id 指定为值,而不是从输入字段中获取值。当我执行代码时,db 中的值为空,但是当我回显$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);
    } 
}

【问题讨论】:

  • 您是否尝试过调试这些值?我们无法运行此代码进行测试,您需要为我们提供调试详细信息。
  • 去掉''.$fac_id.''的引号和连接
  • 警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDOMySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your dataEscaping is not enough!
  • 您实际上根本没有将$fac_id 插入到数据库中。您的 $fields 数组所做的是确定每个插入使用哪个 $_POST 值。因此,如果您将$fields['3'] 设置为7,那么它将尝试使用该值运行$inputvalue = $_POST[$inputValueKey][$i] - 例如如果$i0,那么它将尝试从$inputvalue = $_POST[7][0] 读取。所以 a) 我怀疑你有一个名为 7 的 $_POST 字段,并且 b) 它没有删除从用户输入中读取的过程。
  • 这真的应该给你一个“未定义的偏移量”通知。您是否打开了错误报告?您在开发时是否检查错误日志或显示错误?

标签: php mysql wordpress


【解决方案1】:

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

因此,如果您将 $fields['3'] 设置为 7,那么它将尝试使用该值运行 $inputvalue = $_POST[$inputValueKey][$i] - 例如如果$i0,那么它将尝试从$inputvalue = $_POST[7][0] 读取。

然而

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

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

附:您还应该紧急修复代码中的 SQL 注入漏洞,如 cmets 中所述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 2013-03-09
    • 2021-06-09
    • 1970-01-01
    • 2019-12-16
    • 2013-03-27
    • 2014-06-11
    相关资源
    最近更新 更多