Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 09. Mai 2015 09:10

rage_all
kennt CMS/ms
Ort: Augsburg
Registriert: 09. März 2011
Beiträge: 288

One-Click Poll über das Newsletter-System

Hallo zusammen,

nennen wir es 'Service an den User' oder eine gewisse 'Faulheit des Users' oder wie auch immer...  big_smile
Ich habe folgenden Wunsch:

Im Rahmen einer 'Umfrage' über das Newsletter-System möchte ich einen Wunsch des Empfängers erfassen.
Beispiel: Es gibt eine neue Preisliste und ich möchte wissen ob der Empfänger diese Preisliste per Post zugeschickt bekommen möchte.
Oder: Ich veranstalte eine Hausmesse und bitte den Newsletter-Empfänger sein Kommen mit einem Klick anzukündigen.
Oder oder oder...

Nun könnte man ja - soweit ich mich damit eingelesen habe - NMS und FEU miteinander verknüpfen, was aber noch immer voraussetzen würde, dass sich der User anmeldet (und ggf. sich auch noch (s)ein Kennwort merken kann). Wenn es aber um nicht gravierende Dinge geht, wie eben nur einer lapidaren Zusage zu erscheinen; geht mir das alles von der Usability zu weit.
Eine einfache Umfrage die anonym ist, kann aber schnell und einfach - aber gravierend - manipuliert werden. Wenn es dann um Fragen geht wie z.B. "Wie viele Kisten Bier kaufe ich für eine Grillparty", sollte es einigermaßen akkurat sein, und nicht von einem Kiddie das zufällig über die Umfrage stolpert, manipuliert werden können.

Deswegen habe ich überlegt aus der uniqueid des Users im Modul NMS die auch z.B. im Abmeldelink inkludiert ist, einen Poll zu bauen der auch den einzelnen Benutzer erfasst. So würde ich im Newsletter einen (bzw. mehrere) Links einbauen wie z.B.:
<a href='example.com/mypoll.php?userid={$uniqueid}&grillparty=yes'>Ich komme zur Grillparty</a>
<a href='example.com/mypoll.php?userid={$uniqueid}&grillparty=no'>Ich komme nicht zur Grillparty</a>

Der Benutzer klickt einfach auf einen der beiden Links (was jeder Mailclient problemlos mitmachen wird) und ich habe eine klare Aussage ob Katze oder Kater (und kann sogar nach meiner neuen Gästeliste entsprechend Weizen und Alkoholfrei einkaufen)... big_smile

Ich habe dafür eine PHP-Datei geschrieben die folgendes macht:
Bei einem Aufruf mit Parametern wie z.B.:
example.com/mypoll.php?userid=123456&grillparty=yes

  • öffnet das Script die Datenbank

  • liest aus der userid den in der Datenbank hinterlegten Klarnamen aus

  • schreibt das Ergebnis mit Name und Auswahl in eine Text-Datei auf dem Server

  • zeigt dem User an, dass der Vorgang erfolgreich war und welche Auswahl er getroffen hat

Die Moral von der Geschichte:

  1. — Ich würde gerne dieses Script teilen falls jemand anders die Idee auch cool findet - einfach hier innerhalb eines ((code))-Blocks oder anders?

  2. — Ich würde gerne das Konzept als Modul integriert sehen, kann es aber nicht alleine. PHP-Schnipselchen sind hart genug für mich und für die bislang 152 Zeilen (inklusive HTML-Ausgabe) hab ich ja schon einen halben Tag gebraucht...  roll
    Gerne übersetze ich ins englische, Teste, gib ein Bier aus oder oder oder... smile

  3. — Ich würde mich sehr freuen wenn jemand wegen Fragen der Sicherheit drüberschauen würde. Datenbank öffnen und so ... ist sicher nicht ganz ohne und sollte nicht von einem PHP-Idioten wie mir programmiert werden... tongue

Daher nun die eigentliche Frage: Findet Ihr das Konzept als solches interessant? Würde es sich lohnen daraus etwas zu machen?

Danke für Euer Feedback!

Offline

#2 09. Mai 2015 10:24

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: One-Click Poll über das Newsletter-System

