#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.
Возможно, это может помочь кому-то еще!