MSSQL-Ausgabe exportieren in csv

PHP:
/ Unterscheidung der Spalten beim Exportieren
$j = "0";

echo "<table cellspacing=\"0\" cellpadding=\"0\" align=\"center\" class=\"tableouter2\">";
echo "<tr>";
echo "<td class=\"headline2\" width=\"15%\">" . $name1 . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $name1. "\" /></td>";
echo "<td class=\"headline2\" width=\"15%\">" . $name2 . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $name2. "\" /></td>";
echo "<td class=\"headline2\" width=\"10%\">" . $name3 . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $name3. "\" /></td>";
echo "<td class=\"headline2\" width=\"10%\">" . $name4 . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $name4. "\" /></td>";
echo "<td class=\"headline2\" width=\"10%\">" . $name5 . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $name5. "\" /></td>";
echo "<td class=\"headline2\" width=\"10%\">" . $name6 . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $name6. "\" /></td>";
echo "<td class=\"headline2\" width=\"10%\">" . $name7 . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $name7. "\" /></td>";
echo "<td class=\"headline2\" width=\"10%\">" . $name8 . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $name8. "\" /></td>";
echo "<td class=\"headline2\" width=\"10%\">" . $name9 . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $name9. "\" /></td>";
echo "</tr>";

$j++; //<------------------------- HIIIIEEEER!!

[DB Verbindung und Co]

echo "<tr>";
echo "<td class=\"content2\">" . $dbspalte_1 . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $dbspalte_1 ."\" /></td>";
echo "<td class=\"content2\">" . $dbspalte_2 . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $dbspalte_2 ."\" /></td>";
echo "<td class=\"content2\">" . $dbspalte_3 . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $dbspalte_3 ."\" /></td>";
echo "<td class=\"content2\">" . $dbspalte_4 . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $dbspalte_4 ."\" /></td>";
echo "<td class=\"content2\">" . $dbspalte_5 . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $dbspalte_5 ."\" /></td>";
echo "<td class=\"content2\">" . $multiEKxP . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $multiEKxP ."\" /></td>";
echo "<td class=\"content2\">" . $multiVKxP . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $multiVKxP ."\" /></td>";
echo "<td class=\"content2\">" . $dbspalte_6 . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $dbspalte_6 ."\" /></td>";
echo "<td class=\"content2\">" . $dbspalte_7 . "<input type=\"hidden\" name=\"spalte" . $j . "[]\" value=\"". $dbspalte_7 ."\" /></td>";
echo "</tr>";

$j++;

[...]

echo "</table>";
Ja, tut es, aber halt an der RICHTIGEN Stelle. Wenn du das nicht machst, zählt es natürlich erst ab der zweiten Zeile hoch und die erste und zweite werden mittels implode() zusammengefasst....genau das gleiche Problem wie wir schon mal hatten, weil du alles mit spalte[] bezeichnet hast und nicht wie jetzt mit spalte.$j.[]. Spalte0[] ist jetzt noch die erste und zweite Zeile. Daher an der beschriebenen Stelle das $j++
 
Jetzt wo Du es mir so erklärst, erscheint es mir auch logisch. Es kommt nun zum gewünschten Zeilenumbruch. :)
Ich danke Dir sehr herzlich für Deine Geduld und Hilfe!

Ich habe allerdings noch ein klitze kleines Anliegen. Ich möchte jetzt eine Meldung ausgeben, wenn die Datei erfolgreich angelegt wurde, ebenso wenn sie nicht erfolgreich angelegt werden konnte.
Ersteres habe ich umgesetzt indem ich eine echo bei der if-schleife setze:

PHP:
echo "<div class=\"export\"><strong>Die Datei <em>$exportdatei.csv</em> wurde erfolgreich angelegt.</strong></div>";

Komplett:

PHP:
$exportdatei = $_POST['dateiname'];

