Schorse: VCard erstellen

Hi,

ich habe gelesen, dass eine VCard nichts anderes ist als eine Textdatei. Daraufhin habe ich diesen Codeschnipsel erstellt ...

  
<?  
mysql_connect("***", "***", "***");  
  
mysql_select_db("***") or die("Fehler beim Öffnen der Datenbank");  
$table  = "kontaktdaten";  
  
  
$result  =  mysql_query( "select * from  $table WHERE id=$id");  
while($row = mysql_fetch_assoc($result))  
{  
print("BEGIN:VCARD");  
print("<br>");  
print("VERSION:2.1");  
print("<br>");  
print("N:");  
echo "$row[nachname]";  
print(";");  
echo "$row[vorname]";  
print("<br>");  
print("FN:");  
echo "$row[vorname]";  
print("&nbsp;");  
echo "$row[nachname]";  
print("<br>");  
print("ORG:");  
echo "$row[orga]";  
print("<br>");  
print("EMAIL;TYPE=INTERNET:");  
echo "$row[email]";  
print("<br>");  
print("TEL;TYPE=voice,work,pref:+49&nbsp;");  
echo "$row[telefon]";  
print("<br>");  
print("END:VCARD");  
}  
?>  

Wenn ich die Datei als .vcf speichere, ist leider der komplette Code abgespeichert und beim Import in ein Adressbuch ist die Sache ungültig. Wo muss ich ansetzen und was mache ich falsch?

