Вставить данные из db в файл csv с помощью php pdo

Я пытаюсь вставить данные, выбранные из моей базы данных, в файл csv. Я здесь застрял и не знаю, почему это не работает. Это заставляет меня давать такой файл: Вставить данные из db в файл csv с помощью php pdo

По какой-то причине он поместил имена столбцов в 1 поле (A1), я сейчас использую этот код:

<?php
include "includes/connection.php";

if (isset($_POST['submit'])){

$tabel = $_POST['tabel'];
$date1 = $_POST['date1'];
$date2 = $_POST['date2'];

      header('Content-Type: text/csv; charset=utf-8');  
      header('Content-Disposition: attachment; filename = "data.csv";');  
      $output = fopen("php://output", "w");  
      fputcsv($output, array('Dev_ID', 'Barcode', 'Naam', 'Ip_adres', 'Merk', 'Model', 'CPU', 'Memory', 'Moederbord', 'Serialnummer', 'Aanschaf_dat', 'Aanschaf_waarde', 'Opmerkingen', 'Picture_dev'));  
      $sql = "SELECT * FROM ".$tabel." WHERE Aanschaf_dat BETWEEN ".$date1." AND ".$date2."";  
      $query = $conn->prepare($sql); 
      while($row = $query->fetch(PDO::FETCH_ASSOC))  
      {  
           fputcsv($output, $row);  
      }  
      fclose($output);      
}
?>

Кто-нибудь знает, что я делаю не так?

Добавьте Отчет об ошибках в начало файла (ов) во время тестирования сразу после открывающего тега PHP, например <?php error_reporting(E_ALL); ini_set('display_errors', 1);, и вы сможете решать свои собственные проблемы.

RiggsFolly 19.06.2018 11:32

Ваш сценарий широко открыт для Атака с использованием SQL-инъекции Даже если вы избегаете ввода, это небезопасно! Используйте подготовленные параметризованные операторыдолжным образом в API MYSQLI_ или PDO

RiggsFolly 19.06.2018 11:33

@RiggsFolly Да, я пробовал и спасибо за вашу помощь, но на данный момент это не проблема моего вопроса

Ende 19.06.2018 11:34

Вы ведь знаете, что $variables будет автоматически расширяться в строковый литерал в двойных кавычках, не так ли?

RiggsFolly 19.06.2018 11:36

И эти даты следует заключать в одинарные кавычки.

RiggsFolly 19.06.2018 11:36

И этот .""; совершенно не нужен в конце строкового литерала

RiggsFolly 19.06.2018 11:37

Это кошмар с SQL-инъекцией, но попробуйте $sql = "SELECT * FROM $tabel WHERE Aanschaf_dat BETWEEN '$date1' AND '$date2'";

RiggsFolly 19.06.2018 11:38

И что он ничего не достигает preparing, подобное утверждение без параметров в нем

RiggsFolly 19.06.2018 11:39

У меня были даты, заключенные в одинарные кавычки, но ничего не помогло, даже с вашим новым запросом sql файл csv останется пустым. И я знаю, что он широко открыт для SQL-инъекций, но здесь это не имеет значения

Ende 19.06.2018 11:40

В каком формате даты вводятся пользователем? Они должны быть YYYY-MM-DD, чтобы запрос работал

RiggsFolly 19.06.2018 11:42

Это ГГГГ-ММ-ДД

Ende 19.06.2018 11:42

У вас есть данные в таблице для диапазона дат, указанного пользователем

RiggsFolly 19.06.2018 11:44

Выведите запрос, затем запустите его в phpMyAdmin или другом инструменте, который вы используете для выполнения запросов.

RiggsFolly 19.06.2018 11:44

Запрос @RiggsFolly sql дает мне результат imgur.com/a/iooeD5e Я не уверен, но не думаю, что это будет проблемой

Ende 19.06.2018 11:47

@RiggsFolly Я внес некоторые изменения, и теперь он выводит данные из базы данных, помещает все в поле A вместо того, чтобы каждый раз брать новое поле

Ende 19.06.2018 12:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
15
462
1

Ответы 1

Проверьте приведенный ниже код и обратите внимание на изменение в операторе SQL. Также необходимо выполнить дезинфекцию данных, чтобы предотвратить SQL-инъекцию,

<?php
include "includes/connection.php";

if (isset($_POST['submit'])){

$tabel = $_POST['tabel'];
$date1 = $_POST['date1'];
$date2 = $_POST['date2'];

header('Content-Type: text/csv; charset=utf-8');  
header('Content-Disposition: attachment; filename = "data.csv";');  
$output = fopen("php://output", "w");  
fputcsv($output, array('Dev_ID', 'Barcode', 'Naam', 'Ip_adres', 'Merk', 'Model', 'CPU', 'Memory', 'Moederbord', 'Serialnummer', 'Aanschaf_dat', 'Aanschaf_waarde', 'Opmerkingen', 'Picture_dev'));  
$sql = "SELECT * FROM $tabel  WHERE Aanschaf_dat BETWEEN '$date1' AND '$date2'";    
$query = $conn->prepare($sql); 
while($row = $query->fetch(PDO::FETCH_ASSOC))  
{  
fputcsv($output, $row);  
}  
fclose($output);      
}
?>

Об этом уже упоминалось в комментариях, но спасибо за ответ.

Ende 19.06.2018 11:48

Другие вопросы по теме