Seite 1 von 1

CMS_VALUE default wert

Verfasst: Do 14. Sep 2006, 11:25
von lynx
hallo

eigentlich ist das ein simples modul. es soll unter konfigurieren ein auswahl menü zur verfügung stellen. man wählt den artikel aus und schon wird darauf ein link generiert. falls aber noch nichts ausgewählt wurde, kommt folgender fehler:
Parse error: syntax error, unexpected ';' in /home/share/www/seitz/cms/front_content.php(792) : eval()'d code on line 142
liegt wohl einfach daran dass die zuweisungen fehlschlagen, da die CMS-variablen leer sind.

Code: Alles auswählen

$id_cat = CMS_VALUE[10];
$id_catart = CMS_VALUE[11];
wie kann ich einfach überprüfen, ob diese CMS-variablen gesetzt sind oder wie weise ich ihnen einen default 0 wert zu ?

gruß
lynx

PS: wenn nach so nem modul bedarf besteht, poste ich es natürlich gerne wenn es bugfei ist :)

Verfasst: Do 14. Sep 2006, 11:27
von Dodger77
Versuch doch mal, Anführungszeichen um die CMS_VALUE[] zu setzen.

Eine Default-Zuweisung sollte doch so ganz einfach gehen:

Code: Alles auswählen

$value = "CMS_VALUE[1]";
if (! $value) $value = "default";

Verfasst: Do 14. Sep 2006, 11:30
von lynx
ok danke, das funktionniert.

aber gibts nicht doch ne funktion womit man CMS-variablen auf ihre gültigkeit prüfen kann?

PS: super fixe antwort danke danke :D

Verfasst: Do 14. Sep 2006, 11:51
von Dodger77
lynx hat geschrieben:aber gibts nicht doch ne funktion womit man CMS-variablen auf ihre gültigkeit prüfen kann?
Da nur du weißt, wann die Variablen gültig sind, wäre eine solche Funktion schon recht schwierig zu realisieren.

Verfasst: Do 14. Sep 2006, 12:21
von lynx
ne das weiß ich eben nicht, siehst du ja im obigen beispiel.

deswegen ne funktion, die nachschaut ob die var gesetzt ist ...
muss halt contenido intern passieren.

nen kleiner hack wäre halt:

Code: Alles auswählen

$var = "CMS_VALUE[1]";
if (strlen($var > 0))
{ 
    //var gesetzt ...
}
aber wäre halt klasse wenn contenido sowas anbietet, da diese cms-variablen halt nen contenido-feature sind.

Verfasst: Do 14. Sep 2006, 12:32
von Dodger77
Du kriegst das doch anscheinend auch so hin. Es kommt halt immer auf das Modul an und wie dort Input und Output aussehen. Da du das als Modulschreiber erledigst, liegt es auch in deiner Hand, was vom Input beim Output ankommt.

Aber wie soll Contenido erkennen, was richtig ist?

Es kann durchaus Module geben, bei denen eine leeres CMS_VALUE[] Sinn macht. Bei anderen steht dann dort ein Datum drin in einem bestimmten Format usw.

Also nochmal die Frage: wie soll Contenido das erkennen?

=> Das ist Sache des Modulprogrammierers. Schau dir dazu auch mal "docs/techref/modules/writing.modules.html" an.

Verfasst: Do 14. Sep 2006, 12:42
von lynx
ich seh schon wir sind da sehr ungleicher meinung. vielleicht liegts auch noch an meiner mangelnden erfahrung :)

danke für die hilfe

Verfasst: Do 14. Sep 2006, 13:09
von stese
nein das problem was dodger auszudrücken versucht ist folgendes:
der variableninhalt der CMS_VARS kann unterschiedlich ausschauen. z.b. nur zahlen 0-99999 dabei wäre 0 in der programmiersprache sowas wie nicht gesetzt, wäre aber durchaus je nach modul ein gültiger wert. wenn du in dem feld nur alphanumerische zeichen setzen würdest (a-z) das feld aber jetzt auch eine zahl enthält, wäre das ein ungültiger wert. wie also soll diese funktion herausfinden, welcher variablenwert jetzt der korrekte ist, wenn es nur eine globale funktion gibt? daher ist es aufgabe des modulprogrammierers diese plausibilitätskontrolle durchzuführen, der in dem fall du bist, da ich in meinem modul vll. ganz andere variablen-inhalte benötige, die z.b. standard vordefiniert den wert false verlangen. ausserdem gilt auch hier das sprichwort: traue nur deinem eigenen code und keinem anderen. damit fährt man sicherheitstechnisch auf jeden fall besser. setzt allerdings voraus, dass man ahnung hat was man tut

Verfasst: Do 14. Sep 2006, 14:36
von lynx
stese hat geschrieben:nein das problem was dodger auszudrücken versucht ist folgendes:
der variableninhalt der CMS_VARS kann unterschiedlich ausschauen. z.b. nur zahlen 0-99999 dabei wäre 0 in der programmiersprache sowas wie nicht gesetzt, wäre aber durchaus je nach modul ein gültiger wert. wenn du in dem feld nur alphanumerische zeichen setzen würdest (a-z) das feld aber jetzt auch eine zahl enthält, wäre das ein ungültiger wert. wie also soll diese funktion herausfinden, welcher variablenwert jetzt der korrekte ist, wenn es nur eine globale funktion gibt?
ich will doch nur auf NULL/Nichts checken, keine komplexe kontrolle ob gültige zeichen oder nicht. die methode muss ja nicht checkvalid heissen, checknull tuts doch auch. da ist keine aussage vorhanden obs gültig ist oder nicht und damit KÖNNTE man herausfinden ob der wert gesetzt wurde oder nicht.
und für meine zwecke: wie wärs mit checkValidArticleID?

da ich aber jetzt weiß, das gibs alles net, muss ich mich mit meinen lösungen begnügen.
stese hat geschrieben:ausserdem gilt auch hier das sprichwort: traue nur deinem eigenen code und keinem anderen. damit fährt man sicherheitstechnisch auf jeden fall besser. setzt allerdings voraus, dass man ahnung hat was man tut
contenido ... hassu selbst programmiert??? :shock:
ich hab den gründer gefunden, lasst uns feiern Bild
ich glaub die aussage ist hier falsch!

Verfasst: Do 14. Sep 2006, 14:43
von stese
nein habe es nicht selbst programmiert, das galt eher für die module. aber ich kann gut genug code lesen um zu sagen, dass passt oder das passt nicht. auch contenido hat so seine ecken - da gebe ich dir recht, aber das schlimmste tor für die sicherheit sind module, weil die eben jeder schreiben kann, wobei im core eine eher kleine gemeinde rumschreibt.

dein check ob emtpy oder nicht geht z.b. so:

Code: Alles auswählen

$value = "CMS_VALUE[1]";
if (empty($value) || strlen(trim($value)) == 0 ) {
  // leer
  $value = 'default wert';
}
wenn du eine artikelid suchst und setzt in cms var, würde ich zusätzlich noch auf integer wert prüfen:

Code: Alles auswählen

$value = "CMS_VALUE[1]";
if (empty($value) || strlen(trim($value)) == 0 || (int)$value == 0 ) {
  // leer
  $value = 'default wert';
}

Verfasst: Do 14. Sep 2006, 14:52
von lynx
jo was mich an der sache halt stört, ist die geschichte dass man den wert immer als string zuweisen muss, obwohl es in meinem fall 100% nen int ist.

Code: Alles auswählen

$value = "CMS_VAR[1]"; 
Ich bin halt der Meinung dass nen interner check, ob die variable notnull oder eine gültige artikel-id ist, schneller & effektiver als die Lösung aus deinem post.

Verfasst: Do 14. Sep 2006, 15:06
von Dodger77
lynx hat geschrieben:Ich bin halt der Meinung dass nen interner check, ob die variable notnull oder eine gültige artikel-id ist, schneller & effektiver als die Lösung aus deinem post.
Der Meinung kannst du ja sein, hast auch ein Recht auf diese. Das tut leider in diesem Fall nichts dazu, dass du eben nicht Recht hast.

Außerdem macht es, wie stese oben schon angemerkt hat und du anscheinend falsch verstehen wolltest, es durchaus Sinn, dass sich der Modulprogrammierer mit solchen Dingen auseinandersetzt.

Verfasst: Mo 18. Sep 2006, 23:37
von HerrB
Ich möchte dann doch noch ein wenig Aufklärungsarbeit leisten: Die CMS_VALUE-Werte werden ganz einfach komplett ersetzt. Weisen sie keinen Wert auf, steht da:

$Value = ;

Und das ist einfach ein Fehler im PHP-Konstrukt. Daher auch die Anführungszeichen.

Geschlossen.

Gruß
HerrB