php - 如何在关联数组中指定变量,在循环中获取值并插入数据库
问题描述
该代码将数据插入数据库。我在用变量替换数组值之一时遇到问题,即我想将 $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);
}
}
解决方案
您实际上根本没有插入$fac_id
数据库。您的$fields
数组所做的是确定$_POST
每个插入使用哪个值。
因此,如果您设置$fields['3']
为7
then,它将尝试$inputvalue = $_POST[$inputValueKey][$i]
使用该值运行 - 例如,如果$i
是0
,则它将尝试从$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注入漏洞,如评论中所述。
推荐阅读
- html - 使用 ngFor 使用内联样式动态创建 div,但在 angular 中使用 ngIf 的条件
- hyperlink - 使用 Selenium 在 testNG 中测试断开的链接不起作用
- html - 关于移动滚动问题的 Bootstrap 4 模式
- model-checking - 模型检查:为什么 LTL 逻辑“<>”在 Spin 中没有产生正确的反例
- javascript - React.js:更新存储在状态中的对象数组
- cloud - 如何删除 OneDrive Microsoft 365 中的文件?
- javascript - 使对象的数据选择干燥
- haskell - 每次调用函数时生成一个顺序值或随机值
- ssl - 证书签名请求:它是否包含公钥或私钥?
- r - 如何从字符串中提取字符?