Seite 1 von 1

Verfasst: 13.06.2008, 17:44
von mirko
Wenn der Vorname nicht im Formular eingegeben wird, dann ist die Variable $vorname natürlich undefiniert, also nicht vergessen vor # Alle uebergebenen Werte in die Nachricht uebernehmen $vorname=\"\"; anzugeben.

Ansonsten ist das alles richtig. Du kannst zu Kontrollzwecken das Versenden der E-Mail drinlassen oder rausnehmen, wenn es deiner Meinung nach korrekt funktioniert.

Verfasst: 13.06.2008, 16:31
von powdermaniac.de
Zu den angesprochenen nicht vorhanden scripten:
theoretisch ist es aber möglich das ich mir sowas selber baue?
Ja mit entsprechendem Zeitaufwand schon.
@Mirko

Ich habe das newsletter-script jetzt angepasst.
Und zwar wird nun im Abschnitt
# Versenden der Mail
$Aktion = \"subscribe\"

ein INSERT INTO table (vorname,email,..) VALUES ($vorname,$email,..) ON DUPLICATE KEY UPDATE vorname=VALUES($vorname))

ausgeführt.
Den Vornamen, den ich ja auch speichern möchte, \'merke\' ich mir voher im Abschnitt
# Alle uebergebenen Werte in die Nachricht uebernehmen
mit
if ( $key == \"Vorname\"){
$vorname = $crypt->phpDecrypt(rawurldecode($val));
}
bei POST und GET.


Im else (unsubscribe) mach ich ein einfaches DELETE WHERE email=email.


Siehst du in dieser Vorgehensweise Probleme?
Reicht es aus, um die Anmelde/Abmelde Mails zu unterbinden folgende Zeile auszukommentieren?

# Versenden der Mail
@mail($Recipient, $Action, $message, $headers);

Verfasst: 11.06.2008, 20:49
von mirko
Original von powdermaniac.de:
Gut darüber könnte ich nochmals nachdenken, also die überflüssigen Felder alle rauslöschen.
Du ersetzt ja bestimmt die [Feldname] durch den Inhalt der Feldname: aus der AnmeldeEmail. Wenns so ist müsste da dann \'einfach\' leer eingefügt werden. Ich weiss natürlich nicht, wie genau das bei dir funktioniert...
Nein so funktioniert es eben nicht, weil das Feld nicht existiert. Ich muss halt alle übrigen Angaben [feld] durch nichts ersetzen.
Zu den angesprochenen nicht vorhanden scripten:
theoretisch ist es aber möglich das ich mir sowas selber baue?
Ja mit entsprechendem Zeitaufwand schon.

Verfasst: 11.06.2008, 20:25
von powdermaniac.de
Gut darüber könnte ich nochmals nachdenken, also die überflüssigen Felder alle rauslöschen.
Du ersetzt ja bestimmt die [Feldname] durch den Inhalt der Feldname: aus der AnmeldeEmail. Wenns so ist müsste da dann \'einfach\' leer eingefügt werden. Ich weiss natürlich nicht, wie genau das bei dir funktioniert...


Zu den angesprochenen nicht vorhanden scripten:
theoretisch ist es aber möglich das ich mir sowas selber baue?

Verfasst: 11.06.2008, 18:16
von mirko
okay. habs jetzt vor der IP eingebaut. aber einen unterschied macht das nicht. im body steht immer noch Vorname: und nichts dahinter.

selbst wenn Vorname: nicht im Body vorkommt, ändert das nichts daran, das [Vorname] in die DB geschrieben wird.

Wie kann ich das nun ändern?
Gar nicht außer du setzt eine Wert für Vorname ein. Z.B. könntest wenn Vorname leer ist # als Wert für Vorname im Script ausgeben lassen. Musst natürlich dann später den Wert noch ersetzen.
Ich glaube auch, das ich jetzt die mySQL-DB nutze und nicht mehr lokal Access bleibt der Aufwand der Gleiche.

Ich kann die Anmeldungen direkt in die DB nicht nutzen (wegen der Platzhalter wenn ein Feld nicht gefüllt). Daher muss ich weiterhin die An-/Abmeldungen in der Empfängerliste verwalten. Dann die mySQL-DB von Hand leeren. Und dann die Empfängerliste exportieren.

