Seite 1 von 1

Newsletter erzeugen -> nichts passiert(bei Redakteuren)

Verfasst: Di 27. Sep 2005, 08:53
von n0Fear
Hallo,

ich habe gerade die CSV von vorletzte Woche installiert und wollte dessen Newsletter-Funktionalität nutzen. Funktioniert soweit auch super nur können benutzer die keine Admin-Rechte haben keinen "Newsletter erzeugen", obwohl Sie dieses Recht im Rechtemanagement zugewiesen bekommen haben.

In welcher Datei müsste man gucken um, das zu beheben oder ist das nur bei mir so ?

MFG

Verfasst: Di 27. Sep 2005, 09:17
von emergence
hmm...

mal kurz angesehen -> include.newsletter_edit.php

da findet sich reihenweise (? 3x)
$perm->have_perm_area_action("newsletters", "...

die area ist aber sicher nicht newsletters sondern eher news
ob es andere positionen gibt wo das falsch ist kann ich momentan nicht sagen...., da muss HerrB noch was dazu sagen...

ich verschieb das mal nach bugs...

Verfasst: Di 27. Sep 2005, 09:37
von n0Fear
jop liegt daran.

Hier der komplette Fix:

include.newsletter_edit.php Zeile 27-39

Code: Alles auswählen

if ($action == "news_create" && $perm->have_perm_area_action("news", "news_create")) {
	$newsletter = $newsletters->create(i18n("-- new newsletter --"));
	$idnewsletter = $newsletter->get("idnews");
	$page->setReload();		
} else if ($action == "news_duplicate" && $perm->have_perm_area_action("news", "news_create")) {
	$newsletter = $newsletters->duplicate($idnewsletter);
	$idnewsletter = $newsletter->get("idnews");
	$page->setReload();		
} else if ($action == "news_delete" && $perm->have_perm_area_action("news", "news_delete")) {
	$newsletters->delete($idnewsletter);
	$idnewsletter = 0;
	$page->setReload();
}

Verfasst: Di 27. Sep 2005, 17:41
von HerrB
Cool, der Fehler ist da schon seid biblischen Zeiten drin. Danke, korrigiert.

Gruß
HerrB

Verfasst: Mo 10. Okt 2005, 09:40
von n0Fear
so hab nochn Fehler gefunden. Der Messagetext des Newsletters wird escaped in die DB geschrieben aber beim auslesen bzw versenden nicht wieder deescaped.

Hier der Fix:

include.newsletter_edit.php @ 109

Code: Alles auswählen

	$message	= new cHTMLTextarea("message", stripslashes($newsletter->get("message")),80,20);
class.newsletter.php @ 224

Code: Alles auswählen

	$message = stripslashes($this->get("message"));
MFG

Verfasst: Mo 10. Okt 2005, 10:05
von HerrB
Mmmh? Das weist aber IMHO mehr auf einen Mangel in der verwendeten Klasse hin. Die Message wird über $newsletter->set("message", $message); gespeichert und über $newsletter->get("message") zurückgeholt.

Eigentlich sollte sich die Klasse, die set und get zur Verfügung stellt, darum kümmern. Gucke ich mir nochmal an. Danke.

Gruß
HerrB

Verfasst: Di 25. Okt 2005, 11:26
von timo
ähm ein kommentar dazu:

set speichert den Wert genauso wie er übergeben wird, also bei einer Übergabe von \"test wird auch \"test in die DB geschriebene und genauso wieder zurückgegeben

grundsätzlich müssen alle werte, die von extern kommen mit stripslashes bearbeitet werden.

früher war es so, daß man (aus der faulheit heraus) einfach den externen Wert in das SQL-Statement gepumpt hat, und es hat eben "zufällig" funktioniert ;)

Verfasst: Di 25. Okt 2005, 11:39
von HerrB
Ähm, so ganz habe ich das noch nicht. Das Problem ist, dass wenn ich "Macs' Weinladen" eingebe, aufgrund des urlencode "Macs\' Weinladen" in der DB steht. urldecode wiederum belässt \', d.h. es kommt "Macs\' Weinladen" raus.

So war auch meine Frage gemeint: get und set sollten IMHO so gestrickt sein, dass das, was reingeht, auch wieder rauskommt (und das ist nicht der Fall).

Deine Aussage bedeutet, dass ich zwar Daten über set einfach so speichern kann, aber alles, was mit get aus der DB kommt, wieder mit stripslashes putzen muss - das soll so sein? Da fummele ich mir ja den Wolf...

Gruß
HerrB

Verfasst: Di 25. Okt 2005, 12:38
von timo
ähm das kann ich nicht bestätigen...

ich bin zu 99.999% sicher, daß das, was über set eingegeben wird, auch über get so zurückgeliefert wird

wäre das nicht der Fall hätte ich das bei meinen 230932094 Projekten, die die GenericDB auch einsetzen, gemerkt ;)



vielleicht reden wir auch aneinander vorbei: ich meinte, daß wenn du folgendes hast:

Code: Alles auswählen

$objekt->set("feld", $_GET["wert"]);
es nicht funktionieren wird, da PHP über die magic_quotes ein $_GET["wert"] mit slashes versieht

d.h. wenn du externe Daten in die DB speichern willst, mußt du es immer mit

Code: Alles auswählen

$objekt->set("feld", stripslashes($_GET["wert"]));
machen
Deine Aussage bedeutet, dass ich zwar Daten über set einfach so speichern kann, aber alles, was mit get aus der DB kommt, wieder mit stripslashes putzen muss - das soll so sein? Da fummele ich mir ja den Wolf...
Nein eben nicht ;) Ich meinte das gerade andersrum.