if(isset($_POST['make_csv'])) {
  $handle = fopen("./". $exportdatei .".csv","w");
  $j=0;
   while (!empty($_POST['spalte'.$j])) {
    $anzahl = count($_POST['spalte'.$j]);
    $print = implode(";", $_POST['spalte'.$j]) . "\r";
     if($j == 0) {
       $print = $print."\n";
     }
    fwrite($handle,$print);
    $j++;
   }
  fclose($handle);
  echo "<div class=\"export\"><strong>Die Datei <em>$exportdatei.csv</em> wurde erfolgreich angelegt.</strong></div>";
}

Nur wie krieg ich eine Kontrolle hin wenn es nicht klappt mit einer Ausgabe, bitte?
 
PHP:
<?php
$filename = 'test.txt';
$somecontent = "Add this to the file\n";

// Let's make sure the file exists and is writable first.
if (is_writable($filename)) {

   // In our example we're opening $filename in append mode.
   // The file pointer is at the bottom of the file hence 
   // that's where $somecontent will go when we fwrite() it.
   if (!$handle = fopen($filename, 'a')) {
         echo "Cannot open file ($filename)";
         exit;
   }

   // Write $somecontent to our opened file.
   if (fwrite($handle, $somecontent) === FALSE) {
       echo "Cannot write to file ($filename)";
       exit;
   }
   
   echo "Success, wrote ($somecontent) to file ($filename)";
   
   fclose($handle);

} else {
   echo "The file $filename is not writable";
}
?>
Das ist ein Auszug aus der Beschreibung von der Referenzseite zu fwrite() auf php.net. Schau sie dir an, da steht alles dabei, was du brauchst. Jetzt musst du´s nur noch auf dein Problem umschreiben, aber das dürfte wirklich kein Problem sein.
Viel Erfolg.
 
Jop, das hatte ich mir schon vor Tagen angeschaut und auch versucht damit weiterzukommen. Allerdings ohne Erfolg. Wie bereits oben genannt, wird ja eine Meldung ausgespuckt, wenn man den Button gedrückt hat und die Datei angelegt wurde. Der Dateiname wird über eine manuelle Eingabe bestimmt. Ich möchte diesbzgl. noch eine Meldung, die die Datei nicht anlegt, wenn kein Dateiname angegeben ist und gleichzeitig dazu eine Meldung ausgibt.
 
Hier das input-feld:

PHP:
echo "<td class=\"content1\">Dateiname: (ohne Dateiendung) <input class=\"eingabe\" size=\"20\" type=\"text\" name=\"dateiname\" value=\"$exportdatei\"></td>";

Das kennst Du ja schon:

PHP:
$exportdatei = $_POST['dateiname'];
if(isset($_POST['make_csv'])) {
  $handle = fopen("./". $exportdatei .".csv","w");
  $j=0;
   while (!empty($_POST['spalte'.$j])) {
    $anzahl = count($_POST['spalte'.$j]);
    $print = implode(";", $_POST['spalte'.$j]) . "\r";
     if($j == 0) {
       $print = $print."\n";
     }
    fwrite($handle,$print);
    $j++;
   }
  fclose($handle);
  echo "<div class=\"export\"><strong>Die Datei <em>$exportdatei.csv</em> wurde erfolgreich angelegt.</strong></div>";
}

Die Variable $exportdatei holt sich seinen Wert aus dem inputfeld, welches dann der Dateiname ist.
 
Einfachste Lösung:
Am Anfang wo dein <html> Tag steht, folgendes einfügen:
HTML:
<html>
<head>
<title></title>
<script type="text/javascript">
function chkFormular () {
if (document.Formular.dateiname.value == "") 
{
 alert("Bitte einen Dateinamen eingeben");
 document.Formular.Ort.focus();
 return false;
}
}
</script>
</head>
<body>
...
wobei du deinem Fomular noch den Namen "Formular" geben musst.
Dann fügst du in deinem Submit - Button noch
Code:
onsubmit="return chkFormular()"
hinzu.
"Schwierigere" Lösung (falls Leute javascript aus haben):
Geh in deine
PHP:
if(isset($_POST['make_csv']))
Abfrage und fügst
PHP:
&& isset($_POST['dateiname'])
Falls dies nicht der Fall ist, machst du einfach "else" und verweist auf ne andere Seite, oder gehst zurück auf die eigentliche und schreibst rot rein "Dateiname fehlt" oder oder oder ....
 
