ugrás a tartalomhoz

Űrlap ellenőrzés, nulla karakter jelentése

Castor87 · 2007. Aug. 21. (K), 20.17
Üdv!
Egy beviteli mezőn három dolgot vizsgálok meg szerver oldalon:
1.van-e benne valami
2.karakterek típusai
3.karakterlánc hossza a maximumhoz képest

A kérdéses mezőben csak a magyar abc betűi és szóköz lehet. Így ellenőrzöm:

if($name=='')
 {
  echo "Hiba1";
 }

if($name == (!eregi('^[a-zA-Z öÖüÜóÓőŐúÚéÉáÁűŰíÍ]+$',$name)))
 {
  echo "Hiba2";
 }

if(strlen($name)>'50')
 {
  echo "Hiba3";
 }
Jól működik a kód, de ha nullát (0) írok a mezőbe, akkor nem tér vissza hibaüzenetettel. "00"-ra már Hiba2-t kapok. Hogy tudnám lekezelni a "0" karaktert??

//Castor
 
1

Trim és típuskonverzió (ha jól tippelek) ...

Max Logan · 2007. Aug. 21. (K), 20.44
A $name == '' helyett inkább használd ezt (amivel a csupa szóköz is le van védve):
if ( trim($name) == "" ) { echo "Hiba1"; }
Hirtelen nem találtam meg amit kerestem, de ha jól emléxem, akkor típuskonverziónál az üres string 0-nak felel meg.

Egyébként sztem vedd bele a hossz ellenőrzést a regex-be ...
2

vedd bele, ha gondolod

Táskai Zsolt · 2007. Aug. 21. (K), 21.57
Egyébként sztem vedd bele a hossz ellenőrzést a regex-be ...


Kivéve, ha külön hibaüzenetet akarsz adni persze...
4

természetesen külön hibaüzi

Castor87 · 2007. Aug. 21. (K), 22.53
Igen, valóban külön hibaüzenet lesz.
3

részben jó

Castor87 · 2007. Aug. 21. (K), 22.52
Utólag kiderült, hogy a fehér karaktereknél sem írt hibát, de a trim() megoldotta a problémát. Viszont a "0" kérdés még mindíg nyitott, mivel a trim() csak a "\0"-t veszi ki, a "0"-t sajna nem.
5

csere

Castor87 · 2007. Aug. 21. (K), 22.59
Még az jutott az eszembe, hogy a str_replace() függvénnyel a "0"-t átírom ""-re. De ha van szebb megoldás, szívesen venném...
6

nemcsere

flash42 · 2007. Aug. 22. (Sze), 00.11
empty()
isset()
Egyrészt az empty() mindkettőre TRUE értéket ad ("", meg "0"/0 értékű). Jelen esetben nem értem miért kéne egy sztringet kicserélned ("0" -> "") str_replace() hívással, amit utána majd ellenőrzöl? Tudod milyen karakterláncot vársz ("0"), amire is hibát akarsz adni. Erre szerintem nem kell semmi beépített dolog.

if ($foo == "0"){ 
    echo "\"0\" is not allowed here!";
}
Bár lehet, hogy én nem értettem
7

=== operátor

razielanarki · 2007. Aug. 22. (Sze), 01.38
esetleg megpróbálkozhatsz a === operátor használatával, ami a teljes azonosság operátora (figyelembe veszi az adattípusokat is)

ha jól emlékszem akkor

"" == 0 -> true
"" === 0 -> false

lehet h hülyeség de egy próbát megér
9

nemjó

Castor87 · 2007. Aug. 22. (Sze), 01.53
Ennek nincs értelme, mert ezzel kizárom, hogy hibát adjon 0 esetén.
8

félmegoldás született

Castor87 · 2007. Aug. 22. (Sze), 01.51
Először is köszi mindenkinek a jótanácsokat!
"0" bevitelre mindíg úgy értelmezi, hogy üres, azaz semmi nincs a változóban. (szerintem)
Az empty() függvényt használva a "0" bevitelre kidobja a hiba1 üzenetet. Ugye mivel a 0 egy szám, így szebb lenne ha hiba2-t kapnánk, de a célnak ez is megfelel.
10

Esetleg

Ronyn · 2007. Aug. 22. (Sze), 04.17
if((empty($str))&&(is_numeric($str))){...
12

eregi() - Case insensitive

kismiska · 2007. Aug. 22. (Sze), 04.54
1. Vagyis fölösleges felsorolni az összes kisbetü mellé a nagybetüket is szerintem.
2. Nem kell trükközni semilyen konvertálással, ha nem negálnád az eregi()-t
 if($name == (eregi('^[a-z öüóőúéáűí]+$',$name)))  
3. Én is jobban szeretem a preg_*() föggvényeket.
13

ékezetes betűk locale függőek

Hodicska Gergely · 2007. Aug. 22. (Sze), 12.56
Vagyis fölösleges felsorolni az összes kisbetü mellé a nagybetüket is szerintem
Az ékezetes betűk esetén a nagy betűket nem fogja az ereg automatikusan kezelni, minimum locale függő, de lehet, hogy azt se veszi figyelembe (valószínűleg igen, de még nem próbáltam). Emiatt érdemes lehet felsorolni, ha csak nem lehetsz biztos benne, hogy a szükséges locale telepítve van a szerveren, és be is állítod a használt nyelvnek megfelelően.


Üdv,
Felhő
11

eregi az security hole

Hodicska Gergely · 2007. Aug. 22. (Sze), 04.34
Mar volt itt parszor szo rola, hogy ne hasznaljuk az ereg fuggvenyeket, mert kevesebbet tudnak, lassuak es nem utolso sorban biztonsagi lukat jelentenek (null karaktert nem kezelik megfeleloen).


Udv,
Felho
14

helyette?

Castor87 · 2007. Aug. 29. (Sze), 18.10
Mit érdemes használni helyette?
15

preg_* függvények

Max Logan · 2007. Aug. 29. (Sze), 19.15
Ott vannak a preg_* függvények ...