Ich weiss, das ist bestimmt sehr viel verlangt, aber ist es nicht möglich, über diesen workflow nachzudenken. Es sind ja, wenn ich\'s jetzt richtig überblicke, \'nur\' 2 Sachen, an denen geschraubt werden müsste:
\"nur\" klingt immer gut, leider ist der Aufwand höher als man denkt.
2.
Felder die nicht gefüllt sind, dürfen nicht einfach mit dem Platzhalter in die DB geschrieben werden (direkte Anmeldung in SQL-DB)
Gut darüber könnte ich nochmals nachdenken, also die überflüssigen Felder alle rauslöschen.
Gibt es evtl. schon Scripte von dir, die die An-/Abmeldungen direkt in die DB schreiben, ohne SM? Da wären ja dann ganz andere SQL-Möglichkeiten vorhanden.
Nein solche Scripte gibt es nicht. www.supermailinglist.de wird es geben, das basiert aber dann auf einer vordefinierten Tabellenstruktur, eigene Tabellen kann man nicht verwenden.
Hoffe ich nerv dich mit dem ganzen Kram nicht. Mich wundert nur, das noch niemand so arbeiten möchte wie ich. Oder die waren einfach cleverer das umzusetzen. :d_gutefrage:
Das macht keiner so wie du. Die meisten halten die Daten komplett im SuperMailer und nicht in externen Datenquellen. Sind die Daten extern z.B. im Outlook oder Datenbanken, dann werden diese jedesmal neu importiert. Abgemeldete Adressen werden in die Blockliste geschrieben, damit bekommen diejenigen keine Mails mehr.

Verfasst: 11.06.2008, 16:01
von powdermaniac.de
okay. habs jetzt vor der IP eingebaut. aber einen unterschied macht das nicht. im body steht immer noch Vorname: und nichts dahinter.

selbst wenn Vorname: nicht im Body vorkommt, ändert das nichts daran, das [Vorname] in die DB geschrieben wird.

Wie kann ich das nun ändern?

Ich glaube auch, das ich jetzt die mySQL-DB nutze und nicht mehr lokal Access bleibt der Aufwand der Gleiche.

Ich kann die Anmeldungen direkt in die DB nicht nutzen (wegen der Platzhalter wenn ein Feld nicht gefüllt). Daher muss ich weiterhin die An-/Abmeldungen in der Empfängerliste verwalten. Dann die mySQL-DB von Hand leeren. Und dann die Empfängerliste exportieren.

Ich weiss, das ist bestimmt sehr viel verlangt, aber ist es nicht möglich, über diesen workflow nachzudenken. Es sind ja, wenn ich\'s jetzt richtig überblicke, \'nur\' 2 Sachen, an denen geschraubt werden müsste:

1.
Für den Export würde ja schon sehr hilfreich sein, ein SQL-Statement VOR dem eigentlichen Export absetzen zu können. Indem könnte man dann die Tabelle leeren.

2.
Felder die nicht gefüllt sind, dürfen nicht einfach mit dem Platzhalter in die DB geschrieben werden (direkte Anmeldung in SQL-DB)


Mein Problem ist folgendes:
Ich habe Gewinnspielteilnehmer die mit in den Verteiler kommen. Diese werden von extern zugespielt (in die Empfängerliste). Dabei sind natürlich auch Leute, die schon im Verteiler sind, aber evtl. mit anderer Anschrift etc. Die müssten ein UPDATE erfahren. Das funktioniert also, wenn Punkt 1 erfüllt wäre. Der gesamte Verteiler wird in die DB ausgelagert.
Nun könnte ich ja die Gewinnspieler auch per angepasstem Newsletter-Script erfassen. Da ist aber wieder das Problem unter 2. Und in diesem Fall noch mit viel mehr Feldern. Auch das über ODBC nur ein SQL-Statement möglich ist, verhindert hier zu sagen: EMail schon vorhanden -> andere Felder UPDATE

Gibt es evtl. schon Scripte von dir, die die An-/Abmeldungen direkt in die DB schreiben, ohne SM? Da wären ja dann ganz andere SQL-Möglichkeiten vorhanden.

Hoffe ich nerv dich mit dem ganzen Kram nicht. Mich wundert nur, das noch niemand so arbeiten möchte wie ich. Oder die waren einfach cleverer das umzusetzen. :d_gutefrage:

Verfasst: 11.06.2008, 15:12
von mirko
muss das mit dem vorname wirklich hinter die IP?
weil in den mails steht

EMail:
Vorname:
IP:

ist das an der stelle dann nicht zu spät?
Nein, die Reihenfolge spielt absolut keine Rolle. Für die Zuordnung durchsucht er alle Werte vor dem : und nimmt den Inhalt nach dem : .

