ugrás a tartalomhoz

Kis és nagybetű szerinti beléptetés MySQL és PHP párossal

Inferno · 2008. Jan. 23. (Sze), 13.17
sziasztok!

Azt szeretném megtudni, hogy hogyan tudom pontosan a felhasználó nevének reggelésekor megadott módon beléptetni a felhasználókat az alábbi beléptetési kód átalakításával, tekát a "Próba" néven reggeltek csak a pontos nevük megadásával(Kis és nagy betűk szűrésével) tudjanak belépni. a "Próba" user így ne tudjon bejutni "próba" "PRÓBA" stb, azt szeretném ha a pontos nevet kellene megadni a belépéshez.

a nick mező ugyan BINARY ra van állítva, de a problémát nem oldotta meg!
a kódrészletem a beléptetéshez az alábbi:
if ($_SESSION['belepett']!== true)
{
  if (isset($_POST['login']))
  {
    $nick = addslashes($_POST['nev']);
    $pass = md5($_POST['jelszo']);

    $sql = "SELECT * FROM users ";
    $sql.= "WHERE LIKE BINARY(nick='".$nick."'";
    $sql.= " AND jelszo='".$pass."')";

    $query = mysql_query($sql);

    if (mysql_num_rows($query) !== 0)
    {
      $_SESSION['nick'] = addslashes($_POST['nev']);
      $_SESSION['belepett'] = true;

      header("Location: ".$_SERVER['PHP_SELF']);
    }


sajna ez így nem jó megoldás! ebben kérném a segítségeteket SOS
Nagyon köszönöm!
 
1

A mysql...

Ronyn · 2008. Jan. 23. (Sze), 13.29
alapból nem tesz kulonbséget a kis és nagybetü között....
Megoldás több is lehet például,a nevet is tárolod a jelszoval>>
$pass=md5($_POST["nick"].$_POST["pass"]);
2

A mező is binary?

janoszen · 2008. Jan. 23. (Sze), 17.56
Maga a mező is binary? Vagy csak az összehasonlítás? Egyébként meg szerintem, nem jó dolog megengedni az ilyen kis-nagybetű regeket, mert könnyen összekeverhetőek.
3

up. engem is érdekelne, ki

Castor87 · 2009. Szep. 8. (K), 14.47
up. engem is érdekelne, ki hogyan csinálja, hogy különbség legyen kis és nagy betű között.
8

Felhaszbnálónév helyett...

fchris82 · 2009. Szep. 11. (P), 12.54
Nem konkrétan a probléma megoldására fogok reagálni.
Saját tapasztalatból kiindulva: Én nem szeretem a felhasználónevet. Egyrészt nehezíti a regisztrálást, ha már foglalt. Ha foglalt, amit általában szoktam, akkor ki kell találni vmi újat. Ezzel idővel ott tartok, hogy már vagy 8-10 felhasználónevem van, és idővel visszatérve egy oldalra már nem biztos, hogy emlékszek, melyik volt az, amivel ott regisztráltam. Ráadásul erre az oldalak többsége nincs is felkészülve, csak a jelszó elfelejtésére, pedig a környezetemben már többen futottak bele ilyen problémába eddigi életük során.
Minden gondot megold, ha egyszerűen e-mail cím - jelszó párost kérsz be:
- biztosan egyedi
- az előbbi miatt sehol nem foglalt, mindenhol ugyanazt lehet használni --> később nincs káosz, elkerülhető a véletlen dupla regisztráció is
- nincs kis- és nagybetű probléma
- nem kell olyanokat ellenőrizni, hogy használt-e ékezetes vagy más speciális betűt, amivel probléma lehet, ha pl külföldről, angol billentyűzetről akar belépni (persze a jelszónál ezt még "elronthatja")
- egyből megvan az e-mail címe, amire jelszó elfelejtés esetén újat lehet küldeni --> ha nagyon minimalizálni akarjuk a regisztrációs űrlapot, akkor a jelszót elég egyszer bekérni
- ha az oldal használatához kell felhasználónév, akkor az attól még lehet, csak nem azzal kell belépni

Persze helyzete válogatja, egy online banknál ettől a megoldástól jelentősen eltérnék. Viszont az esetek többségében ez a megoldás praktikusabb.
10

off: én is gyűlölöm a felhasználó neveket

l.m.kollaratgmail.com · 2009. Szep. 12. (Szo), 20.01
Bocs!

... És nem értem mire jó! Az utóbbi 10 évben semmi nem okozott több mérgelődést, a web-ezés során! A spam-erek persze biztos szeretik az ilyen szép neveket. Az "at" és az azt követő karakterek egy ronda névre való kicserélése ezen talán segíthetne, ha ezt az okosságot 10 éve találtam volna ki. Persze, ha lesz pénzem PDA-ra és türelmem h. minden reg. aldomaint felírjak sorrendben ...

Mégegyszer elnézést, de hátha valaki azt hitte, h. a haragos szomszéd miatt csuklik rendszeresen !!!

kl
4

Binary kicsit másképp

Thom · 2009. Szep. 9. (Sze), 06.33
Szia, ezt írtad:

$sql = "SELECT * FROM users ";
$sql.= "WHERE LIKE BINARY(nick='".$nick."'";
$sql.= " AND jelszo='".$pass."')";
Én így csinálnám:

$sql = "SELECT * FROM users ";
$sql.= "WHERE BINARY nick LIKE BINARY '".$nick."'";
$sql.= "AND BINARY jelszo LIKE BINARY '".$pass."'";
Nem próbáltam, de úgy emlékszem, ez a helyes forma.
Esetleg ezt is lehet:

$sql = "SELECT * FROM users ";
$sql.= "WHERE 0 != LOCATE(BINARY nick, BINARY '".$nick."')";
$sql.= "AND 0 != LOCATE(BINARY jelszo, BINARY '".$pass."')";
Kevésbé szokványos, de működnie kell.
Azzal egyetértek, hogy jelszavakat adatbázisban nem szoktunk plain text formában tárolni, csak elkódolva. De a kérdés erre a formára vonatkozott.
Ja, és a $nick, $pass változókat természetesen escape-lni kell, ha azok POST-ból érkező értékek.
5

LIKE helyett =

csla · 2009. Szep. 9. (Sze), 21.15
Miért LIKE? A felhasználónévnek nem hasonlítani kell, hanem megegyezni, nem?

Én így járok el:

$sql_login = 'SELECT felhasznaloAZ,felhasznaloJelszo,felhasznaloStatusz,felhasznaloNev FROM `felhasznalo` WHERE (BINARY felhasznaloAZ = "'.$loginName.'")';
...
6

LIKE

ikblog · 2009. Szep. 11. (P), 10.38
A LIKE %% nélkül azonos az egyenlőséggel, csak így megmarad egy részmegfeleltetés lehetősége is.
9

?

csla · 2009. Szep. 12. (Szo), 11.33
De minek?
7

Én case insensitive-nél ilyesmit...

ikblog · 2009. Szep. 11. (P), 10.44
Pl én utf8_general_ci-t használtam egy oldalnál és ott számít a kis-nagy betű is. Mivel nem binary-ban akartam db-t, ezért a következőt csináltam.

A név mellé betároltam az md5(név) stringet egy új mezőbe, és úgy néztem össze, hogy ha mindekettő egyezik, akkor legyen csak NÉV=NÉV. Merthogy a máshol kis-nagybetűs név hash-e ugye más lesz. Ugyanakkor kiküszöböljük a hashek egyezését is, mert nézzük a nevet is. (két teljesen más string visszatérhet ugyanis azonos hash-el.

Ez természetesen rekordonként 32 karakter pluszt jelent, de bármilyen encodingnál alkalmazható.