Ich versuche, eine Reihe von Produkten in eine CSV-Datei zu konvertieren, aber es scheint nicht nach Plan zu gehen. Die CSV-Datei ist eine lange Zeile, hier ist mein Code:
Außerdem erzwingt der Header keinen Download. Ich habe die Ausgabe kopiert und eingefügt und als .csv gespeichert
BEARBEITEN
PROBLEM GELÖST:
Wenn jemand das Gleiche gesucht hat, hat er einen besseren Weg gefunden, es zu tun:
$num = 0;
$sql = "SELECT id, name, description FROM products";
if($result = $mysqli->query($sql)) {
while($p = $result->fetch_array()) {
$prod[$num]['id'] = $p['id'];
$prod[$num]['name'] = $p['name'];
$prod[$num]['description'] = $p['description'];
$num++;
}
}
$output = fopen("php://output",'w') or die("Can't open php://output");
header("Content-Type:application/csv");
header("Content-Disposition:attachment;filename=pressurecsv.csv");
fputcsv($output, array('id','name','description'));
foreach($prod as $product) {
fputcsv($output, $product);
}
fclose($output) or die("Can't close php://output");
Verwenden Sie $info[]=$ergebnis->fetch_array(); Andernfalls werden die letzten Produktdetails angezeigt
– GBD
28. Oktober 2012 um 10:56 Uhr
@JohnnyFaldo: Danke Mann! Genau das, was ich brauchte.
– Cäsar
27. März 2013 um 19:48 Uhr
Hey! Ich weiß, dass dies eine alte Frage ist, aber Sie könnten Ihre eigene Frage beantworten. Es kann Menschen helfen, eine Lösung für ein ähnliches Problem zu finden.
– Gustavo Straube
16. März 2018 um 11:53 Uhr
Bekommt sonst noch jemand die erste Zeile und die ersten beiden Blöcke der zweiten Zeile leer??
– mach2
7. Oktober 2018 um 16:44 Uhr
Martin Lyne
Anstatt Werte aufzuschreiben, sollten Sie verwenden fputcsv().
Dies kann Ihr Problem sofort lösen.
Hinweis aus Kommentar: Ich sollte erwähnen, dass dies eine Datei auf Ihrem Server erstellt, also müssen Sie den Inhalt dieser Datei lesen, bevor Sie sie ausgeben, auch wenn Sie keine Kopie speichern möchten, müssen Sie die Datei „verlinken“. wenn du fertig bist
Ich sollte erwähnen, dass dies eine Datei auf Ihrem Server erstellt, also müssen Sie den Inhalt dieser Datei lesen, bevor Sie sie ausgeben, auch wenn Sie keine Kopie speichern möchten, müssen Sie die Datei dann „verlinken“. du bist fertig.
– Martin Lyne
28. Oktober 2012 um 10:50 Uhr
Danke für die Bearbeitung Vyktor, mein Tippen ist heute schrecklich! Ich bin normalerweise so vorsichtig.
– Martin Lyne
28. Oktober 2012 um 11:08 Uhr
könnte ich den Code bearbeiten, den ich oben habe, um dies zu tun? Da es alle Felder ausgibt und Beispiele für fputcsv im Handbuch verwendet, kann ich es nicht dazu bringen
Zum Abschluss jeder neuen Zeile in Ihrer CSV-Ausgabe.
Ich gehe davon aus, dass der Text begrenzt, aber nicht in die nächste Zeile verschoben wird?
Das ist eine PHP-Konstante. Es bestimmt das korrekte Zeilenende, das Sie benötigen.
Windows verwendet beispielsweise “\r\n”. Ich habe mir damit den Kopf zerbrochen, als meine Ausgabe nicht in eine neue Zeile umbrach.
Wie schreibe ich eine einheitliche neue Zeile in PHP?
In meinem Fall war mein Array mehrdimensional, möglicherweise mit Arrays als Werte. Also habe ich diese rekursive Funktion erstellt, um das Array vollständig auseinanderzublasen:
Da sich die verschiedenen Ebenen meines Arrays nicht gut für das flache CSV-Format eigneten, habe ich eine leere Spalte mit dem Schlüssel des Sub-Arrays erstellt, um als beschreibendes “Intro” für die nächste Datenebene zu dienen. Beispielausgabe:
Sie könnten diese “intro” (beschreibende) Spalte leicht entfernen, aber in meinem Fall hatte ich in jedem Sub-Array sich wiederholende Spaltenüberschriften, dh inbound_leads, so dass ich einen Bruch/Titel vor dem nächsten Abschnitt hatte. Entfernen:
$title .= $key . ",";
$data .= "" . ",";
nach is_array(), um den Code weiter zu komprimieren und die zusätzliche Spalte zu entfernen.
Da ich sowohl eine Titelzeile als auch eine Datenzeile haben wollte, übergebe ich zwei Variablen an die Funktion und terminiere beide mit PHP_EOL, wenn der Aufruf der Funktion abgeschlossen ist:
$title .= PHP_EOL;
$data .= PHP_EOL;
Ja, ich weiß, dass ich ein zusätzliches Komma lasse, aber der Kürze halber habe ich es hier nicht behandelt.
J nui
Ich weiß, dass das alt ist, ich hatte einen Fall, in dem ich den Array-Schlüssel auch in die CSV aufnehmen musste, also habe ich das Skript von Jesse Q aktualisiert, um das zu tun. Ich habe eine Zeichenfolge als Ausgabe verwendet, da implode keine neue Zeile hinzufügen kann (eine neue Zeile habe ich hinzugefügt und sollte wirklich vorhanden sein).
Bitte beachten Sie, dass dies nur mit Einzelwert-Arrays funktioniert (key, value). könnte aber leicht aktualisiert werden, um mehrdimensional zu handhaben (key, array()).
Verwenden Sie $info[]=$ergebnis->fetch_array(); Andernfalls werden die letzten Produktdetails angezeigt
– GBD
28. Oktober 2012 um 10:56 Uhr
@JohnnyFaldo: Danke Mann! Genau das, was ich brauchte.
– Cäsar
27. März 2013 um 19:48 Uhr
Hey! Ich weiß, dass dies eine alte Frage ist, aber Sie könnten Ihre eigene Frage beantworten. Es kann Menschen helfen, eine Lösung für ein ähnliches Problem zu finden.
– Gustavo Straube
16. März 2018 um 11:53 Uhr
Bekommt sonst noch jemand die erste Zeile und die ersten beiden Blöcke der zweiten Zeile leer??
– mach2
7. Oktober 2018 um 16:44 Uhr