Autor Zpráva
Mufna
Profil
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
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
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
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
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 *
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
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
Mufna:
což asi takto nelze, že
Skutečně nelze, to 16 je myslím jen zarovnání na daný počet cifer.
Toto téma je uzamčeno. Odpověď nelze zaslat.