Ankündigung

Einklappen
Keine Ankündigung bisher.

MySql-Daten als CSV

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySql-Daten als CSV

    Hallo!
    Ich hab ein großes Problem. Ich hab mich schon doof gegooglt, aber nicht meinen Fehler gefunden.

    ich möchte datensätze in eine csv-datei exportieren. wenn ich nun mir die datensätze ausgeben lasse, funzt es wunderbar. beim erstellen der csv-datei, wird die datei erstellt und die spaltennamen eingetragen, aber nicht die datensätze!


    Die abfrage mit ausgabe.
    Code:
    $sql_el="SELECT e.Name, e.Vorname, e.Strasse, e.Ort, e.PLZ, e.Hnr as Hausnr, Count(*) as Anzahl, f.CD_zus as Zusatz FROM el_daten_pers e INNER JOIN tech_daten t ON t.el_id= e.EID LEFT JOIN el_daten_fach f ON f.el_id=e.EID WHERE t.cd=0 GROUP BY t.el_id, e.Name";
    $res_el= mysql_db_query("eltool", $sql_el);
    while($edaten= mysql_fetch_assoc($res_el)){
                  echo "<tr><td class='log_text'>".$edaten["Name"]."</td>";
                  echo "<td class='log_text'>".$edaten["Vorname"]."</td>";
                  echo "<td class='log_text'>".$edaten["Strasse"]."</td>";
                  echo "<td class='log_text'>".$edaten["Hausnr"]."</td>";
                  echo "<td class='log_text'>".$edaten["PLZ"]."</td>";
                  echo "<td class='log_text'>".$edaten["Ort"]."</td>";
                  $wieviele= $edaten["Anzahl"] + $edaten["Zusatz"];
                  echo "<td class='log_text'align='center'>".$wieviele."</td>";
    }
    nun das erstellen der csv
    Code:
    $file_name= "C:tmp\data.csv";
    
    
    $i=0;
    
    $felder=mysql_num_fields($res_el);
    $fp=fopen($file_name,"w+");
    
    while ($i < mysql_num_fields($res_el)){
        $feldnamen = mysql_field_name($res_el, $i);
        $i++;
        createCSV($fp, $feldnamen, ",");
    }
    while ($data = mysql_fetch_row($res_tech)){
         fputCSV($fp, $data, ",");
    }
    fclose ($fp);
    
    
    function createCSV ($fp, $val2, $deliminator=",") {
    $line2 = "";
    {
             $val2 = str_replace("\r\n", "\n", $val2);
             $line2 .= $val2.$deliminator;
    }
    return fputs($fp, $line2);
    $line2 .= "\n";
    }
    
    
    
    
    function fputCSV ($fp, $array, $deliminator=",") {
    
    $line = "";
    foreach($array as $val)
    {
        $val = str_replace("\r\n", "\n", $val);
        if(ereg("[$deliminator\"\n\r]", $val)) {
           $val = '"'.str_replace('"', '""', $val).'"';
        }
        $line .= $val.$deliminator;
    }
    $line = substr($line, 0, (strlen($deliminator) * -1));
    $line .= "\n";
    return fputs($fp, $line);
    }
    kann mir vielleicht irgendjemand sagen, warum ich die eigentlichen daten der Abfrage nicht in die csv exportiert bekomme??

    vielen dank schon mal!

  • #2
    Re: MySql-Daten als CSV

    Zitat von blub45
    kann mir vielleicht irgendjemand sagen, warum ich die eigentlichen daten der Abfrage nicht in die csv exportiert bekomme??
    Ich vermute mal, daß Du nach dem Anzeigen der Datensätze den Datensatzzeiger nicht wieder auf 0 stellst. Somit ist nix mehr zum Ausgeben da, wenn Du das csv File basteln möchtest.

    http://de.php.net/mysql_data_seek

    Außerdem solltest Du das
    PHP-Code:
    $file_name"C:tmp\data.csv"
    durch das
    PHP-Code:
    $file_name"C:/tmp/data.csv"
    ersetzen. Sonst wird daraus c:tmp.data.csv.

    Kommentar


    • #3
      Ich vermute mal, daß Du nach dem Anzeigen der Datensätze den Datensatzzeiger nicht wieder auf 0 stellst. Somit ist nix mehr zum Ausgeben da, wenn Du das csv File basteln möchtest.
      aber wenn ich das Ergebnis der Abfrage in
      Code:
      $res_el
      gespeichert jedesmal in ein neues array einlese mit
      Code:
      mysql_fetch_assoc($res_el) 
      oder
      mysql_fetch_row($res_el)
      dann muss ich doch nicht jedesmal den Ergebniszeiger neu setzen oder?!
      wenn doch, wie denn?!

      Kommentar


      • #4
        Zitat von blub45
        Ich vermute mal, daß Du nach dem Anzeigen der Datensätze den Datensatzzeiger nicht wieder auf 0 stellst. Somit ist nix mehr zum Ausgeben da, wenn Du das csv File basteln möchtest.
        aber wenn ich das Ergebnis der Abfrage
        mit mysql_data_seek($resurce, 0) zurücksetze, reicht ein Query aus.

        Kommentar


        • #5
          ich mache nur eine Abfrage.
          Code:
          $sql_el="SELECT e.Name, e.Vorname, e.Strasse, e.Ort, e.PLZ, e.Hnr as Hausnr, Count(*) as Anzahl, f.CD_zus as Zusatz FROM el_daten_pers e INNER JOIN tech_daten t ON t.el_id= e.EID LEFT JOIN el_daten_fach f ON f.el_id=e.EID WHERE t.cd=0 GROUP BY t.el_id, e.Name"; 
          $res_el= mysql_db_query("eltool", $sql_el);
          jetzt ist das ergebnis in $res_el gespeichert.
          diese daten lasse ich mir im php-script ausgeben. wenn der user einen Button betätigt, soll diese ausgegebene liste exportiert werden können.
          zur ausgabe auf der seite kommt
          Code:
          while($edaten= mysql_fetch_assoc($res_el)){ .... }
          danach
          verwende ich
          Code:
          while ($i < mysql_num_fields($res_el)){  ...} while ($data = mysql_fetch_row($res_tech)){ ...}
          warum soll ich denn jedesmal ne neue Abfrage starten? $res_el ist doch im ganzen script vewendbar, oder nicht?
          ich steh grad voll auf´m schlauch!

          Kommentar


          • #6
            Zitat von blub45
            warum soll ich denn jedesmal ne neue Abfrage starten? $res_el ist doch im ganzen script vewendbar, oder nicht?
            Ja klar, mit dem pointer rasselst Du mit while() durch die Datensätze bis zum Letzten. Und wenn Du diesen Pointer noch mal verwenden willst, mußt Du ihn zurücksetzen.

            Kommentar


            • #7
              Code:
              for ($i = mysql_num_rows($res_el) - 1; $i >= 0; $i--) {
                  if (!mysql_data_seek($res_el, $i)) {
                      echo "Cannot seek to row $i: " . mysql_error() . "\n";
                      continue;
                  }
              
                  if (!($row = mysql_fetch_assoc($res_el))) {
                  fputCSV($fp, $row, ",");
                      continue;
                  }
              
              
              }
              passt des so?

              so stehen die Daten auch nicht drinne!

              Kommentar


              • #8
                Zitat von blub45
                passt des so?
                NEIN.

                PHP-Code:
                $res mysql_query (.....);

                # 1. while Schleife 
                while ($row mysql_fetch_assoc($res))
                {
                # Anzeigen
                }

                # Datensatzzeiger zurücksetzen
                mysql_data_seek($res0)

                # 2. while Schleife
                while  ($row mysql_fetch_assoc($res))
                {
                # CSV File basteln
                }

                # Resource löschen
                mysql_free_result ($res); 

                Kommentar

                Lädt...
                X