Autor Zpráva
Geene
Profil *
Zdravim, jsem zacinajici phpkář a při práci jsem narazil na jeden problém. Chci udělat script co mi ošetří jestli bylo dobře zadáno ICQ.

Pr.1

if(isSet($_REQUEST['icq'])){
	if($_REQUEST['icq'] > 0 and strlen($_REQUEST['icq']) == 9){
		echo("ICQ je platne!");}
	else{echo("ICQ je neplatne!");}}
else{echo("ICQ Nebylo nastaveno");}


if(is_int($_REQUEST['icq']) Kdyz posilam icq s 999999999 tak mi to stejne vyhodnoti pokazde FALSE

Pr.2

if(isSet($_REQUEST['icq'])){
	if($_REQUEST['icq'] > 0 and strlen($_REQUEST['icq']) == 9){
		echo("ICQ je platne!");}
	else{echo("ICQ je neplatne!");}}
else{echo("ICQ Nebylo nastaveno");}


Zde se zase da projit s hodnoutou treba 44aaaaaaa, takze zase chybne

Napadlo me reseni cyklem, testovanim jednotliveho znaku. Ale prijde mi ze musi existovat i jednodusi reseni. Takze se jdu ptat zkusenejsich :-)

Thx predem za odpovedi
Majkl578
Profil
echo (!empty($_REQUEST['icq']) && preg_match('#^[0-9]{6,9}$#', $_REQUEST['icq']) ? 'platne' : 'neplatne') . ' icq';

icq cislo nemusi byt nutne 9mistne, jsou i 6mistna, dokonce i mene
gogy27
Profil
Majkl578
preg_match('#^[0-9]{6,9}+$#'
co znamenaju (co robia) tie # v tom scripte?
nightfish
Profil
co znamenaju (co robia) tie # v tom scripte?
nic, jsou to delimitery (ohraničovače)
Alphard
Profil
is_int() kontroluje i datový typ, z formuláře je to vždy text, pomohlo by is_numeric(), ale tam projde i např. 4e5

lepší bude použít regulár, který je již uvedený [#2]
Geene
Profil *
diky moc hosi, takova rychla reakce, jsem necekal
Joker
Profil
Ještě pozor na to, kdyby někdo zadal ICQ ve tvaru: 123-456-789. Aby z toho nevzniklo jen 123 nebo něco takového.
ninja
Profil
Dalsi mozny format zadany uzivatelem: "123 456 789".
Alphard
Profil
html input bych omezil na 9 znaků, to napoví
Geene
Profil *
jj ja to tak delam ze input omezim mno, ale stejne icq uzivatelu nikdy nevis
Majkl578
Profil
Alphard
a co sesti/sedmimistna ICQ? tve reseni je na uplne prd. radeji overit v php... tsss chranit pomlcky delkou retezcu...

mimochodem, gratuluji k postu moderatora, ikdyz obcas si rikam, ze nejsi ten nejvhodnejsi...
Alphard
Profil
Majkl578
Nikdy jsem neříkal nahradit PHP kontrolu tím html omezením a jako další opatření na straně klienta určitě není na škodu, na tom trvám. Šestimístná čísla to bez problémů vezme (i když já např. žádné takové v kontaktlistu nemám a asi nejsem sám), takže to nemůže způsobit problémy.
A účinek je jasný, jestli někdo bude psát 123-456-7 a zarazí se, tak mu to třeba dojde.

mimochodem, gratuluji k postu moderatora, ikdyz obcas si rikam, ze nejsi ten nejvhodnejsi...
Děkuji, je to tvůj názor, jestli chceš, můžeš ho prezentovat na vyšších místech. A piš prosím s diakritikou.
Majkl578
Profil
Alphard
nejde o to, zda to sestimistne cislo vezme nebo ne, ale o to, co vezme. protoze kdyz das input na 9 mist a nekdo ti posle 6mistne icq s pomlckama a ty to pak ukladas nekde jako integer, tak mas problem.
ja mam v kontaktech 1 sestimistny a 1 sedmimistny, asi jsem tedy jeden z mala, co se da delat.

nemam potrebu ho prezentovat na jinych mistech, nicmene tu postradam funkci "soukroma zprava", nemuseli by jsme (a nejen my ted) konverzovat v tematu.

k diakritice, jaky je postih, kdyz nebudu psat s diakritikou (obtezuje me to)?
Alphard
Profil
1. Já neříkám uložit to jak integer, všechny kontroly na serveru budou stejně, pouze těm, kteří píší 7 a více místné číslo ulehčím práci, protože si to uvědomí hned. Také by se mohly vyloučit spojovníky, mezery atd. Tohle je jedna možnost. Nevím, proč ti tak vadí, když poradím něco navíc. Nic neubírám.

2. http://alphard.howto.cz/kontakt.php

3. Postih není žádný, alespoň já o ničem nevím. Jen mi to zrovna padlo do oka. Ale určitě nejsi sám.

nemuseli by jsme (a nejen my ted) konverzovat v tematu.
když to přesáhne únosnou mez, tak nesouvisející s tématem smažu,
ninja
Profil
Alphard: A účinek je jasný, jestli někdo bude psát 123-456-7 a zarazí se, tak mu to třeba dojde.


A proc bych to nemohl zadat ve formatu s pomlckou nebo mezerou? Protoze je programator lenoch?! V tom pripade budu i lenoch ja jako uzivatel a na zadavani se vykaslu.

Osobne me velmi obtezuje, ze nektere formulare nezvladnou PSC ci telefoni cislo s mezerou. Jako kdybychom byli v dobe kamenne...
Alphard
Profil
ninja
Ano, bylo by lepší, kdyby to tak bralo. Ale mám-li si jako uživatel vybrat mezi regulárem, který to zamítne až na straně serveru a zastaví zpracování formu, a omezením na straně klienta, které mně ihned napoví, že je někde chyba, volím omezení u klienta.

Návrh scriptu, který to vyřeší lépe, můžete napsat Geenovi, sám to asi nezvládne.
Joker
Profil
Alphard
By stačilo na serveru ze vstupu vyházet pomlčky a mezery (nic jiného se snad jako oddělovač používat nebude). Třeba:
strtr($icq, array("-"=>"", " "=>""));

Pak už by mělo vyjít číslo.
Nox
Profil
Nebo =preg_replace("/[^\d]/",'',$_POST["icq")
ninja
Profil
Alphard: o JavaScriptu jste uz slysel? Moc prijemne...

if (!/^[ -]*([0-9]+[ -]*)+$/.test(document.form.icq.value)) alert ('Spatne ICQ cislo');

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: