简体   繁体   中英

unable to generate .csv file : PHP

Actually I have no idea how to generate a .csv file.I have gone through various e-notes but still not getting.

What I want to do?

I have written a piece of code to echo " partner_name " and " link " but these need to be put into a formDetails.csv file.

$result = mysql_query(
    "SELECT form_id, partner_name 
     FROM `ef_kabaadkhana`.`ef_form_master_v1` 
     WHERE active = 1 AND listed = 1;"
);

while ($formDetails = mysql_fetch_assoc($result)) {
    $partner_name       = $formDetails['partner_name'];
    $formId             = $formDetails['form_id'];
    $slugifyPartnername = slugify($partner_name);
    $partner_link       = "http://myforms.com/form/{$formId}/{$slugifyPartnername}";
    echo $partner_name . '=>' . $partner_link, "\n";
}

function slugify($text) {
    $text = preg_replace('~[^\\pL\d]+~u', '-', $text);
    $text = trim($text, '-');
    if (function_exists('iconv'))
        $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
    $text = strtolower($text);
    $text = preg_replace('~[^-\w]+~', '', $text);
    if (empty($text))
        return 'n-a';
    return $text;
}

What it does?

It simply takes form_id and partner_name from ef_form_master_v1 table. The $partnerName and $partnerlink are defined and displayed accordingly.

But Instead of echoing $partnerName and $partnerlink , I want to put these array of parameters in a CSV file named formDetails.csv .

The documentation on fputcsv is pretty clear, however I will provide an example below:

$handle = fopen('/path/to/formDetails.csv', 'w');

while(<your query loop>) {
    $write = array($partner_name, $partner_link);
    fputcsv($handle, $write);
}

fclose($handle);
$fp = fopen('formDetails.csv', 'w');
while ($formDetails = mysql_fetch_assoc($rs)) 
{
    $partner_name=$formDetails['partner_name'];
    $formId=$formDetails['form_id'];
    $slugifyPartnername=slugify($partner_name);
    $partner_link="http://myforms.com/form/{$formId}/{$slugifyPartnername}";
    echo $partner_name.'=>'.$partner_link;
    fputcsv($fp, array($partner_name, $partner_link));
}
fclose($fp);

Make sure formDetails.csv exists in current directory or path you specify.

First you need to create the file, I suggest in form of a SplFileObject :

$csvFile = new SplFileObject('formDetails.csv', 'w+');

You might also want to create a first line containing the column-labels, this works by using an array with an entry for each column and the SplFileObject::fputcsv method:

$cvsFile->fputcsv(array('Partner', 'Link'));

Then later on, instead of (or next to for debugging purposes):

echo $partner_name . '=>' . $partner_link, "\n";

You output it into that file:

$csvFile->fputcsv(array($partner_name, $partner_link));

And that's it. The view from above:

$result = mysql_query(
    "SELECT form_id, partner_name 
     FROM `ef_kabaadkhana`.`ef_form_master_v1` 
     WHERE active = 1 AND listed = 1;"
);

### Create CSV File ###
$csvFile = new SplFileObject('formDetails.csv', 'w+');
$cvsFile->fputcsv(array('Partner', 'Link'));


while ($formDetails = mysql_fetch_assoc($result)) {
    $partner_name       = $formDetails['partner_name'];
    $formId             = $formDetails['form_id'];
    $slugifyPartnername = slugify($partner_name);
    $partner_link       = "http://myforms.com/form/{$formId}/{$slugifyPartnername}";
    echo $partner_name . '=>' . $partner_link, "\n";

    ### Output each row to CSV File ###
    $csvFile->fputcsv(array($partner_name, $partner_link));    
}

function slugify($text) {

    ...

hope my example will helps (customer wanted csv-files for Excel compatibility) :

$data = $this->_getParam('data'); // getting array of some values
$text = $data[0] . ";";
$text .= $data[1] . ";";
$text .= "\"" . $data[2] . " (N:" . $data[3] . ")" . "\";";
$text .= $data[3];

$ext = '.csv';
$filename = date("Y-m-d") . $ext;
$way = "files/{$filename}";

$fp = fopen($way, "a");
fwrite($fp, $text . PHP_EOL);
fclose($fp);

if there is no such csv-file it will create one.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM