У меня есть HTML-форма, например, опрос, и файл PHP с этим кодом.

<?php
$fieldA = $_POST["prezime"];
$fieldB = $_POST["ime"];
$fieldC = $_POST["datumrodjenja"];
$fieldD = $_POST["mestorodjenja"];
$fieldE = $_POST["rod"];
$fieldF = $_POST["prebivaliste"];
$fieldG = $_POST["brojpasosa"];
$fieldH = $_POST["izdatod"];
$fieldI = $_POST["vazido"];
$fieldJ = $_POST["profesija"];
$fieldK = $_POST["zanimanje"];
$fieldL = $_POST["fiksni"];
$fieldM = $_POST["mobilni"];
$fieldN = $_POST["email"];
$fieldO = $_POST["napomena"];

$keys = array($fieldA,$fieldB,$fieldC,$fieldD,$fieldE,$fieldF,$fieldG,$fieldH,$fieldI,$fieldJ,$fieldK,$fieldL,$fieldM,$fieldN,$fieldO); //THIS IS WHERE YOU PUT THE FORM ELEMENTS ex: array('$fieldA','$fieldB',etc)
$csv_line = $keys;
foreach( $keys as $key ){
    array_push($csv_line,'' . $_GET[$key]);

}
$fname = 'prijave.csv'; //NAME OF THE FILE
$csv_line = implode(',',$csv_line);
if(!file_exists($fname)){$csv_line = $csv_line."\r\n" ;}
$fcon = fopen($fname,'a');
$fcontent = $csv_line;
fwrite($fcon,$csv_line);
fclose($fcon);
?>

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

И второй вопрос, как разрешить собирать š ć đ č писем из формы с помощью этого скрипта? Спасибо!

-1
kuzmvnovic 12 Апр 2018 в 17:37

1 ответ

Лучший ответ

У меня было аналогичное требование для проекта, над которым я работал. Я придумал эту небольшую функцию для записи массива в файл CSV (с разделителями-запятыми).

Я использовал функцию fputcsv (), которая довольно удобно.

Функция принимает 2 аргумента: имя массива, а также имя, по которому должен вызываться CSV-файл. Используя fopen, я открываю пустой файл в каталоге, в котором хочу сохранить файл CSV.

Я устанавливаю заголовок, если он мне нужен, и записываю его в файл.

Затем я просматриваю массив и выводю каждый элемент, ограничивая его знаком «,».

После этого я закрываю файл.

Я понимаю, что это может не дать полного ответа на ваш вопрос, но я считаю, что это каким-то образом поможет вам.

Если ваш массив имеет тот же формат, что и приведенный ниже, то функция, которую я предоставил, будет работать.

Массив

Array
(
    [0] => John
    [1] => Doe
    [2] => England
    [3] => Somewhere
    [4] => Something
    [5] => UK
    [6] => Foo
    [7] => Bar
    [8] => Yes
    [9] => Developer
    [10] => Stack Overflow
    [11] => No
    [12] => 0123456778
    [13] => johndoe@gmail.com
    [14] => Smith
)

Функция

<?php


//Change these strings back to what you need
$fieldA = "John";
$fieldB = "Doe";
$fieldC = "England";
$fieldD = "Somewhere";
$fieldE = "Something";
$fieldF = "UK";
$fieldG = "Foo";
$fieldH = "Bar";
$fieldI = "Yes";
$fieldJ = "Developer";
$fieldK = "Stack Overflow";
$fieldL = "No";
$fieldM = "0123456778";
$fieldN = "johndoe@gmail.com";
$fieldO = "Smith";

$array = array( $fieldA,$fieldB,$fieldC,$fieldD,$fieldE,$fieldF,$fieldG,$fieldH,$fieldI,$fieldJ,$fieldK,$fieldL,$fieldM,$fieldN,$fieldO );


//set the filename 
$filename = "prijave";

//call the function and pass the above array and filename as arguments
array_to_csv( $array, $filename );


//function to write array to csv file using fputcsv()
function array_to_csv( $array, $filename ) {

    //open the csv file
    //set the path for the file - use a+ to set file pointer to end of file
    $out = fopen( "/path/to/output/directory/".$filename.".csv" , 'a+' );

    //header - optional, remove if not needed
    $header = array( "Column 1 Name","Column 2 Name","Column 3 Name","Column 4 Name","Column 5 Name","Column 6 Name",
                     "Column 7 Name","Column 8 Name","Column 9 Name","Column 10 Name","Column 11 Name","Column 12 Name",
                     "Column 13 Name","Column 14 Name","Column 15 Name"

              );

    //write the header - optional, remove if not needed
    fputcsv ( $out, $header, "," );


    //foreach loop is if you have a multidimensional array- uncomment if it is
    //foreach( $array as $line ) {

        //write each line of the array to csv file
        fputcsv( $out, $array, "," );

    //}

    //close the file
    fclose( $out );

}

?>

Я протестировал приведенный выше код, и он работает как надо. У меня есть заголовок, который записывается в файл вместе со значениями из массива под каждым столбцом.

CSV Output

0
Ibrahim Hafiji 13 Апр 2018 в 21:05