2017-07-05 12 views
-1

Ich nehme Formulardaten und schreibe es in eine CSV-Datei auf dem Server. Ich laufe immer wieder auf die gleichen Probleme und weiß nicht, was ich falsch mache. Entweder wiederholen sich die Spaltenüberschriften mit jedem Eintrag, oder jede zusätzliche Unterschreibung schreibt in dieselbe Zeile. Wie würde ich die $ _POST-Daten nehmen und den csv auffüllen? Ich muss es zweimal erklären, um dies bis zu diesem Punkt funktionieren zu lassen. Hier ist, was ich habe, dass etwas funktioniert.Formatieren von CSV mit PHP

<?php 
    //this is just for the post data, but I'm having to declare the key/values again below. I'm sure this is wrong. 
    $email = $_POST['email']; 
    //rest of the form inputs go here same as $email 
    //some server side validation builds an 'error' array 

    if(!isset($error) { 
     $del = ", "; 
     //this is where I have to repeat the post data key/values 
     $data[1] = $_POST['email']; 
     $data[2] = $_POST['FirstName']; 
     $data[3] = $_POST['LastName']; 
     $data[4] = $_POST['Address']; 
     $data[5] = $_POST['City']; 
     $data[6] = $_POST['Country']; 
     $data[7] = $_POST['State']; 
     $data[8] = $_POST['Phone1']; 
     $data[9] = $_POST['password']; 

     $file = fopen("Registration.csv", "a"); 
     //$data is the column headers that won't behave 
     $data = "Email, First Name, Last Name, Address, City, Country, State, Phone, Password 
     ".implode($del, $data); 
     fwrite($file, $data); 
     fclose($file); 
    } 
?> 
+5

Versuchen [fputcsv] mit (http://php.net/manual/en/function.fputcsv.php), anstatt es zu versuchen, sich selbst zu schreiben. Übergeben Sie zuerst die Header und dann die Daten. – aynber

+0

http://code.stephenmorley.org/php/creating-downloadable-csv-files/ großes Tutorial – clearshot66

+0

Das ist ein gutes Tutorial. Allerdings bekomme ich keine Daten von db, sondern von einem Formular und möchte auf den Server keine Download-Datei schreiben. –

Antwort

2

Gut hilft, versuchen Sie Folgendes:

Dieser Code überprüft, ob die Datei leer ist, und wenn es ist, schreibt die Header.

$headers = "Email, First Name, Last Name, Address, City, Country, State, Phone, Password"; 
if (0 == filesize($file_path)) {   
    fwrite($file, $headers); 
} 

<?php 
 
    $email = $_POST['email']; 
 

 
    if(!isset($error) { 
 
     $del = ", "; 
 
     //this is where I have to repeat the post data key/values 
 
     $data = array(
 
      $_POST['email'], //You can replace this with $email 
 
      $_POST['FirstName'], //You can also replace this with the rest of the variables. It should make it cleaner and faster. 
 
      $_POST['LastName'], 
 
      $_POST['Address'], 
 
      $_POST['City'], 
 
      $_POST['Country'], 
 
      $_POST['State'], 
 
      $_POST['Phone1'], 
 
      $_POST['password'], 
 
     ); 
 

 
     $file = fopen("Registration.csv", "a"); 
 
     
 
     $headers = "Email, First Name, Last Name, Address, City, Country, State, Phone, Password"; 
 
     
 
     if (0 == filesize("Registration.csv")) { 
 
      fwrite($file, $headers . "\n"); 
 
     } 
 
     
 
     fputcsv($file, $data); 
 
     fclose($file); 
 
    } 
 
?>

+0

Es erstellt die Header, aber keine Daten in den Zeilen darunter. –

+0

Schließen, aber die Formulardaten wurden als Kopfzeile wiederholt. So gibt es den richtigen Header, die Formulardaten alle in einer Zeile. Die zweite Zeile hat die Daten unter der richtigen Kopfzeile, und leere Zellen unter der für die Daten in der Kopfzeile wiederholt –

+1

Okay, eine neue Zeile nach den Headern hinzugefügt. Das zweite Problem schwer verstehen ... Könnten Sie das klären? –

0
$myfile = fopen("Registration.csv", "a") or die("Unable to open file!"); 
$data = "Email, First Name, Last Name, Address, City, Country, State, Phone, Password 
    ".implode($del, $data); 

fwrite($myfile, "\n". $txt); 
fclose($myfile); 

Ich hoffe, das

+0

erstellt eine leere CSV mit zwei Zeilen und zwei Spalten –

+0

Sie können implode davon entfernen. –