ugrás a tartalomhoz

CSV file írása php ben.

talaca · 2010. Dec. 21. (K), 15.39
Sziasztok!
Egy hírlevél rendszer fejlesztésén dolgozom és a következő problémánál akadtam el.
Szeretném az adatbázisból a feliratkozók listáját exportálni csv formában.
A dolog működik de hibásan. Ha csak néhány sor van az adatbázisban (2-3) minden ok!
De ha több akkor idézőjeleket tesz bizonyos helyekre és összetöri a sorokat.
Mi lehet a hiba?
Itt a kód:

// csatlakozás az adatbázishoz
if(isset($_POST['submit'])){
$value = $_POST['mit'];//adat típus kiválasztása (minden adat vagy csak név és cím)
$stamp = date('Y-m-d');
$filen = 'cimlista_'.$stamp.'.csv'; //file neve
if($fp = @fopen($filen, 'w')){
$query=mysql_query("SELECT $value FROM feliratkozok");
while ($beir=mysql_fetch_row($query)){
fputcsv($fp, $beir);
}
fclose($fp);
$tartalom = "<br><br><br>A <i><a href= $filen> $filen </a></i> létrehozása sikeres: <a href=$filen> Letöltés</a>";
}
else{
$tartalom = "Hoppá! Hiba történt, nem tudom az adatokat exportálni!";
}
}
else{
$tartalom = '
<h3>Felhasználók exportálása.</h3>
<p>Milyen adatokat szeretnél exportálni?</p><br>
<form name="export" method="post" action="export.php">
<input type="radio" name="mit" value="neved, emailcim" checked> &nbsp; Nevet és email címet.<br><br>
<input type="radio" name="mit" value="*"> &nbsp; Minden adatot.<br><br>
<input type="submit" name="submit" value=" >> Kérem a Címlistát << ">
</form>';
}
echo $tartalom;
?>



Az eredmény pedig nagyobb listák esetén ilyen.

era,emarketing.tari##kukac##gmail.com
Ágnes,"agnes.karsai##kukac##engelvoelkers.com
"
laci,twb.team##kukac##gmail.com
Attila,"a.marton##kukac##t-online.hu
"
laci,mini61##kukac##freemail.hu
valaki,laci.laszlo##kukac##gmail.com
Administrator,"twb.team##kukac##gmail.com
"
era,drupal.epit##kukac##gmail.com
valaki,"valaki##kukac##valaki.hu
"
"sasa tz55",sasa##kukac##sasa.com
tata,"tata##kukac##tata.hu
"
satua,hermina##kukac##gari.com
tari,emarketing.tari##kukac##gmail.com
valaki,"valaki##kukac##123.hu
"


Tud valaki segíteni? Esetleg egy másik megoldás ajánlásával?
 
1

1. Használj kód színezőt,

rrd · 2010. Dec. 21. (K), 16.02
1. Használj kód színezőt, mert így jó eséllyel senki sem fogja venni magának a fáradtságot, hogy kibogozza a kódodat.
2. Ugye ezek amiket itt beírtál nem valódi emailcímek?
3. Ha már úgyis megvannak sql-ben az adatok akkor miért nem exportálsz mondjuk egy phpmyadmin felületről?
4. nézz be az adatbázisba, mert szerintem már eleve ott is idézőjelekkel és újsor karakterekkel vannak benne az adatok.
5. jobb híján str_replace-n ereszd át őket mielőtt a csv-be tennéd.
2

Először is légy szíves te

kuka · 2010. Dec. 21. (K), 16.05
Először is légy szíves te segíts rajtunk: használd a kód színezőt ([colorer] BBCode) és használj bekezdéseket.

Szerintem pedig az adatok már íráskor el lettek lőve, mert valószínűleg az állományból való feltöltéskor bent maradtak a sorvégjelek. Amikor meg nem teszi, valószínűleg az illető mail cím másképpen (például webes kezelőfelületről) lett felvíve.

Ebben az esetben legegyszerűbb ha kirúgatod a sorvégjeleket, utána már jól fog működni a szkripted:

update feliratkozok set emailcim=replace(replace(emailcim,'\n',''),'\r','');
Halvány megjegyzés, hogy a kódodat gondold újra, mert így elképesztően sérülékeny.