Как использовать fputcsv и взорваться, чтобы получить зацикленные данные в формате с разделителями - PullRequest
0 голосов
/ 05 июня 2019

Я использую следующее руководство, чтобы попытаться получить данные в формате CSV с разделителями, но я получаю некоторые ошибки. Руководство показывает, взорваться и fputcsv, используемые вместе.

Что я делаю не так?

Это руководство, которое я использую:

https://www.w3schools.com/php/func_filesystem_fputcsv.asp

Ошибка:

Предупреждение: explode () ожидает, что параметр 2 будет строкой, а массив указан в /home4/public_html/csvTest.php в строке 25

Предупреждение: fputcsv () ожидает, что параметр 2 будет массивом, значение NULL указано в /home4/public_html/csvTest.php в строке 25

Код:

$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql_subscribers = "
    SELECT *
    FROM test_notif
    ORDER BY date_subscribed
";
$subscriber_stmt = $con->prepare($sql_subscribers);
$subscriber_stmt->execute();
$subscriber_rows = $subscriber_stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($subscriber_rows as $subscriber_row) {
    fputcsv($file,explode(',',$subscriber_row));
}

Полный код:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$file_name = "subscriber_list.csv";
$file = fopen("subscriber_list.csv","w");

try {
    $servername = 'localhost';
    $usernameCon = '';
    $passwordCon = '';
    $con = new PDO('mysql:host='.$servername.';dbname=', $usernameCon, $passwordCon);

    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql_subscribers = "
        SELECT *
        FROM test_notif
        ORDER BY date_subscribed
    ";
    $subscriber_stmt = $con->prepare($sql_subscribers);
    $subscriber_stmt->execute();
    $subscriber_rows = $subscriber_stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($subscriber_rows as $subscriber_row) {
        //fputcsv($file,explode(',',$subscriber_row));
        fputcsv($file, $subscriber_row);
    }

    header('Content-type: application/octet-stream');
    header("Content-Disposition: attachment; filename='.$file_name.'");

    fclose($file);
}   
catch(PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

?>
<body>
    <form action="" name="csvForm" target="csvIframe">
        <input type="submit" value="Download File">
    </form>
    <iframe name="csvIframe" src="">
    </iframe>
</body>
</html>

1 Ответ

2 голосов
/ 05 июня 2019

Второй аргумент fputcsv (в зависимости от того, что говорит вам ошибка)

fputcsv() ожидает, что параметр 2 будет массивом

И $subscriber_row - это уже массив .

Итак:

foreach ($subscriber_rows as $subscriber_row) {
    fputcsv($file, $subscriber_row);
}

Обновление : простой пример выходного файла для пользователя:

foreach ($subscriber_rows as $subscriber_row) {
    //fputcsv($file,explode(',',$subscriber_row));
    fputcsv($file, $subscriber_row);
}

header('Content-type: application/octet-stream');
header("Content-Disposition: attachment; filename='.$file_name.'");

fclose($file);

readfile($file_name);
exit;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...