【问题标题】:How to bulk insert dropdown select data into mysql如何将下拉选择数据批量插入mysql
【发布时间】:2021-08-04 10:36:15
【问题描述】:

下面的代码用于将数据插入到 mysql 表中。我只能成功地将数据插入三个中的两个。

提示: 表名 - wp_form_inputs 存储下拉选择的 form_idids 然后这个存储上面选择的选项

我在哪里插入数据:

wp_appointments - Successful
wp_appointment_customers - Successful
wp_appointment_custom_data - Not Successful

第三张表wp_appointment_custom_data 不会插入。保存数据的样子。

代码

global $wpdb;
$msg = '';
$action = isset($_GET['action']) ? trim($_GET['action']) : "";
$id = isset($_GET['id']) ? intval($_GET['id']) : "";

$row_details = $wpdb->get_row(
        $wpdb->prepare(
                "SELECT * from wp_appointments WHERE id = %d", $id
        ), ARRAY_A
);
if (isset($_POST['save-multiple-data'])) {
if (empty($action)) {
    $action = isset($_GET['action']) ? trim($_GET['action']) : "";
    $id = isset($_GET['id']) ? intval($_GET['id']) : "";

        for ($i = 0; $i < count($_POST["location"]); $i++) {
//Table 1 - Success
  $wpdb->insert("wp_appointments", array(
      "location_id" => $_POST["location"][$i],
      ...
  ));
//Table 2 - Success
  $wpdb->insert("wp_appointment_customers", array(
      "appointment_id" => $wpdb->insert_id,
      "customer_id" => '1',
      ...
  ));
$fields = [
      0 => 'shifttype[]',
      1 => 'shiftstype[]',
      2 => 'facilitytype[]',
];

$insertId = $wpdb->insert_id;
foreach ($fields as $formInputId => $inputValueKey) {
  $wpdb->insert("wp_appointment_custom_data", array(
      "appointment_id" => $insertId,
      "customer_id" => '1',

      "form_input_id" => $formInputId,
      "input_value" => $_POST[$inputValueKey][$i],
  ));
}
if ($wpdb->insert_id > 0) {
        $msg = "Shift added successfully";
    } else {
        $msg = "Failed to add shift for location ".$_POST["location"][$i]." and service ".$_POST["service"][$i];
    }

    }
}

表格

<div class="col-md-3">
    <div class="form-group mb-2">
        <label>Location</label> <br>
        <select name="location[]" value="<?php echo isset($row_details['location_id']) ? $row_details['location_id'] : ""; ?>">
            <?php
            $loc_results = $wpdb->get_results ( "SELECT id, name FROM wp_locations");
            foreach($loc_results as $locat) {
            $locat_id=$locat->id;
            $locat_name=$locat->name;

            echo '<option value="' . esc_attr( $locat_id ) . '">' . esc_html( $locat_name) . '</option>';
            }
            ?>
        </select>
    </div>
</div>
<div class="col-md-3">
    <div class="form-group mb-2">
        <label>Shift Sub Type</label> <br>
        <select name="shifttype[<?php echo $form_input_id;?>]" value="<?php echo isset($row_details['input_value']) ? $row_details['input_value'] : ""; ?>">
            <?php
            $shiftype_results = $wpdb->get_results ( "SELECT id, form_input_id, title FROM wp_form_input_choices WHERE form_input_id = '1'");
            foreach($shiftype_results as $shiftype_result) {
            $shiftype_result_id=$shiftype_result->id;
            $shiftype_result_title=$shiftype_result->title;

            echo '<option value="' . esc_attr( $shiftype_result_id ) . '">' . esc_html( $shiftype_result_title) . '</option>';
            }
            ?>
        </select>
    </div>
</div>
<div class="col-md-3">
    <div class="form-group mb-2">
        <label>Shift Type</label> <br>
        <select name="shiftstype[<?php echo $form_input_id;?>]" value="<?php echo isset($row_details['input_value']) ? $row_details['input_value'] : ""; ?>">
            <?php
            $shiftstype_results = $wpdb->get_results ( "SELECT id, form_input_id, title FROM wp_form_input_choices WHERE form_input_id = '2'");
            foreach($shiftstype_results as $shiftstype_result) {
            $shiftstype_result_id=$shiftstype_result->id;
            $shiftstype_result_title=$shiftstype_result->title;

            echo '<option value="' . esc_attr( $shiftstype_result_id ) . '">' . esc_html( $shiftstype_result_title) . '</option>';
            }
            ?>
        </select>
    </div>
</div>
<div class="col-md-3">
    <div class="form-group mb-2">
        <label>Facility Type</label> <br>
        <select name="facilitytype[<?php echo $form_input_id;?>]" value="<?php echo isset($row_details['input_value']) ? $row_details['input_value'] : ""; ?>">
            <?php
            $facilitytype_results = $wpdb->get_results ( "SELECT id, form_input_id, title FROM wp_form_input_choices WHERE form_input_id = '3'");
            foreach($facilitytype_results as $facilitytype_result) {
            $facilitytype_result_id=$facilitytype_result->id;
            $facilitytype_result_title=$facilitytype_result->title;

            echo '<option value="' . esc_attr( $facilitytype_result_id ) . '">' . esc_html( $facilitytype_result_title) . '</option>';
            }
            ?>
        </select>
    </div>
</div>

找不到我做错了什么。 JS 代码复制表单以进行批量插入。我没有看到需要添加它。

【问题讨论】:

    标签: php html mysql wordpress


    【解决方案1】:

    具有相同键的数组分配将覆盖先前的分配

      $wpdb->insert("wp_appointment_custom_data", array(
          "appointment_id" => $wpdb->insert_id,
          "customer_id" => '1',
    
          "form_input_id" => '1', // overridden by 3rd form_input_id
          "form_input_id" => '2', // overridden by 3rd form_input_id
          "form_input_id" => '3',
          "input_value" => $_POST["shifttype"][$i],    // overridden by 3rd input_value
          "input_value" => $_POST["shiftstype"][$i],   // overridden by 3rd input_value
          "input_value" => $_POST["facilitytype"][$i],
    
      ));
    

    您必须分别插入 3 次输入类型

    $fields = [
          1 => 'shifttype',
          2 => 'shiftstype',
          3 => 'facilitytype',
    ];
    
    $insertId = $wpdb->insert_id;
    foreach ($fields as $formInputId => $inputValueKey) {
      $wpdb->insert("wp_appointment_custom_data", array(
          "appointment_id" => $insertId,
          "customer_id" => '1',
    
          "form_input_id" => $formInputId,
          "input_value" => $_POST[$inputValueKey][$i],
      ));
    }
    

    【讨论】:

    • 仍然没有工作。尝试在字段中添加方括号,但也没有用。 $fields = [ 1 =&gt; 'shifttype[]', 2 =&gt; 'shiftstype[]', 3 =&gt; 'facilitytype[]', ];
    • @DanstanOngubo 你能用你所做的改变更新问题吗?
    • @DanstanOngubo 我认为这是因为 post data shifttype[] etc 应该从数组索引 0 读取,而 form_input_id 从 1 开始。最好更新表单 HTML,为输入名称添加 form_input_id每个字段的索引(例如:&lt;select name="shifttype[&lt;?php echo $form_input_id];?&gt;" 以维护其引用
    • 我按照上面的建议对第三个 wpdb 插入查询进行了更改,并在 HTML 选择中添加了 form_input_id 名称。
    • @DanstanOngubo 在提出更多更改之前,我想确认表wp_appointment_custom_data 中的form_input_id 列代表字段类型(1 表示shifttype,2 表示shiftstype,3 表示facilitytype)和变量@987654328形式中的@ 具有价值。对吗?
    猜你喜欢
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 2021-05-31
    • 2020-04-24
    相关资源
    最近更新 更多