MSSQL-Ausgabe exportieren in csv

OK, dann halt ganz anders.....
PHP:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> 
<table> 
<tr> 
<td class="content2\"><?php echo $dbspalte_1; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_1; ?>"></td> 
<td class="content2\"><?php echo $dbspalte_2; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_2; ?>"></td> 
<td class="content2\"><?php echo $dbspalte_3; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_3; ?>"></td> 
<td class="content2\"><?php echo $dbspalte_4; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_4; ?>"></td> 
<td class="content2\"><?php echo $dbspalte_5; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_5; ?>"></td> 
<td class="content2\"><?php echo $multiEKxP; ?><input type="hidden" name="spalte[]" value="<?php echo $multiEKxP; ?>"></td> 
<td class="content2\"><?php echo $multiVKxP; ?><input type="hidden" name="spalte[]" value="<?php echo $multiVKxP; ?>"></td> 
<td class="content2\"><?php echo $dbspalte_6; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_6; ?>"></td> 
<td class="content2\"><?php echo $dbspalte_7; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_7; ?>"></td> 
</tr> 
</table> 
<input type="submit" name="make_csv" value="Schreib in Datei"> 
</form>  
 
<?php
if(isset($_POST['make_csv'])) {
    $anzahl = count($_POST['spalte']);
 
    for($i=0;$i<$anzahl;$i++) {
        $print = implode(";", $_POST['spalte']);
    }
 
    $handle = fopen("./meineDatei.csv","w");
    fwrite($handle,$print."\r\n");
    fclose($handle);
}
?>
 
Hallo!

Ich danke Dir. Es kommt jedoch zu einem Fehler, sogar schon wenn ich auf die Abfrage-Datei zugreifen möchte:

Parse error: syntax error, unexpected $end in ***\ausgabe.php on line 217

Der Code sieht jetzt folgendermaßen aus:

PHP:
<!-- Ausgabe der Abfrage -->
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<table cellspacing="0" cellpadding="0" align="center" class="tableouter2">
 <tr>
  <td class="content2"><?php echo $dbspalte_1; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_1; ?>" /></td>
  <td class="content2"><?php echo $dbspalte_2; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_2; ?>" /></td> 
  <td class="content2"><?php echo $dbspalte_3; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_3; ?>" /></td> 
  <td class="content2"><?php echo $dbspalte_4; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_4; ?>" /></td> 
  <td class="content2"><?php echo $dbspalte_5; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_5; ?>" /></td> 
  <td class="content2"><?php echo $multiEKxP; ?><input type="hidden" name="spalte[]" value="<?php echo $multiEKxP; ?>" /></td> 
  <td class="content2"><?php echo $multiVKxP; ?><input type="hidden" name="spalte[]" value="<?php echo $multiVKxP; ?>" /></td> 
  <td class="content2"><?php echo $dbspalte_6; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_6; ?>" /></td> 
  <td class="content2"><?php echo $dbspalte_7; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_7; ?>" /></td>
 </tr>
</table> 
 <input type="submit" name="make_csv" value="Schreib in Datei"> 
</form>  

<?php

if(isset($_POST['make_csv'])) {
    $anzahl = count($_POST['spalte']);
 
    for($i=0;$i<$anzahl;$i++) {
        $print = implode(";", $_POST['spalte']);
    }
 
    $handle = fopen("./dataexport.csv","w");
    fwrite($handle,$print."\r\n");
    fclose($handle);
}

?>

Zeile 217 enthält das </html>-tag.

An fehlenden Klammern kann es nicht liegen, wenn ich das richtig kontrolliert habe, und nichts übersehen habe. Weisst Du wo der Fehler liegt, bitte?
 
Da muss schon irgendwo vorher ein Zeichen fehlen.
Oder kommt danach noch mehr?
Dann könnte auch danach ein Zeichen fehlen.
An dem von mir geposteten Code liegt es jedenfalls nicht..... der funktioniert bei mir wunderbar.
 
Stimmt, Du hattest Recht. Eine } hatte gefehlt.

Allerdings, klappt das jetzt nicht mehr mit der Abfrage bzw. der Ausgabe. Es wird je Spalte nur noch der letzte Datensatz ausgespuckt und nicht alle.
Wie kann ich dem nun bitte vorbeugen?

/EDIT: Hm, je nachdem wo ich die } setze, ändert das die Ausgabe. Momentan ist es so, dass jeder Datensatz ausgegeben wird in einer Zeile, pro Zeile aber der Button "Schreib in Datei" angezeigt wird. Ich möchte es aber unter der gesamten HTML-Tabelle nur einmal angezeigt haben.
Wo soll ich jetzt die } hinsetzen, bitte? Kannst Du mir weiterhelfen? Ich poste hier mal fast den gesamten Code des Scriptes:

