mslin (Caro): MySQL Ausgabe in Textdatei packen

Hallo,

ich habe mir selbst über php ein Verwaltungssystem zusammen geschrieben.
Darin sind auch Termine festgehalten.
Diese Termine sind in einer MySQL DB und diese möchte ich nun in eine Textdatei bzw. in eine .ics Datei ausgeben lassen.
Soweit klappt das auch schon ganz gut, jedoch bekomme ich nur immer den letzten Datensatz in die "Textdatei"...

Woran liegt das ? Habe ich einen Denkfehler?

Hier mal der Code:

/* Verbindung aufbauen, auswählen einer Datenbank */
$link = mysql_connect($DB_host, $DB_user, $DB_pass)
    or die("<p>FEHLER: Keine Verbindung möglich: <p>" . mysql_error());
mysql_select_db($DB_0001) or die("<p>FEHLER: Auswahl der Datenbank fehlgeschlagen<p>");
  /* ausführen einer SQL Anfrage */

.....

$result10 = mysql_query($query10) or die("Anfrage fehlgeschlagen: " . mysql_error());

.....

while ($row10 = mysql_fetch_array($result10, MYSQL_NUM)) {

.....

$datei = fopen("/srv/ftp/kalender/VISr2.ics","r+");
 $counterstand = fgets($datei, 10);
$ical_inhalt = "
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Europe/Berlin
X-LIC-LOCATION:Europe/Berlin
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
CREATED:20090307T222200Z
LAST-MODIFIED:20090307T222257Z
DTSTAMP:20090307T222200Z
UID:ca7c8522-543a-42d1-a9fd
SUMMARY:".$row10[6]."
DTSTART;TZID=Europe/Berlin:".$termind_y."".$termind_m."".$termind_t."".$zeit_start."
DTEND;TZID=Europe/Berlin:".$termind_y."".$termind_m."".$termind_t."".$zeit_end."
LOCATION:".$row10[22].", ".$row10[25].", ".$row10[26]." ".$row10[27]."
DESCRIPTION:".$row10[7]."
END:VEVENT
BEGIN:VTODO
CREATED:20090310T092322Z
LAST-MODIFIED:20090310T092705Z
DTSTAMP:20090310T091700Z
UID:2bb42c27fba5e1b557e60ab55f7d805e
SUMMARY:".$row10[6]."
PRIORITY:5
STATUS:CONFIRMED
CLASS:PRIVATE
ORGANIZER;RSVP=FALSE;CN=name:mailto:name@domain.de
ATTENDEE;RSVP=FALSE;CN=name;ROLE=REQ-PARTICIPANT:mailto:
 name@domain.de
DTSTART:20090310T101700Z
COMPLETED:19700101T010000Z
SEQUENCE:0
DESCRIPTION;LANGUAGE=de;ENCODING=QUOTED-PRINTABLE:".$row10[7]."
LOCATION;LANGUAGE=de;ENCODING=QUOTED-PRINTABLE:xcv
PERCENT-COMPLETE:45
DURATION:PT300M
X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:Cant parse as RECUR value
 in RRULE property. Removing entire property: FREQ=5;COUNT=10;
 INTERVAL=1;BYDAY=TU,WE;WKST=SU
END:VTODO
END:VCALENDAR
";
  rewind($datei);
  fwrite($datei, $ical_inhalt);
  fclose($datei);

}

Vielleicht könnt Ihr mir weiterhelfen !

Würde mich echt freun... komm da heut einfach nicht weiter...

Viele Grüße
mslin (Caro)

  1. Nachtrag:

    Diese Zeile:

    $counterstand = fgets($datei, 10);

    ist falsch... -> hab schon gelöscht...
    brach die ja da nicht...

    Caro

  2. Moin!

    Soweit klappt das auch schon ganz gut, jedoch bekomme ich nur immer den letzten Datensatz in die "Textdatei"...

    while ($row10 = mysql_fetch_array($result10, MYSQL_NUM)) {
      $datei = fopen("/srv/ftp/kalender/VISr2.ics","r+");
      rewind($datei);
      fwrite($datei, $ical_inhalt);
      fclose($datei);
    }

    Wenn du für jeden Datensatz die Datei öffnest, löschst, von vorne beschreibst und dann wieder schließt, ist es logisch, dass nur der letzte Schreibvorgang erhalten bleibt.

    Abgesehen davon wäre überhaupt die Frage, ob es schlau ist, per Skript eine Datei aus den Einträgen zu machen. Genausogut kannst du doch auch per Skript die ICS-Informationen live generieren - vorausgesetzt, du schickst noch den passenden Header zur Kennzeichnung des Mimetype mit.

    - Sven Rautenberg

    1. Guten Morgen...

      bin noch lange gestern daran gesessen...
      Wir werden das mit den Terminen jetzt wahrscheinlich anders lösen...
      Wird eine neue Arbeitsgruppe geben...

      Aber danke für deine Antwort!

      Caro