Autor | Zpráva | ||
---|---|---|---|
Mufna Profil |
#1 · Zasláno: 22. 9. 2009, 19:12:29
Zdravím Vás. Ošetřuji vstup (má být číslo, stejně tak řádek v DB je typu INT) formuláře pomocí fce:
function check_phone($val) { $val = trim($val); $val = preg_replace("#[+()/_-]#", "", $val); if (!is_numeric($val)) { return false; } else { return $val; } } V kódu pak: $phone = check_phone($_POST['phone']); Když zadám nějaký číslo do formuláře, např: "+(420) 444-555-666" , tak funkce ho převede na 420444555666 (to se zobrazí ve strnulým formuláři OK), ale do DB se dostane úplně jiný číslo, třeba "2147483647". Dotaz na DB by měl být v pořádku, nevím čím to sice je, ale mohlo by to být třeba delimiterem u funkce preg_replace() při ošetřování vstupu ? Pokud ano, co s tím ? Kromě toho bych ještě potřeboval u reguláru ošetřit mezeru (když je, ať se nahradí "ničím") |
||
nightfish Profil |
#2 · Zasláno: 22. 9. 2009, 19:32:04
„ale do DB se dostane úplně jiný číslo, třeba "2147483647".“
bude asi lepší nastavit jiný typ sloupce, třeba varchar „Kromě toho bych ještě potřeboval u reguláru ošetřit mezeru“ tak ji dopiš mezi hranaté závorky |
||
Mufna Profil |
#3 · Zasláno: 22. 9. 2009, 19:41:08
nightfish
„Kromě toho bych ještě potřeboval u reguláru ošetřit mezeru“ tak ji dopiš mezi hranaté závorky Jak ? Takto ? $val = preg_replace("#[" "+()/_-]#", "", $val); |
||
nightfish Profil |
#4 · Zasláno: 22. 9. 2009, 19:44:42
spíš takto
„$val = preg_replace("#[ +()/_-]#", "", $val);“ i když nejsem si jistý, že ti tam nechybí nějaké escapování, takže spíš $val = preg_replace('#[ \+\(\)/_\-]#', "", $val); |
||
Mufna Profil |
#5 · Zasláno: 22. 9. 2009, 19:56:12 · Upravil/a: Mufna
nightfish
Díky za regulár. Stejně mi to ale nedá se nezeptat u mého prvého problému, proč bych měl INT nahradit třeba VARCHARem. Validace vstupního údaje probíhá samozřejmě před zápisem do DB, takže při samotném zápisu už je k dispozici pouze to číslo. Teď, když jsou ošetřený i mezery, by to snad mělo normálně projít. Zkusil jsem to, ale zas mi do DB jde nějaký hausnumero EDIT 1: A když zadám to číslo ve formu krásně za sebou a pouze čísla, tedy např: "777555000", tak to projde do DB v pořádku |
||
Kajman_ Profil * |
#6 · Zasláno: 22. 9. 2009, 20:07:33
Je to tím, že do intu nelze uložit větší číslo než 4294967295, takže 420444555666 selže. Buď bigint nebo varchar. (Já bych klidně dal varchar, co když tam někdo chce dát za firemní číslo i klapku?)
|
||
Mufna Profil |
#7 · Zasláno: 22. 9. 2009, 21:10:22
Kajman_
jj, máš pravdu, dík. Tohle jsem si neuvědomil. I když mám nastaveno INT(16) a předpokládal jsem, že tam může být až 16 číslic (což asi takto nelze, že ?) |
||
Joker Profil |
#8 · Zasláno: 22. 9. 2009, 22:15:58
Mufna:
„což asi takto nelze, že“ Skutečně nelze, to 16 je myslím jen zarovnání na daný počet cifer. |
||
Časová prodleva: 15 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0