PHP:
<table cellspacing="0" cellpadding="0" align="center" class="tableouter2">
 <tr>
  <td class="headline2" width="15%">Kunden-Nr.</td>
  <td class="headline2" width="15%">Art.-Nr.</td>
  <td class="headline2" width="10%">Menge EK</td>
  <td class="headline2" width="10%">Menge VK</td>
  <td class="headline2" width="10%">Preis (in &euro;)</td>
  <td class="headline2" width="10%">MengeEKxP</td>
  <td class="headline2" width="10%">MengeVKxP</td>
  <td class="headline2" width="10%">Lieferantenname</td>
  <td class="headline2" width="10%">Monat-Jahr</td>
 </tr>
</table>

<?php

// Verbindung zur Datenbank herstellen
$dbverbindung = mssql_connect ($sqlhost, $sqluser, $sqlpass) or die (mssql_get_last_message());
mssql_select_db ($database, $dbverbindung) or die (mssql_get_last_message());

// Alles wird selektiert
// Gleichzeitig die Grundlage fuer alle anderen Abfragen
$query = "SELECT * FROM testtabelle";

// Ist eines der Textfelder gesetzt ...
if(!empty($kdnr) || !empty($artikelnr) || !empty($lieferant) || !empty($von) || !empty($bis)){
    $query .= " WHERE ";

    // ... dann wird der Abfrage-String erweitert
    if(!empty($kdnr))
        $query .= " testspalte = '$kdnr' AND ";

    if(!empty($artikelnr))
        $query .= " testspalte_2 = '$artikelnr' AND ";

    if(!empty($lieferant))
        $query .= " testspalte_6 = '$lieferant' AND ";

    if ((!empty($von)) && (!empty($bis)))
        $query .= " testspalte_7 >= '$von' AND testspalte_7 <= '$bis' AND ";

    // Abfrage-String wird gekuerzt um das AND am Schluss zu entfernen
    $query = substr($query, 0, strlen($query)-4);
}

$sql = mssql_query($query) or die (mssql_get_last_message());

// Auslesen des Ergebnisses
while ($result = mssql_fetch_object($sql)){

//---> MS SQL Datenbank Spaltennamen <---\\
 $dbspalte_1 = $result -> testspalte;    // Spaltenname von KundenNr
 $dbspalte_2 = $result -> testspalte_2;  // Spaltenname von ArtikelNr
 $dbspalte_3 = $result -> testspalte_3;  // Spaltenname von Menge_Ek
 $dbspalte_4 = $result -> testspalte_4;  // Spaltenname von Menge_Vk
 $dbspalte_5 = $result -> testspalte_5;  // Spaltenname von Preis
 $dbspalte_6 = $result -> testspalte_6;  // Spaltenname von LiefName
 $dbspalte_7 = $result -> testspalte_7;  // Spaltenname von MeldDatum
//---> MS SQL Datenbank Spaltennamen <---\\

// Multiplikation zw. MengeEK bzw. MengeVK und Preis in jeweils einer neuen Variable
$multiEKxP = $dbspalte_3 * $dbspalte_5;
$multiVKxP = $dbspalte_4 * $dbspalte_5;

// Addition der Produkte aus jeweils einer Spalte
// Produkte aus MengeEK x Preis werden in ein Array eingelesen
$addition1[] = $multiEKxP;
// Alle im Array enthaltenen Zahlen werden addiert
$summe1 = array_sum($addition1);
// Produkte aus MengeVK x Preis werden in ein Array eingelesen
$addition2[] = $multiVKxP;
// Alle im Array enthaltenen Zahlen werden addiert
$summe2 = array_sum($addition2);


?>

<!-- Ausgabe der Abfrage -->
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<table cellspacing="0" cellpadding="0" align="center" class="tableouter2">
 <tr>
  <td class="content2"><?php echo "$dbspalte_1"; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_1; ?>" /></td>
  <td class="content2"><?php echo "$dbspalte_2"; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_2; ?>" /></td> 
  <td class="content2"><?php echo "$dbspalte_3"; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_3; ?>" /></td> 
  <td class="content2"><?php echo "$dbspalte_4"; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_4; ?>" /></td> 
  <td class="content2"><?php echo "$dbspalte_5"; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_5; ?>" /></td> 
  <td class="content2"><?php echo "$multiEKxP"; ?><input type="hidden" name="spalte[]" value="<?php echo $multiEKxP; ?>" /></td> 
  <td class="content2"><?php echo "$multiVKxP"; ?><input type="hidden" name="spalte[]" value="<?php echo $multiVKxP; ?>" /></td> 
  <td class="content2"><?php echo "$dbspalte_6"; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_6; ?>" /></td> 
  <td class="content2"><?php echo "$dbspalte_7"; ?><input type="hidden" name="spalte[]" value="<?php echo $dbspalte_7; ?>" /></td>
 </tr>
</table> 
 <input type="submit" name="make_csv" value="Schreib in Datei"> 
</form>  

<?php

if(isset($_POST['make_csv'])) {
    $anzahl = count($_POST['spalte']);
 
    for($i=0;$i<$anzahl;$i++) {
        $print = implode(";", $_POST['spalte']);
    }
 
    $handle = fopen("./dataexport.csv","w");
    fwrite($handle,$print."\r\n");
    fclose($handle);
}

?>

<table cellspacing="0" cellpadding="0" align="center" class="tableouter3">
 <tr>
  <td width="60%"></td>
  <td class="content3" width="10%">&sum;: <?php echo "$summe1" ?></td>
  <td class="content4" width="10%">&sum;: <?php echo "$summe2" ?></td>
  <td width="20%"></td>
 </tr>
</table>

<?php
}