Keine schlechte Idee. Und schön, dass Du es teilen möchtest.
Meine Frage wäre zunächst folgende: Wozu ein Modul? Was hast Du mit den Daten vor? Reicht Dir die Textdatei nicht? Ein Modul würde ich nur dann daraus machen, wenn man mehr als die von dir beschriebene Funktionalität braucht (Verwaltung im Backend, Templates etc...). Ein Plugin + eine versteckte Seite tuts ansonsten auch.

PS: Du kannst es auch einfach hier im Forum hochladen und dann in Deinem Beitrag darauf verlinken.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#3 09. Mai 2015 17:24

rage_all
kennt CMS/ms
Ort: Augsburg
Registriert: 09. März 2011
Beiträge: 288

Re: One-Click Poll über das Newsletter-System

Danke für Deine Antwort.

Nun, ins Forum kann ich es nicht hochladen - PHP ist nicht erlaubt, die ZIP wird auch nicht akzeptiert und als Grafik macht das ja nun wenig Sinn...  tongue

Also hab ich die (für das Forum etwas geänderte) bei mir in die Cloud gestellt:

Ich hoffe es sind jetzt nicht noch grobe Fehler reingekommen bei der ent-personalisierung. Ansonsten bitte Bescheid geben.


Nein, ein Modul müsste es wirklich nicht sein. Ich hatte nur folgende Überlegungen:

  1. — Was passiert bei einer Mehrfachwahl? Momentan wird jeder Klick hinten hinzugefügt wie eine log-Datei.

  2. — Wäre es nicht einfacher die bereits offene Datenbankverbindung zu verwenden?

  3. — Kann ich von außerhalb auf die (aktuelle) CSS und - wenigstens irgendein - Template zugreifen?

  4. — Wie kann ich globale Inhaltsblöcke einbinden, z.B. die Navigation, usw. - vielleicht würde ein User nach seiner Wahl noch gern ein wenig auf der Seite stöbern und muss nun erstmal zur Startseite um von dort aus weiter zu klicken.

Ja, Kleinigkeiten - Du hast schon völlig recht: als unbekannte Datei irgendwo ist es sicherlich immer viel sicherer und schlanker.
Trotzdem: Ich schau jetzt mal noch wie ich das als globalen Inhaltsblock zum Laufen bekomme. Mit {php} code(); {/php} müsste das doch in den global_content_blocks funktionieren? Dann kann alles wenigstens innerhalb des regulären Templates laufen und ich muss nicht später jede Templateänderung auf die Abstimmungsseite übertragen.
Vielleicht wäre das als Plugin besser? Ich kenn mich da nicht aus...  wink

Offline

#4 10. Mai 2015 21:25

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: One-Click Poll über das Newsletter-System

Wäre es nicht einfacher die bereits offene Datenbankverbindung zu verwenden?

Deswegen sprach ich ja von einem Plugin.
Da ist man näher am System.
Allerdings ohne den Overhead eines Moduls.

Was passiert bei einer Mehrfachwahl? Momentan wird jeder Klick hinten hinzugefügt wie eine log-Datei.

Vor dem Schreiben prüfen, ob der Username bereits drinsteht.
Also Dateininhalt auslesen (file_get_contents()) und z.B. mit strpos() prüfen.

Viel wichtiger ist aber folgendes: Wenn ich jetzt ein Arschloch-User wäre, dann wäre es ein leichtes für mich, alle User an-/abzumelden. Dazu muss ich einfach nur Links mit einer fortlaufenden Nummer als User-ID generieren und damit Deine Seite fluten. (sofern ich den Link zur Seite kenne - was ich als Empfänger Deines Newsletters ja tun würde)

Besser wäre es, wenn Du bei jeder Mail eine eindeutige ID in den Link einbauen könntest, die man nicht so einfach fälschen kann. Z.B. ein MD5-Hash aus Empfänger + "root_path". Und beim Klick auf den Link kannst Du dann die E-Mail des Users anhand der übergebenen User-ID aus der DB auslesen, die Mail-ID erstellen und mit der im Link übergebenen ID vergleichen. Somit stellst Du sicher, dass auch wirklich nur der Empfänger des Links diesen auch auslösen kann.

