Meine erste eigene Klasse - Fragen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfangen
benutzer
code
dank
einfachen abfrage
existenz
fehler
haufe
header
meldung
notiz
offset
ordnung
schleife
spezifikation
string
termin
type
url
zeile
-
Hi zusammen
Ich erstelle derzeit meiner erste eigene Klasse :-)
In der Klasse soll man direkt Termine an Outlook oder Thunderbird senden können, wie es die ICAL-Spezifikation von RFC vorsieht.
Die Klasse befindet sich (als txt-Datei) unter meron.lima-city.de/class_vical.txt
Dabei habe ich eine Frage:
In der bound()-Funktion (oder jetzt heisst das glaube ich Methode & ich weiss, bound ist eigentlich ein falscher Name, aber das tönt so gut ) soll der ganze Termin aufgebaut und gesendet werden. Soll/Muss ich nun dort nochmals die ganzen Prüfungen machen (wie es z.B. mit Location gemacht wird) oder sollte dort nur noch mittels einer Foreach-Schleife alles durchlaufen und dardurch der Aufbau automatisch korrekt kommen?
Zudem:
In den Tutorials die ich dazu gelesen habe, stand man solle unbedingt error_reporting einschalten, damit auch alles ausgegeben wird, weil man ansonsten Fehler sehr lange suchen könne, insbesondere wenn Variablen nicht richtig initialisiert sind. Das habe ich nun auch gemacht und konnte so auch schon einige Fehler beheben. Die beiden "NOTICE Undefined offset: 0" bringe ich aber nicht weg, kann mir da jemand einen Tipp geben?
Und generell (nebst dem das mir exceptions fehlen und die Klasse auch erst einigermassen saubere Termine (VEVENT's) hinkriegt):
Wie findet ihr es, bin ich da auf einem kompletten Holzweg oder sieht das soweit schon mal in Ordnung aus?
Danke für eure Rückmeldungen :-)
Gruess
Meron
PS (falls hier Neulinge mitlesen): Ich rate dringend davon ab diese Klasse irgendwo produktiv einzusetzen! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
jantede12 schrieb:
Undefined Offset ist ja auch kein Fehler sondern nur eine Notiz. Die kannst du getrost ignorieren, wenn du die Klasse fertig hast machst du Error Reporting sowieso wieder auf E_ERROR, damit die Benutzer nicht mit Fehlermeldungen attackiert werden
Unsauberer Code ist und bleibt schlampige Arbeit.
"NOTICE Undefined offset: 0"
Diese Notiz erscheint, wenn ein nicht existierender Arrayindex mit einem Wert belegt werden soll.
In deinem Fall existiert kein key=0 für dein Array.
Der Fehler (die Notiz) lieg sicherlich in einer Schleife begündet, deren Startwert mit 0 beginnt.
-
Hallo,
mir fallen bei deinem Code 2 Sachen auf.
Zum einen sind deine Einrückungen nicht sehr konsistent, dadurch fällt es schwer den Code zu lesen und zum Anderen sind einige Strings schlicht falsch, oder weshalb sind die Header ab Zeile 333 jeweils durch 2 Zeilen voneinander getrennt und mit einem Haufen sinnloser, teilweise problematischer Leerzeichen versehen? Soweit ich mich erinnere müssten die Header in etwa so aufgebaut sein:
$headers = "Content-Type: text/calendar; method=REQUEST; charset=utf-8\r\n"; $headers .= "Content-Language: de-ch\r\n"; $headers .= "\r\n";
Ich mag mich zwar irren und gerade bei einer falschen Spec sein, aber ich meine Header werden hier wie auch bei HTTP durch "\r\n" getrennt und zwischen Header und Nutzdaten ist eine leere Zeile, welche ebenfalls so getrennt wird.
Oder wenn du die sinnvollere, weil einfachere Variante nehmen willst, dann schickst du jeden Header einzeln an den PHPMailer:$this->phpmail->AddCustomHeader("Content-Type: text/calendar; method=REQUEST; charset=utf-8"); $this->phpmail->AddCustomHeader("Content-Language: de-ch");
Wenn ich die API richtig im Kopf habe ist das möglich und wie gesagt wesentlich sinnvoller, da man sich dann z.B. auch nicht um die Leerzeile kümmern muss.
Zu guter Letzt noch die Info wie du die MeldungNOTICE Undefined offset: 0
die du z.B. in Zeile 121 bekommst, mit einer einfachen Abfrage nach der Existenz des Schlüssels abfangen kannst:
// Alte Zeile 121 if($this->allowedSubType[$subtype]) // neue Zeile 121 if(isset($this->allowedSubType[$subtype]) && $this->allowedSubType[$subtype])
Dann hast du das Problem abgefangen.
Mit freundlichen Grüßen -
Danke vielmals für eure Antworten.
nemoinho schrieb:
Zum einen sind deine Einrückungen nicht sehr konsistent, dadurch fällt es schwer den Code zu lesen
Ja, daran muss ich noch arbeiten, mein prodezurales sieht noch schlimmer aus ...
nemoinho schrieb:
und zum Anderen sind einige Strings schlicht falsch, oder weshalb sind die Header ab Zeile 333 jeweils durch 2 Zeilen voneinander getrennt und mit einem Haufen sinnloser, teilweise problematischer Leerzeichen versehen?
Ja, das war wirklich ziemlicher Müll. Tatsache ist, dass ich auch etwas in der phpmailer class herum gefaustet habe, dass die Emails auch direkt als Kalenderelement kommen und nicht als Mail mit Anhang Kalenderelement. Und einfach diese Zeilen konnte ich dort irgendwie nicht unterbringen. Interessanterweise verwarf es mir jeweils das ganze Mail, wenn ich die schön zusammenzog (also die Leerzeichen entfernte) oder separat an phpmailer sandte.
Ich habe nun aber die Lösung gefunden: Die dort gemacht Definitionen werden schon von phpmailer übernommen. Ich habe einfach meine Erweiterung ISical um den Punkt method=Request ergänzt (das ist der einzige Teil der wohl benötigt wird, damit Outlook daraus auch wirklich einen Termin erstellt
nemoinho schrieb:
Zu guter Letzt noch die Info wie du die MeldungNOTICE Undefined offset: 0
die du z.B. in Zeile 121 bekommst, mit einer einfachen Abfrage nach der Existenz des Schlüssels abfangen kannst:
Das habe ich nun hinbekommen, besten Dank dafür.
Ich lade das ganze jetzt nicht nochmals hoch, werde zuerst noch die Spezifikationen besser umsetzen
Gruess
Meron -
meron schrieb:
yo mey! nicht einmal das kann man mit sicherheit sagen. das problem ist, dass du eine aggregirte klasse drinnen hast, aber leider ohne quellcode! da bräuchte man wirklich hellseherische kräfte.
... oder sieht das soweit schon mal in Ordnung aus? ...
und zwar, in zeile 34 stehtrequire_once('phpmailer_orig/class.phpmailer.php');
und genau daran liegt es, dass man hir nicht wirklich ernsthaft helfen kann ;)
==== EDIT ====
also zeile 34 stimmt leider nicht genau, aber es ist ganz in der nähe.
Beitrag zuletzt geändert: 31.3.2013 0:38:19 von czibere -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage