SQL Ausgabe in CSV mit Timestamp

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

  • SQL Ausgabe in CSV mit Timestamp

    Hallo PHP-User,

    ich habe ein Problem und hoffe hier auf Hilfestellung.

    Ich habe in einer Datenbank einige Angaben zu Besucher,
    die meine Homepage besuchten und zu jedem LOG gibt es einen Unix-Timestamp, so daß ich weis, wann dieser LOG enstanden ist und natürlich wann der Besucher auf meiner Page war.

    Nun möchte ich den Inhalt der Tabelle in eine CSV-Exportieren,
    jedoch nur für den letzten Monat und da ist das Problem irgendwie klappt das nicht.

    Das Script :
    PHP-Code:
    <TITLE>Export</TITLE>
    </
    HEAD>
    <
    script language="php">

     
    // ... Verbindung aufbauen, auswählen einer Datenbank
           
    $link mysql_connect("xx""xx""xx")
           or die(
    "Keine Verbindung möglich!");
           print 
    "Verbindung zum Datenbankserver erfolgreich ... gelesener Datensatz :";
           
    mysql_select_db("xx")
           or die(
    "Auswahl der Datenbank fehlgeschlagen");

    function 
    csv_export($id) {              

        
    $monat date("m"); $jahr date("Y");
        
    $monat $monat 1;
        if (
    $monat == 0) {
            
    $monat 12;
            
    $jahr $jahr 1;
        }
        switch (
    $monat) {
        case 
    1:
            
    $lastday 31;
            break;
        case 
    2:
            
    $lastday 28;
            if (
    $jahr == 0){
                
    $lastday 29;
            }
            if (
    $jahr 400 == 0) {
                
    $lastday 29;
            }
            if (
    $jahr 100 == 0) {
                
    $lastday 28;
            }
            break;
        case 
    3:
            
    $lastday 31;
            break;
        case 
    4:
            
    $lastday 30;
            break;
        case 
    5:
            
    $lastday 31;
            break;
        case 
    6:
            
    $lastday 30;
            break;
        case 
    7:
            
    $lastday 31;
            break;
        case 
    8:
            
    $lastday 31;
            break;
        case 
    9:
            
    $lastday 30;
            break;
        case 
    10:
            
    $lastday 31;
            break;
        case 
    11:
            
    $lastday 30;
            break;
        case 
    12:
            
    $lastday 31;
            break;
        default:
            
    $lastday 30;
        }

        
    $first_of_month mktime (0,0,0,$monat,1,$jahr);
        
    $last_of_month mktime (23,59,59,$monat,$lastday,$jahr);

        if (
    $monat 10$monat "0".$monat;

        
    $id 85245

        $filename 
    $id."-".$monat.$jahr.".csv";
        
    $filepath "/usr/local/httpd/htdocs/kunden/web625/html/counter/counterlogs/";     
        
    $fp $filepath.$filename;

        
    $sql  "SELECT * INTO OUTFILE \"".$fp;
        
    $sql .= "\" FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' from pphl_85245_logs WHERE time >= $first_of_month AND time <= $last_of_month ";
        
    $res mysql_qry($sql);
    }
    </
    script>
    </
    BODY>
    </
    HTML
    Das Verzeichniss 'counterlogs' wurde mit CHMOD 777 eingestellt
    jedoch bleibt das Verzeichnis leer und ich bekomme keine Fehlermeldung !

    B I T T E - helft mir, denn ich bin am Verzweifeln :-(

    Gruß Manuela

  • #2
    kann es sein, dass Du in der letzten Zeile ein Buchstabe (e) vergessen hast?
    Ansonsten kannst Du auch mal die switch kleiner machen...
    case 2:
    $lastday = 28;// Schaltjahre beachten...
    break;
    case 4,6,9,11:
    $lastday = 30;
    break;
    default:
    $lastday = 31;
    break;
    Zuletzt geändert von MelloPie; 20.11.2002, 20:28.
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Hallo,

      danke für die schnelle Antwort,
      jedoch funktioniert es immer noch nicht.

      Es tut mir leid, aber ich bin Neuling und in den Büchern die ich habe
      'DataBecker' steht darüber nichts drin.

      Schau selber Link

      Gruß Manuela

      Kommentar


      • #4
        parse error in line 29, was steht denn da drin?
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          case 2:
          $lastday = 28;
          break;
          case 4,6,9,11: // Zeile 29
          $lastday = 30;
          break;
          default:
          $lastday = 31;
          break;

          Upps, hatte ich wohl vergesen die Seite zu aktualisieren,
          denn der Fehler kam bei mir nicht **grins**

          Gruß Manuela

          Kommentar


          • #6
            ups das stimmt wohl syntaktisch nicht...
            muss heissen:
            case 4:
            case 6:
            case 9:
            case 11:
            $lastday = 30;
            break;
            Beantworte nie Threads mit mehr als 15 followups...
            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

            Kommentar


            • #7
              Jetzt ohne Fehlermeldung, aber mit einem leeren Order.

              So weit ich weis ist das mit dem absoluten Pfad doch richtig,
              und das Zusammensetzen des Filenamens auch.

              Also woran liegt das, muß auf dem Server was spezielles installiert sein,
              denn dieses Script ist sehr wichtig für mich, damit die Datenmenge der
              Datenbank nicht ausreisst.

              Denn mit dem Ausdruck, kann ich dann die vergangenen Monate löschen !

              Gruß Manuela

              Kommentar


              • #8
                Setz mal deine datums variablen in '' einfache Anführungszeichen innerhalb vom SQL und mach mal ein or die(mysql_error()) hinter dein mysql_query und lass Dir auf alle Fälle noch mal $sql ausgeben...
                Zuletzt geändert von MelloPie; 20.11.2002, 22:42.
                Beantworte nie Threads mit mehr als 15 followups...
                Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                Kommentar


                • #9
                  O.K. geändert

                  ...

                  PHP-Code:
                      $first_of_month mktime (0,0,0,$monat,1,$jahr);
                      
                  $last_of_month mktime (23,59,59,$monat,$lastday,$jahr);

                      if (
                  $monat 10$monat "0".$monat;

                      
                  $id 85245;
                      
                      
                  $filename $id."-".$monat.$jahr.".csv";
                      
                  $filepath "/usr/local/httpd/htdocs/kunden/web625/html/counter/counterlogs/";     // Dateinamen und -pfad generieren
                      
                  $fp $filepath.$filename;

                      
                  // Table-Name zusammenbauen

                      
                  $sql  "SELECT * INTO OUTFILE \"".$fp;
                      
                  $sql .= "\" FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' from pphl_85245_logs WHERE time >= "$first_of_month" AND time <= "$last_of_month" "// line 84
                      
                  $res mysql_qry($sql)
                      or die(
                  mysql_error());
                      echo 
                  $res;
                  }


                  </
                  script>

                  </
                  BODY>
                  </
                  HTML
                  Folgende Fehlermeldung :
                  Parse error: parse error, unexpected T_VARIABLE in /usr/local/httpd/htdocs/kunden/web625/html/counter/backup.php on line 84

                  Wenn ich statt " , ' setzte bleibt wieder alles leer und wird auch nichts ausgegeben.

                  Gruß Manuela
                  Zuletzt geändert von manuelakersten; 20.11.2002, 23:53.

                  Kommentar


                  • #10
                    Du solltest doch auch einfache ' Anführungszeichen in Deinem SQL verwenden und nicht doppelte "
                    Beantworte nie Threads mit mehr als 15 followups...
                    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                    Kommentar


                    • #11
                      Nicht gleich meckern habe ich doch versucht und auch geschrieben,
                      das dann auch alles leer bleibt und nicht mal eine Bildschirmausgabe erfolgt.

                      Gruß Manuela

                      Kommentar


                      • #12
                        ich mecker doch gar net aber mach mal nicht echo $res sondern echo $sql :-)
                        Beantworte nie Threads mit mehr als 15 followups...
                        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                        Kommentar


                        • #13
                          Ist ja auch nicht so gemeint gewesen **grins**

                          Tut sich auch nichts, ich habe mal die Monatsangabe raus genommen,
                          selbe Erscheinungsbild - NICHTS !

                          Ich weis nicht irgendwie habe ich immer Pech, schon beim letzten Problem#
                          gab es keine Lösung, aber daß dürfte eigentlich zu machen sein.

                          Gruß Manuela

                          Kommentar


                          • #14
                            Argh!
                            sag mal aus welcher Tabelle versuchst Du denn in das file zu schreiben???

                            SELECT * INTO OUTFILE 'filepath' FROM TABELLE;!!!!!!!!!!!!!!!!
                            ist die richtige Syntax
                            Beantworte nie Threads mit mehr als 15 followups...
                            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                            Kommentar


                            • #15
                              Steht doch drin

                              PHP-Code:
                              $filename $id."-".$monat.$jahr.".csv";
                                  
                              $filepath "/usr/local/httpd/htdocs/kunden/web625/html/counter/counterlogs/";     // Dateinamen und -pfad generieren
                                  
                              $fp $filepath.$filename;

                                  
                              // Table-Name zusammenbauen

                                  
                              $sql  "SELECT * INTO OUTFILE \"".$fp;
                                  
                              $sql .= "\" FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' from pphl_85245_logs WHERE time >= '$first_of_month' AND time <= '$last_of_month' ";
                                  
                              $res mysql_qry($sql)
                                  or die(
                              mysql_error());
                                  echo 
                              $sql
                              Die Tabelle heißt 'pphl_85245_logs'
                              Das File wird zusammengesetzt aus
                              '$filename = $id."-".$monat.$jahr.".csv";'
                              '$fp = $filepath.$filename;'

                              Und die '$id' habe ich vorher gesetzt '$id = 85245;'

                              Es sieht etwas kompliziert aus,
                              aber das hat den Hintergrund, daß es verschiedene ID's gibt und später jeder User seine Eigene Statistik downloaden kann.

                              Gruß Manuela

                              Kommentar

                              Lädt...
                              X