hook_update() és hook_insert()

eMeLA képe

Készítettem egy modult, ami létrehoz egy térkép node-ot.
A hook_insert()-ben a $node változóba nem kerül bele az egyik elem (map_data), pedig a $_POST változóban benne van. Nem tudok rájönni miért. Ha valakinek van ráérő ideje, és kedve forráskódot bogarászni... :) Persze működik a tárolás, csak az a kérdés meddig !?

http://www.emela.hu/drupal/gmap_node.rar

Drupal verzió: 
pp képe

Én nézem és nekem belekerül. Van $node->map_data változó és az az érték van benne amit átadtam. Érted? Amit átadtam. Mivel ez egy rejtett változó ezért az is marad benne elintézi neked a form_api, hogy ne lehessen rommáhekkelni a modulodat. Javaslom tegyél hidden helyet egy textfield-et és abba told az adatokat. A textfield-et nyugodtan el is rejtheted.
Én anno ezt úgy csináltam, hogy volt két beviteli mező a lat és lang valamint a cím. A lat és lang el lett rejtve, ha volt js és a térkép a színes szagos bevitellel pedig megjelent. A Drupal nem tudta, hogy van térkép ő csak azt látta, hogy a megfelelő mezők megfelelő képen ki vannak töltve.

http://drupal.hu/hirek/20080331/palocz-istvan-terkep-es-drupal

pp

0
0
eMeLA képe

A probléma ott van, hogy insert-nél nekem nem kerül bele semmi. :(
Azt hiszem ideje egy szűz drupal alá betennem a modult....

A textfield esetén a form_api, vagy valami más vizsgálja, hogy került-e bele pl. javascript ?

0
0

...mit tudok: http://web.termuves.hu

pp képe

Feltettem a modulodat és új létrehozásakor a kiírt cuccban ott volt minden. Ha default_value-t írtam neki akkor az is megjelent benne.

A textfield esetén a form_api, vagy valami más vizsgálja, hogy került-e bele pl. javascript ?
Ha js-el módosítod a tartalmát akkor azt hogy az öreg ördögbe vizsgálná szerver oldalon valaki is? Olyat lehet csak, hogy nem elfogadható tartalmak ne jöjjenek vissza. Pl. rejtett mezőt nem módosíthat a júzer, tehá az nem változhat, select-ből nem jöhet olyan érték ami nem volt benne az option-ok között stb.

ha javascript kódot akarsz beletenni azt meg valószínűleg egy kimeneti xss filter fogja kidobni a kódból. (ezt könnyedén megkerülheted)

pp

0
0
eMeLA képe

Mégsem értem:
Mivel ez egy rejtett változó ezért az is marad benne elintézi neked a form_api, hogy ne lehessen rommáhekkelni a modulodat. Javaslom tegyél hidden helyet egy textfield-et és abba told az adatokat

Ne használjak hidden mezőt, mert az nem biztonságos, helyette inkább textfield-et (elrejtve), vagy a form_api elintézi, hogy ne lehessen rommáhekkelni az oldalam, de azért inkább használjak textfield-et ?

Lényeg a lényeg: melyik a biztonságos(abb) ?

0
0

...mit tudok: http://web.termuves.hu

pp képe

Az alap felállás az az, hogy a hidden mező az egy olyan mező, amibe a júzer a kliens oldalon nem írhat semmit, azt nem módosíthatja. Legalábbis ebből a totálisan téves kiindulási pontról szoktak az egységsugarú kezdők elindulni. Aki már látta a firebug-ot az tudja, hogy nevetségesen egyszerű ezeket módosítani. (egyébként se nehéz, de ehhez szakértelem se kell, csak fogod és átírod) Ezért van az talán, hogy a formAPI, melyet nagy tudású emberek írtak talán nem engedi, hogy módosított adatok menjenek feléd. (ha lesz időm utána túrok)

Van viszont egy szabály, a Nagy Tudás végletekig leszűrt sűrítménye, mely önmagában megmutatja az Egyetlen Egy Igaz Utat számodra és megválaszolja fenti és jövőben felteendő kérdéseidet a témában:

Sose bízz a felhasználótól jövő adatokban!

pp

0
0
eMeLA képe

Miután a hook_insert $node->map_data-ban továbbra sem volt semmi :)
(legalábbis nálam :)

A

$form['map_lng'] = array(
    '#type' => 'textfield',
    '#value' => isset($node->map_data) ? $node->map_data : '',
  );

helyett
$form['map_data'] = array(
    '#type' => 'textarea',
  );
 if ($node->map_data) $form['map_data']['#default_value'] = $node->map_data;

került.

Ami nem tetszett a FormAPI-nak(?) az a '' value érték (vagyis a semmi). Ezenkívül mivel több pontot is meg lehet adni a térképen (és törölni is lehet őket), ezért a karakterek száma meghaladta a 128-at. A textfield alapbeállításon dobta az adatokat, csak kiegészítette még egy hibaüzenettel. Valószínű a hidden ugyanezt tette, csak nem reklamált.

Most működik.

0
0

...mit tudok: http://web.termuves.hu

pp képe

jaja... ezen nekem is mindig átsiklik a szemem. A lényeg, hogy sose használj #value-t mert az felülírja azt ami jött a POST-ban. A helyes a #default_value

pp

0
0