Newsletterverwaltung via MySQL

hallo

bin seit kurzem beim bplaced registriert und richte mir so langsam meine seite ein. nun wollte ich nen newsletter integrieren. und zwar hatte ich mir das wie gefolgt gedacht:

die newsletter-interessenten geben ihre e-mail-adresse in ein feld ein und schicken das dann ab. über ein php-script wird dann diese mail-adresse zusammen mit einem vorher erzeugten verifizierungsschlüssel in einer mysql-db abgelegt. danach wird eine mail mit nem link, der sowohl die mail-adresse als auch den veri-schlüssel enthält an die entsprechende Mail-Adresse versendet. wenn man dann da drauf klickt, öffnet sich eine bestätigungsseite. Dabei werden die E-Mail-Adresse und der Schlüssel via $_GET übertragen. Dann soll es einen Abgleich geben der übertragenen Daten mit den in der DB gespeicherten. Falls alle Daten stimmen soll dann die E-Mail-Adresse in die eigentliche newsletter-empfänger-db eingetragen werden und der eintrag in der “temporären” tabelle gelöscht werden.

so, auf meinem rechner funktioniert das ganz gut und schön. ich hab jetzt nur das problem, dass ja die änderungen in der db nur von autorisierten nutzern ausgeführt werden können. auf meinem rechner hab ich das mit nem nur teilweise privilegiertem nutzer, den ich neu angelegt hatte, getan - was bei bplaced ja aber nicht geht. und ich hab auch keinen bock meine admin-zugangsdaten in den jeweiligen php-scripten zu speichern, damit die automatisch verwendet werden können.

fragen:
was sagt ihr zu dem generellen konzept? (bin noch neuling auf dem gebiet)
hab ich irgendetwas dabei übersehen?
wie könnte man das machen, dass sich die “interessenten” in ne db eintragen können? ich wäre nämlich schon an einer automatisierten lösung interessiert, weil ich keinen bock habe, jede adresse per hand in die db einzutragen…

grüße,
tylle.

hi,

dafür gibt es sicherlich eine lösung - notfalls kannst du ja einfach eine weitere mysql-datenbank anlegen und diese dann nur dafür benutzen, soweit ich dich richtig verstanden habe.

ich glaube es wäre ganz sinnvoll, dass du noch etwas mehr details dazu erläuterst, zB. was wo genau über welche übertragung gespeichert werden soll, weil die bisherige erklärung lässt noch recht viele fragen offen, daher wärs einfach besser, wenn du das mal schematisch erklärst, damit man dir eine eindeutige antwort geben kann…

ciao

also der versuch einer schematischen Darstellung:

also Dante will sich in den newsletter-verteiler einschreiben.

p.s. der bestätigungslink wird natürlich an die von dante angegebene e-mail-adresse geschickt.

so, ich hoffe, es ist jetzt besser verständlich.

das mit einer extra datenbank hatte ich auch schon überlegt, aber besteht da nicht die gefahr, dass da halt nicht nur inhalte verändert werden können, sondern auch die komplette struktur? ich meine letztendlich schlimm waers ja nicht (bei regelmäßigen backups und so). wenns keine besseren lösungen gibt, werd ich das dann wahrscheinlich so machen… wollt halt trotzdem mal nachgefragt haben.

Du kannst das ganze mit einer einzigen Tabelle lösen, und ohne irgendwas machen zu müssen:

Deine Tablle hat folgende Struktur:[code]

Feldname Type [Enum-Werte]/Extra
id int auto_increment
e-mail varchar
key varchar
mode enum ‘online’,‘offline’
---------- ----------- ------------------

[/code]

User trägt sich ein, und sendet ab ->
Script trägt die Mail ein mit mode = ‘offline’, erzeugt key und trägt diesen mit ein, sendet dann eine meil mit einem link der form examlpe.com/newsletter.php?mode= … key=890def ->
beim bestätigen wird der eintrag mit der übergebenen id ausgelesen und der key verglichen.
wenn alles ok, dann wird mode in ‘online’ geändert.
-> beim senden der news wählst du halt nur einträge mit mode = ‘online’ aus (SQL: " … WHERE mode = ‘online’ …")

Das kann alles ganz automatisch laufen :wink:

Ich würde der tabell noch ein feld hinzufügen:

Feld: date
Typ: INT (15)

bei einem eintrag wird dann darin der timestamp (php: time()) gespeichert.
Dann machst du alle 48 stunden oder jede woche mal nen Cronjob (bsp: cron-job.org ) welcher ein “löschscript” ausführt. Dieses Löschscript löscht alle alten einträge, also wo mode = offline und date sagen wir mal 486060 (=> 48 stunden) kleiner ist, als der aktuelle timestamp.

mfg joey

ok, vielen dank für die anregungen. habs jetzt erstmal so gemacht, wie ichs beschrieben hab - weil ich halt den tag über n bissel was friemeln wollte, aber die variante mit nur einer tabelle ist natürlich nicht so fehleranfällig und wahrscheinlich leichter zu pflegen… mittel- bis langfristig werd ichs dann wahrscheinlich dahingehend abändern.

das mit dem cronjob klingt auch interessant - werd ich mal durcharbeiten (soweit neben uni und hausarbeiten möglich :wink:

Das mit dem cronjob finde ich überflüssig.
Das löschen von alten Einträgen kann man mit einem einzigen SQL Befehl regeln. Man packt es dann einfach irgendwo zwischen, z.B. wenn ein neuer Eintrag gemacht wird.

in der Variante mit dem PHP Timestamp könnte es dann kurz und bündig so ausschauen:

mfg Balmung

hi,

benutz für timestamps am besten NOW() und für zeitabstände zB. NOW() - INTERVAL ‘1 week’; postgresql kann das etwas besser als mysql, sollte für dich aber auch mit mysql reichen.

ciao

Bei MySQL, wenn date vom Dateityp datetime ist sollte das damit klappen (afaik):

mfg Balmung