Abgesehen davon, ist Dein Script nur für den Fall "Party + Gäste" vorbereitet.
Du müsstest das für jeden anderen Fall erneut schreiben.
(Aber das mag für Deine Anwendungsfälle vielleicht gehen. Ich denke manchmal zu sehr an universell einsetzbare Scripts.)

Ich hätte spontan noch an das Modul PollsMadeSimple gedacht. Aber das ist leider auch nicht sonderlich flexibel einsetzbar. Um Polls, NMS und Feu miteinander zu verknüpfen, müsste man Polls etwas umschreiben. Kann jetzt nicht sagen, ob sich der Aufwand lohnen würde.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#5 11. Mai 2015 09:27

rage_all
kennt CMS/ms
Ort: Augsburg
Registriert: 09. März 2011
Beiträge: 288

Re: One-Click Poll über das Newsletter-System

NaN schrieb:

Abgesehen davon, ist Dein Script nur für den Fall "Party + Gäste" vorbereitet.
Du müsstest das für jeden anderen Fall erneut schreiben.

Daher ja die Idee mit dem Modul und einer Verknüpfung mit der Datenbank. Damit verbunden wäre eine GUI a la ListIt oder so, wo Optionen per Mausklick festgelegt, hinzugefügt und entfernt werden könnten; ggf. auch ein Ende des Abstimmungszeitraums mit entsprechender Fehlermeldung an den Empfänger - das sind ja alles noch denkbare und auch wichtige Dinge die ich überhaupt nicht berücksichtigt habe.
Ich könnte schon mal damit anfangen ... Ende 2016 stelle ich es dann vor. *lach*

Flexibler könnte man das sicherlich gestalten und trotzdem beim Plugin bleiben.
Aber, das geht IMHO nur mit einem von zwei möglichen Modellen:

  • Typ 1: Ich nehme jede Stimme an, auch wenn im Parameter steht "Weinparty" statt "Grillparty"

  • Typ 2: Ich nehme nur Stimmen an, die in der 'Whitelist' stehen, greife also überhaupt nur diese auf (so wie jetzt)

Typ 2 setzt eine Aktualisierung wenigstens einer Steuerungsdatei voraus - dann kann ich theoretisch auch gleich in den code und dort anpassen.

Wie Du schon gesagt hast: Für meine Zwecke tut's das so weit schon mal und spätere Entwicklungen setze ich später mit kommender Erfahrung einfach oben drauf. Um es als Modul anzubieten müssten etliche Anwendungsfälle und Eventualitäten entworfen werden, geplant werden und nicht zuletzt erfasst werden wie hoch das Interesse daran eigentlich ist.
Stunden auf ein Super-Duper-Modul zu verbringen damit am Ende fünf User es nutzen wäre ja völlig unsinnig.

Was die IDs angeht, wäre ich aber zuversichtlich. CG hat was das angeht wohl mitgedacht und (nach meinem Verständnis) zufällige und nicht nachvollziehbare Ketten hinterlegt:
User 1: afc6a202f3350d85653c26be8df01bfd
User 2: 9fb8236c6b21ca513662a9f47e29434c
User 3: 073663e4f98a1ad905e104250bdb3a41

Ich hab ohne Erfolg versucht mit base64 zu decodieren - MD5 ist es nicht; falls doch wäre es ohnehin (ohne Vergleichslisten) nicht entschlüsselbar - und so viel Brain traue ich den meisten meiner Empfänger ehrlichgesagt sowieso nicht zu...  big_smile  (die haben auch gar nicht die Zeit sich über so was einen Kopf zu machen)

Zu guter Letzt wäre es das einfachste die IP ans Ende zu stellen (hatte ich ohnehin schon überlegt). Nicht wegen der Möglichkeit jemanden anzeigen zu können, sondern eben einfach um zu sehen ob jede Stimme wirklich von einer anderen IP ausgegangen ist.

Ich mach mich jetzt mal drüber das als UDT oder global block zu realisieren. Evtl. bekomme ich es noch hin das soweit zu vereinfachen dass tatsächlich oben nur ein paar Variablen stehen die angepasst werden müssten und der Rest unten steht. Mal schauen wie weit ich komme (ich melde mich wenns klemmt)...  tongue

Dankeschön!

Offline