mssql_close() or die (mssql_get_last_message());
?>

Das Problem liegt hier:

PHP:
// Auslesen des Ergebnisses
while ($result = mssql_fetch_object($sql)){

bzw. hier:

PHP:
}

mssql_close() or die (mssql_get_last_message());

oder besser gesagt an der }.
 
Zuletzt bearbeitet:
Die Klammer lässt du schon dort, wo sie in deinem letzten Post war. Natürlich ändert sich die Ausgabe je nach Klammerposition, da du die HTML - Tags in ner while-Schleife hast. Klar.
Ausserdem ist dann noch ein bisschen was im Argen. Wenn ich dich richtig verstanden habe, willst du die komplette Tabelle als csv speichern. Daher:
PHP:
<!-- Ausgabe der Abfrage -->
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<table cellspacing="0" cellpadding="0" align="center" class="tableouter2">
Das kommt VOR
PHP:
// Auslesen des Ergebnisses
while ($result = mssql_fetch_object($sql)){
Dementsprechend kommt NACH
PHP:
<?php
}

mssql_close() or die (mssql_get_last_message());
?>
folgendes:
PHP:
</table> 
 <input type="submit" name="make_csv" value="Schreib in Datei"> 
</form>
Warum?
1. Du willst die Tabelle zeilenweise aufbauen und nicht ständig Tabellen aufbauen.
2. Du willst die komplette Tabelle verschicken, daher muss alles aussenrum in ein Form Tag. Wenn du zig <form>-Tags hast, kennt sich "submit" nicht aus, was es schicken soll.

So, viel Erfolg und sag Bescheid wie´s läuft.
 
Klasse! Ich danke Dir. Es lag wie Du bereits gesagt hast daran, dass das

PHP:
</table> 
 <input type="submit" name="make_csv" value="Schreib in Datei"> 
</form>

vor und nicht nach dem stand:

PHP:
}

mssql_close() or die (mssql_get_last_message());

Es gibt nur ein Manko was die Datei betrifft, die angelegt wird und in der die Datensätze exportiert werden: Es wird alles in einer Zeile gespeichert und dargestellt wenn ich die csv mit MS Excel aufrufe. Ich hätte es aber gerne von der Ansicht in der csv-Datei so wie in der HTML-Tabelle: 9 Spalten mit x beliebiegen Zeilen, je nach Datensätzen.
Kann ich das auch noch umsetzen? Wenn ja, wie bitte?
 
Zuletzt bearbeitet:
PHP:
$print = implode(";", $_POST['spalte']);
änderst du in
PHP:
$print = implode(";", $_POST['spalte']) . "\n";
das '\n' ist ein Steuerzeichen und bedeutet Zeilenumbruch. Falls das nicht geht (was ich mir nicht vorstellen kann), :google: Zeilenumbruch php oder schei bei php.net nach (die Seite gibts auch auf deutsch).
 
Das Steuerzeichen ändert leider nichts am Sachverhalt: Der Inhalt der exportierten csv-Datei wird immer noch in einer Zeile ausgegeben und nicht wie gewünscht wie in der HTML-Tabelle.
Ich habe auch auf diversen Seiten nachgeschaut, überall wird das o.g. Steuerzeichen als Zeilenumbruch bei PHP genannt, von anderen Steuerzeichen/Befehlen, die das selbe bewirken, ist dort jedoch nicht die Rede.
 
Ich hab mal bei :google: "Zeilenumbruch php" eingegeben und folgende Möglichkeiten gefunden. Probier die doch bitte einfach aus, irgendwas sollte echt gehen, ansonsten nochmal Code posten bitte:
1. '\n' statt "\n"
2. "\r\n" oder '\r\n'

Auf welchem Betriebssystem programmierst du (bzw. Server) und mit was schaust du dir die txt-Files an?
 
Hm, es klappt immer noch nicht.
Betriebssystem ist WindowsXP. Die csv-Datei schau ich mir mit MS Office Excel an. Ist hier alles lokal.

PHP:
//Formular wird verarbeitet fuer den Export
if(isset($_POST['make_csv'])) {
    $anzahl = count($_POST['spalte']);

    for($i=0;$i<$anzahl;$i++) {
        $print = implode(";", $_POST['spalte']) . "\r\n";
    }

    $handle = fopen("./dataexport.csv","w");
    fwrite($handle,$print."\r\n");
    fclose($handle);
}
 
Zurück