Autor Zpráva
Martin998
Profil *
Ludia niekedy oddeluju desatinne cisla bodkou (0.5) a niekedy ciarkou (0,5). Kedze formularove polia cestuju ako retazce, PHP tieto retazce kovertuje na cisla - a nerobi to v oboch pripadoch rovnako. Spravne rozumie len bodke (0.5 -> 0.5), retazec s ciarkou konvertne odstrihnutim casti za ciarkou (0,5 -> 0).

Konvertovat kazde formularove pole osobitne podla potreby mi pripada neelegantne. Nejaky napad?
abc
Profil
PHP tieto retazce kovertuje na cisla
PHP to určitě nedělá samo od sebe. Jaký kód používáš?
Martin998
Profil *
No trebars:

suma = 0.5

$_GET['suma'] + 1 // vysledok je 1, kedze 0.5 sa konvertne na 0
abc
Profil
konvertne na 0
se přetypuje

A zrovna jsi zvolil špatně..
Přetypuje se 0,5 na integer, kdežto 0.5 je float.
PHP pracuje s anglickým formátem čísel, kde se používá jako desetinný oddělovač tečka, nikoliv čárka.
Řešení jsou 2:
a) ve formuláři nepovolit v těchto polích čárku
b) při zpracování zaměnit čárky za tečky (str_replace)
Martin998
Profil *
a) ve formuláři nepovolit v těchto polích čárku
Ak je mozne, nechcem, aby programatorske problemy riesil uzivatel.

b) při zpracování zaměnit čárky za tečky
Toto ide. Ide o to, ze ja nechcem riesit pri kazdom formularovom poli, ze ktoru premennu parsovat a ktoru nie (zabudlivost a lenivost). Chcelo by to nejaku automatiku. Prave rozmyslam nad preg_replace tie polozky, ktore obsahuju len cisla+bodku...


Oprava:

polozky, ktore obsahuju len cisla+ciarku...
peta
Profil
Martin998:
???
Preci, kazdou hodnotu, kterou od uzivatele dostanes, musis osetrit uz jen proti parazitnimu kodu hackera. Takze veta "nechcem riesit pri kazdom formularovom poli" nedava smysl. "zabudlivost" Na to zapominat nemuzes, to je automaticke, jinak riskujes snadny prunik a napriklad smazani programu nebo databaze, protoze php takove prikazy jako delete file ma.
$_GET['suma'] + 1 Neco takoveho bych se rozhodne bal pouzit do funkce nebo sql prikazu.

Ja to resim tak, ze mam pole, kde definuji, jake formularove pole chci, jakeho jsou typu a jake kontroly na ne se maji pouzit. Pak pouziji funkci, ktera mi z toho pole vykresli formular, z toho pole precte a overi promenne podle kriterii, overene hodnoty pouzije pro generovani prikazu SELECT, INSERT, UPDATE nebo DELETE.
Jedine, co musim udelat, spravne napsat do pole typ a konroly. Coz vetsinou delam pres ctrl+c/v podobneho policka.
Nekteri jedinci kontroluji poslana data prubezne ve scriptu a ne na zacatku na jednom miste. Pak se nedivim, ze v tom maji binec a zapomenou...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0