Von der JavaScript-Lösung möchte ich erstmal Abstand halten.

Wenn ich die Abfrage wie Du gesagt hast erweitere, dann wird jedoch bei jeder normalen Ausgabe der Abfrage selber die Meldung angezeigt, dass das Dateiname-Feld leer ist. Es soll aber nur angezeigt werden, wenn ich den Button gedrückt habe. Das ist ja mein Problem. Hoffe Du verstehst.
 
Ja, verstehe, du hast mit Sicherheit eine If-Abfrage oder sowas vergessen. Mal wieder Code posten bitte (btw: Kannst eigentlich immer machen, dann sparst du dir das "hoffe").
Andererseits wäre auch ein bisschen Eigenkreativität nicht schlecht, da du dabei am meisten lernst. Probier doch selber ein wenig rum bevor du eine Zeile einfügst und wenn die nicht geht gleich hier rein schreibst.
Die Logik hinter deinem Problem ist die absolut gleiche wie dein ganzes Programm. Du hast auch erst eine Tabelle ausgegeben, diese wird verarbeitet mittels Button und wenn über das Drücken des Buttos ein bestimmter Wert gesetzt ist, dann wird es in die Datei geschrieben.
Genauso kannst du das auch mit dem Dateinamen machen. Wenn ein bestimmter Wert gesetzt ist, dann soll was gemacht werden oder wenn nicht, dann eben nicht.
Genau das gleiche wie
PHP:
if(isset($_POST['make_csv']))
nur jetzt eben auf Dateinamen. Probier selber rum, ich bin mir sicher, wenn du halbwegs was mitgenommen hast aus dem, was wir hier die ganze Zeit machen, schaffst du das. Heute werd ich auf jeden Fall nicht mehr posten.

Viel Erfolg
 
Ich habe jetzt ewig rumprobiert, aber es will nicht funktionieren.

Der letzte Stand der Dinge ist folgender:

PHP:
$exportdatei = $_POST['dateiname'];
if(isset($_POST['make_csv']) && isset($_POST['dateiname'])) {
  $handle = fopen("./". $exportdatei .".csv","w");
  $j=0;
   while (!empty($_POST['spalte'.$j])) {
    $anzahl = count($_POST['spalte'.$j]);
    $print = implode(";", $_POST['spalte'.$j]) . "\r";
     if($j == 0) {
       $print = $print."\n";
     }
    fwrite($handle,$print);
    $j++;
   }
  fclose($handle);
  echo "<div class=\"export\"><strong>Die Datei <em>$exportdatei.csv</em> wurde erfolgreich angelegt.</strong></div>";
} 
else (isset($_POST['make_csv']) && empty($_POST['dateiname']) == "") {
  echo "<div class=\"export\"><strong>Bitte geben Sie einen Dateinamen an.</strong></div>";
exit;
}

Theorie: Drückt man den Button "Exportieren" und ist ein Name im Feld "Dateiname" eingegeben, wird die Datei angelegt und eine Meldung erscheint. Drückt man den Button "Exportieren" und es ist aber kein Name im Feld "Dateiname" eingegeben, wird die Datei nicht angelegt und eine Meldung erscheint.
Das ganze praktisch umzusetzen, macht mir anscheinend Schwierigkeiten, oder besser gesagt kommt bei dem jetztigen Code die Meldung, dass das { in der echo-Zeile der else-Schleife unerwartet ist.
Hast Du mir ne Anregung, was ich falsch mache, bitte?
 
Zurück