Autor Zpráva
Lukáš15
Profil *
Chcel by som sa spýtať, ako overím, či v premennej sú len tie znaky ktoré chcem, viem že to bude pravdepodobne cez ereg, alebo nejakú podobnú funkciu, ale nemôžem to nájsť, ani vygoogliť. Pozeral som php manuál, a zbuchal som niečo takéto:

 function JeNickOk ($meno)
  {
    if (ereg(">\"@\$§&",$meno)) {
    return true;
    } else {
    return false;
    }    
  }


a potom som ju normálne dal medzi ostatné overovania:
elseif  (JeNickOk ($_POST["login"])) echo "Meno môže obsahovať len písmená a čísla";


Lenže nejako nefunguje, resp. funguje zle, chcem sa vyvarovať znakov ako §, & atd. a chcem povoliť do nicku len a-z, A-Z, 0-9, _.
Tak som skúšal ten ereg vyššie ako [a-zA-Z0-9] ale tiež fungovalo len polovične. Funguje to len ked sa dajú samé nepovolené znaky napr. §§§§ takýto nick to pekne odfiltruje a vypíše hlášku, ale napr. kdsa§§§ už to pustí a registruje. Mohol by tu prosím niekto upravit tú funkciu, tak aby to fungovalo?

Ďakujem
Joker
Profil
Lukáš15:
První věc, viz manuál, funkce ereg je deprecated a nedoporučuje se ji používat. Náhrada je preg_match.

chcem povoliť do nicku len a-z, A-Z, 0-9, _ … Tak som skúšal ten ereg vyššie ako [a-zA-Z0-9] … Funguje to len ked sa dajú samé nepovolené znaky
Upřímně řečeno mě zaráží, že je někdo tohle všechno udělá a přitom ho nenapadne, že by ta podmínka šla obrátit: Když mám nějakou malou množinu znaků (řekněme jich je 63, takže při použití Unicode pořád zůstává přes 100 000 těch zakázaných), tak co prostě testovat, jestli ten řetězec obsahuje jenom povolené znaky a pokud neobsahuje, tak je špatně?
^[a-zA-Z0-9_]+$
Ale ani ten negativní výraz by nebyl takový problém- Obsahuje řetězec znak, který není z té množiny?
[^a-zA-Z0-9_]


Mimochodem, funkce JeNickOk je logicky špatně; V případě, že nick není OK, vrací JeNickOK true, pokud je OK, vrátí false.
Lukáš15
Profil *
Viem o tom že je zastaraná, ale skúšal som to na základe jedného tutorialu staršieho.

Úprimne povedané, u tejto funkcie mám teda poriadny chaos, ako vlastne funguje.

Ja som testoval verzie:
 function JeNickOk ($meno)
  {
    if (ereg("[a-zA-Z0-9_]",$meno)) {
    return true;
    } else {
    return false;
    }    
  }


a testoval som aj opačne:
 function JeNickOk ($meno)
  {
    if (ereg(">\"@\$§&",$meno)) {
    return true;
    } else {
    return false;
    }    
  }


Tie detaily ako či je funkcia logicky správne teraz neriešim, to je banálna vec, to by som po 1 testovaní opravil, a keď som to aj testoval, tak to bolo správne, lenže keď som to tu kopíroval tak už som mal poskúšaných viacero variant, a pravdepodobne som to zabudol upraviť pri skúšaní nejakej inej. Takže mojim úmyslom bolo najskôr overiť, či sa v danej premennej $meno nachádzajú len a-zA-Z0-9_, a potom, keď to nefungovalo, som to skúsil otočiť, tak ako som to aj v prvom príspevku napísal, aby to testovalo či sa v premennej nachádza nejaký z tých zakázaných znakov (napísal som ich tam len tých pár, ktoré by mohli byť použité pri nejakom útoku ako XSS atp.). Takže pokial som správne pochopil tvoj príspevok, a
Upřímně řečeno mě zaráží, že je někdo tohle všechno udělá a přitom ho nenapadne, že by ta podmínka šla obrátit:
ma to napadlo.

ďakujem veľmi pekne za pomoc! Teraz to už funguje, v podstate som to mal pôvodne skoro správne (tú prvú vec čo som testoval ako som uviedol v tomto príspevku vyššie), len mi chýbala strieška pred hranatou zátvorkou, a + s $ za ňou. A zároveň sa chcem ospravedlniť, za to že v posledných dnoch som tu vytvoril nejakú tu tému, ale bohužial som vkuse len začiatočník, takže zčasu načas sa stane že nejakej funkcii nerozumiem, alebo podobne. :) Ale ďakujem za tvoju pomoc a trpezlivosť, snažil som sa použiť google, aj tuto na fóre som hladal, aby som predišiel zakladaniu témy.

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