Как пропустить первую строку в .csv при импорте и добавить строку при экспорте?

#php #mysql #csv #import #export

#php #mysql #csv #импорт #экспорт

Вопрос:

Я просто пытаюсь пропустить первую строку при импорте файла .csv с тремя столбцами. Я видел несколько сложных решений, которые, как я считаю, не вписываются в мой код. Могу ли я получить некоторую помощь? вот мой код для импорта CSV:

 $fileName = $_FILES["file"]["tmp_name"];
                
                if ($_FILES["file"]["size"] > 0) {
                    
                    $file = fopen($fileName, "r");
                    
                    while (($column = fgetcsv($file, 10000, ",")) !== FALSE) {
                        
                        $value_age = $column[0];
                        $value_no = $column[1];
                        $value_benefit = $column[2];
                        
                        $rider_id = $_POST['rider_id'];

                        $insertId = mysqli_query($con, "INSERT into shield_rider_value set company_id='" . $company_id . "', policy_id='" . $policy_id . "', rider_id='" . $rider_id . "', rValue_age='" . $value_age . "', rValue_no='" . $value_no . "', rValue_benefit='" . $value_benefit . "'");
                        
                        if (!empty($insertId)) {
                            echo'<script> window.location.replace("?p=policyamp;pId='. $policy_id .'amp;alert=3"); </script>';
                        } else {
                            echo'<script> window.location.replace("?p=policyamp;pId='. $policy_id .'amp;alert=0"); </script>';
                        }
                    }
                }
  

Я также хочу добавить строку заголовка в файл экспорта, что для меня сложнее.
код экспорта, который я использую,:

  $rider_id = $_GET['rider_data_download'];

    $rider_list = $con->query("SELECT * FROM shield_riders where rider_id = $rider_id");
    while($row = $rider_list->fetch_assoc()) {

    $filename = "$row[rider_name].csv";
    $fp = fopen('php://output', 'w');

        

    header('Content-type: application/csv');
    header('Content-Disposition: attachment; filename='.$filename);

    $query = "SELECT rValue_age, rValue_no, rValue_benefit FROM shield_rider_value WHERE rider_id=$rider_id ";
    $result = mysqli_query($con, $query);
    while($row = mysqli_fetch_row($result)) {
        fputcsv($fp, $row);
    }
    exit;
    }
  

Спасибо!

Комментарии:

1. Почему бы не использовать LOAD DATA синтаксис ?

2. ваш код уязвим для внедрения sql , поэтому используйте только подготовленные инструкции с параметрами , и большинство проблем исчезнет.

3. установите переменную $ i = 0; перед циклом while и вставляйте значения только в том случае, если $i больше 0 в конце цикла wjhile, увеличивая $ i 1, чтобы вы могли легко пропустить первую строку.

4. @nbk спасибо. изменение для подготовки…

5. @GMB могу ли я назначить столбцы отдельно в этом?

Ответ №1:

Я только что нашел простое решение для пропуска первой строки CSV при импорте:

 fgetcsv($file); // adding this before while loop.
  

Возможно, это может помочь кому-то еще!