Danke!

  1. Hi,

    Wenn ich die Datei als .vcf speichere, ist leider der komplette Code abgespeichert und beim Import in ein Adressbuch ist die Sache ungültig. Wo muss ich ansetzen und was mache ich falsch?

    Indem du nicht den Code sondern die Aisgabe abspeicherst.

    Dazu gibt es meherer Möglichkeiten. ob_start, file_get_contens, usw...

    Hilft dir das?

    Mike

    1. Indem du nicht den Code sondern die Aisgabe abspeicherst.

      Dazu gibt es meherer Möglichkeiten. ob_start, file_get_contens, usw...

      Ehrlch gesagt nein. Hast Du ein Beispiel oder eine Möglichkeit, das halbwegs zum Script passend nachzulesen?

      Danke!

      1. Hi,

        Ehrlch gesagt nein. Hast Du ein Beispiel oder eine Möglichkeit, das halbwegs zum Script passend nachzulesen?

        Im Grunde das gleiche Prinzip, wie Bilder über PHP Dateien ausgeben lassen, aber...

        Ein einfaches Beispiel findet sich sogar hier, einzig die HEADER-Angaben mussten angepasst werden:

        http://forum.de.selfhtml.org/archiv/2006/4/t127406/

        Ein komplexeres Beispiel finden sich auf:
        http://www.developers-guide.net/forums/5915,php-vcard-php-parser

        oder eben:
        Allgemein

        Mike

  2. Hallo,

    ich habe gelesen, dass eine VCard nichts anderes ist als eine Textdatei.

    genau, warum schreibst du dann HTML-Tags hinein?

    print("BEGIN:VCARD");
    print("<br>");
    print("VERSION:2.1");
    print("<br>");
    print("N:");
    echo "$row[nachname]";

    Wann hört die Unsitte mal auf, einzelne Variablen für die Ausgabe nochmal in einen String einzubetten ...?
    Warum benutzt du eigentlich mal print und mal echo?

    Wenn ich die Datei als .vcf speichere, ist leider der komplette Code abgespeichert und beim Import in ein Adressbuch ist die Sache ungültig. Wo muss ich ansetzen und was mache ich falsch?

    Erstens: Speichere nicht den PHP-Code, sondern den Text, den er ausgibt. Das hat Mike ja auch schon gesagt.
    Zweitens: Verwende Zeilenumbrüche anstatt der Zeichenfolge "<br>".

    So long,
     Martin

    --
    Lebensmotto der Egoisten:
    Was ist so schlimm daran, dass jeder nur an sich selbst denkt? Dann ist doch an alle gedacht!
    1. genau, warum schreibst du dann HTML-Tags hinein?

      Weil ich von Vcards grundsätzlich keine Ahnung habe und bei Wikipedia eine aufgerufen habe. Da sah die so aus, wie sie in der Php-Ausgabe jetzt auch aussieht.

      Wann hört die Unsitte mal auf, einzelne Variablen für die Ausgabe nochmal in einen String einzubetten ...?
      Warum benutzt du eigentlich mal print und mal echo?

      Ich bin noch nicht lange bei Php dabei und bringe mir das nach und nach selbst durch Versuche und Probieren bei. Fehler oder Falsches kalkuliere ich z.Z. mit ein, das wird sich mit der Zeit bessern, da bin ich mir sicher. ZZ bin ich über das froh, was funktioniert.

      Erstens: Speichere nicht den PHP-Code, sondern den Text, den er ausgibt. Das hat Mike ja auch schon gesagt.

      Und da habe ich auch schon geschrieben, dass ich nicht weiß, wie das geht.

      1. Hallo,

        »» genau, warum schreibst du dann HTML-Tags hinein?
        Weil ich von Vcards grundsätzlich keine Ahnung habe und bei Wikipedia eine aufgerufen habe. Da sah die so aus, wie sie in der Php-Ausgabe jetzt auch aussieht.

        ja, mag sein - wenn du sie in einem Browser (also im HTML-Kontext) anschaust. Der interpretiert die <br> natürlich als Zeilenumbruch.
        Das gleiche gilt übrigens auch für das &nbsp;, das ich eben erst wahrgenommen habe. Das ist auch HTML-Codierung, die hier nichts verloren hat. Da gehört ein normales Leerzeichen hin.

        Ich bin noch nicht lange bei Php dabei und bringe mir das nach und nach selbst durch Versuche und Probieren bei.

        Das ist nicht die schlechteste Strategie. Aber sie sollte immer auch von kritischem Nachdenken begleitet sein: Warum ist das so? Warum geht's jetzt und vorher nicht? Was bedeuten die einzelnen Symbole, welchen Regeln folgt das ganze System?

        »» Erstens: Speichere nicht den PHP-Code, sondern den Text, den er ausgibt. Das hat Mike ja auch schon gesagt.
        Und da habe ich auch schon geschrieben, dass ich nicht weiß, wie das geht.

        Im Moment ist mir auch noch unklar, was du genau anstellen willst. Du hast ein PHP-Script, das eine vCard erzeugt (jedenfalls wenn du die <br> durch normale Zeilenumbrüche \r\n ersetzt). In welchen Gesamtrahmen hast du das Script eingebettet? Wie hast du das Ergebnis bisher gespeichert? Beschreibe die näheren Umstände deines Tuns.

        So long,
         Martin

        --
        Zwei Kumpels sitzen vor dem Computer. "Welche Suchmaschine beutzt du eigentlich meistens?" - "Prima Vera." - "Hmm, kenn' ich gar nicht." Dann geht die Tür auf: "Schatz ich habe deine Sonnenbrille wiedergefunden!" - "Prima, Vera!"
        1. Hallo Martin,

          Im Moment ist mir auch noch unklar, was du genau anstellen willst. Du hast ein PHP-Script, das eine vCard erzeugt (jedenfalls wenn du die <br> durch normale Zeilenumbrüche \r\n ersetzt).

          soweit ich die Spezifikation verstehe, ist es wichtig, nicht \n\r sondern ausschließlich \n im VCARD-Bereich zu nutzen.

          Wenn ich mir die Beispiele in RFC 2425 ansehe, scheint es sinnvoll zu sein, bei Nicht-ASCII-Zeichen das Content-Transfer-Encoding quoted-printable zu verwenden.

          Der Wikipedia-Artikel in der derzeitigen Form erscheint mir da etwas schlampig. Zum einen wird auf Nur-ASCII hingewiesen, im zweiten Beispiel jedoch ein "ß" verwendet. Ich wundere mich nicht, dass viele Programme Schwierigkeiten mit Nicht-ASCII-Zeichen haben.

          Freundliche Grüße

          Vinzenz

          1. Hallo Vinzenz,

            »» Du hast ein PHP-Script, das eine vCard erzeugt (jedenfalls wenn du die <br> durch normale Zeilenumbrüche \r\n ersetzt).
            soweit ich die Spezifikation verstehe, ist es wichtig, nicht \n\r sondern ausschließlich \n im VCARD-Bereich zu nutzen.

            ja, den Abschnitt verstehe ich auch so, danke für die Korrektur.
            Tatsache ist aber, dass das von den existierenden Programmen wohl nicht durchgängig eingehalten wird. Zumindest von Outlook und Outlook Express weiß ich, dass sie CR/LF, also \r\n verwenden. Im Thunderbird, den ich gerade als Gegenprobe hernehmen wollte, konnte ich dagegen keine Möglichkeit finden, einen Eintrag aus dem Adressbuch als separate vCard-Datei zu speichern oder einer Mailnachricht anzuhängen, potzblitz! Nur als LDIF kann ich sie exportiern, da erzeugt T-Bird aber auch CR/LF als Zeilenumbruch. Ist aber wieder eine ganz andere Baustelle.

            Wenn ich mir die Beispiele in RFC 2425 ansehe, scheint es sinnvoll zu sein, bei Nicht-ASCII-Zeichen das Content-Transfer-Encoding quoted-printable zu verwenden.

            Das kommt aber nur zum Tragen, wenn das Ding in irgendeinem Kontext übertragen wird, der solche Angaben unterstützt (Mail, HTTP). Hier ging es aber um das Speichern als Datei.

            Der Wikipedia-Artikel in der derzeitigen Form erscheint mir da etwas schlampig. Zum einen wird auf Nur-ASCII hingewiesen, im zweiten Beispiel jedoch ein "ß" verwendet.

            Ja, das ist sehr ungenau. Allerdings ist oft, wenn der Begriff "ASCII-Datei" fällt, einfach eine reine Textdatei gemeint - unabhängig von ihrer Codierung.

            Ich wundere mich nicht, dass viele Programme Schwierigkeiten mit Nicht-ASCII-Zeichen haben.

            Naja, andererseits heißt es in RFC 2425 wiederum, das Default-Encoding sei 8bit. Das würde auch eine ISO- oder UTF-8-Codierung ohne weiteres zulassen, nicht nur ASCII.

            So long,
             Martin

            --
            F: Was sagt der große Keks zum kleinen Keks?
            A: Du kannst dich jetzt verkrümeln.