habe jetzt mit:
if( ($s != \"\") and ( trim($s) != \"Vorname=\") )
$Link .= \"&\".$s;

den vornamen im bestätigungslink weggelassen. war aber blöd, weil das ja nichts daran ändert, das der sql-befehl für die anmeldund dann den platzhalter schreibt.

ich verzweifle bald. ist das denn so ungewöhnlich, wie ich meine empfänger verwalten möchte?
Wieso hängst du das an Link dran? Meine Variante mit dem Wert vor der IP ist doch viel einfacher.

ODBC: das scheint dann wohl nicht zu gehen. es kommt immer ein sql syntax error. das liegt also am ODBC. aha.
Da wird das mit ; auch nicht funktionieren, die Schnittstelle unterstützt damit SQL-Scripte mit mehreren Anweisungen auch nicht.

Verfasst: 11.06.2008, 13:46
von powdermaniac.de
muss das mit dem vorname wirklich hinter die IP?
weil in den mails steht

EMail:
Vorname:
IP:

ist das an der stelle dann nicht zu spät?


habe jetzt mit:
if( ($s != \"\") and ( trim($s) != \"Vorname=\") )
$Link .= \"&\".$s;

den vornamen im bestätigungslink weggelassen. war aber blöd, weil das ja nichts daran ändert, das der sql-befehl für die anmeldund dann den platzhalter schreibt.

ich verzweifle bald. ist das denn so ungewöhnlich, wie ich meine empfänger verwalten möchte?




ODBC: das scheint dann wohl nicht zu gehen. es kommt immer ein sql syntax error. das liegt also am ODBC. aha.

Verfasst: 11.06.2008, 13:10
von mirko
okay. hab ich. funktioniert aber nur, wenn der vorname auch gefüllt ist. da es den newsletter-anmeldern freisteht diesen anzugeben, ist er aber auch eben manchmal nicht gefüllt.

kann man das umgehen, indem man am anmelde-email-body ändert (vorname:) weglassen, wenn vorname nicht gefüllt?
Müsstest das Script am besten anpassen. Im Script nach

$message .= \"IP: \".$REMOTE_ADDR.\"n\";

suchen.

Und einfach mit einer IF-Anweisung prüfen

Code: Alles auswählen

if( !isset($_GET["Vorname]) && !isset($_POST["Vorname]) )
  $message .= "Vorname: "."n";
kann man bei den sql befehlen auch mehrere angeben oder immer nur einen? ich frage, weil ich beim export der empfänger in richtig mysql wieder probleme sehen, wenn ich \'vonHand\'-Änderungen vorgenommen habe.
Ähmm das habe ich selbst noch nicht probiert, musst testen ob das per ODBC funktioniert. Hinter der SQL-Anweisung ein ; setzen und die nächste Anweisung angeben. Per PHP funktioniert es mit ; nicht, man muss mehrere mysql_query() Anweisungen verwenden.

könnten die Empfänger in SM nicht auch als VIEW auf die DB \'angezeigt\' werden?
Nein muss man immer importieren lassen. Ein View wären ganz andere Anweisungen im Hintergrund für das Löschen, Ändern, Sortieren usw.. und nicht jeder hat eine Datenbank auf dem eigenen PC installiert. Für diejenigen ohne Datenbank wäre die Installation damit viel zu schwierig.

Verfasst: 11.06.2008, 12:40
von powdermaniac.de
okay. hab ich. funktioniert aber nur, wenn der vorname auch gefüllt ist. da es den newsletter-anmeldern freisteht diesen anzugeben, ist er aber auch eben manchmal nicht gefüllt.

kann man das umgehen, indem man am anmelde-email-body ändert (vorname:) weglassen, wenn vorname nicht gefüllt?

kann man bei den sql befehlen auch mehrere angeben oder immer nur einen? ich frage, weil ich beim export der empfänger in richtig mysql wieder probleme sehen, wenn ich \'vonHand\'-Änderungen vorgenommen habe.

könnten die Empfänger in SM nicht auch als VIEW auf die DB \'angezeigt\' werden?

sorry mirko, ich kann mir vorstellen, das ich mit meinen fragen nerve.

Verfasst: 10.06.2008, 17:33
von mirko
Beim Export werden alle Feldnamen der Empfängerliste genommen und in der SQL-Anweisung ersetzt.
Bei den Anmeldungen werden aber nur die Werte genommen, die in der Anmeld-E-Mail stehen. Das können auch Feldwerte sein, die niemals in der SuperMailer-Empfängerliste auftauchen aber in die SQL-DB sollen. Du musst also die SQL-Anweisung so anpassen, das nur die Werte aus der E-Mail in der Anweisung auftauchen.

Verfasst: 10.06.2008, 17:12
von powdermaniac.de
ich verwende folgende syntax für die eintragung der anmeldungen direkt in der sql-db:

INSERT INTO test (anrede,vorname,nachname,strasse,plz,ort,EMail,land,telefon,aktionen) VALUES ([anrede],\'[vorname]\',\'[nachname]\',\'[strasse]\',\'[plz]\',\'[ort]\',\'[EMail]\',\'[land]\',\'[telefon]\',\'[aktionen]\' )

bei leeren feldern wir allerdings der platzhalter (z.b. [anrede]) in die DB geschrieben.

beim export mit:
INSERT [c=red]IGNORE[/color] INTO test (anrede,vorname,nachname,strasse,plz,ort,EMail,land,telefon,aktionen) VALUES (\'[anrede]\',\'[vorname]\',\'[nachname]\',\'[strasse]\',\'[plz]\',\'[ort]\',\'[EMail]\',\'[land]\',\'[telefon]\',\'[aktionen]\' )

passiert dies aber nicht.

woran liegt das?