MySQL táblák értékének összehasonlítása
Sziasztok!
Nekem avval akadt problémám amikor nekikezdtem egy beléptető rendszer elkészítésének, hogy odáig rendben, hogy ellenőrzőm van-e adat,stb... de amikor arra kerülne sor, hogy azt ellenőrizze, hogy a beírt (mezőbe) és a db.-ben lévő adat egyezik-e, akkor mindig azt írja ki amit hibaüzenetnek kreáltatok vele -noha beírt felh.név/jelszó páros helyes is - ha valami baj van a lekérdezésselEz volna a probléma
Működése:
1, megvizsgálja üres-e a mező. OK
2,Megvizsgálja, hogy nem-e rövidebb a jelszó/felh.név mint 2 karakter. OK
3,Megvizsgálja, hogy a táblában vannak-e sorok. OK
Pontosan amivel problémám lenne az ez a sorMég ha azt is írom be felh.névnek/jelszónak ami az adatbázisban van akkor is, a hibaüzit írja ki!
Köszönöm előre is a segítségeteket!
Sziasztok!
■ Nekem avval akadt problémám amikor nekikezdtem egy beléptető rendszer elkészítésének, hogy odáig rendben, hogy ellenőrzőm van-e adat,stb... de amikor arra kerülne sor, hogy azt ellenőrizze, hogy a beírt (mezőbe) és a db.-ben lévő adat egyezik-e, akkor mindig azt írja ki amit hibaüzenetnek kreáltatok vele -noha beírt felh.név/jelszó páros helyes is - ha valami baj van a lekérdezéssel
<?php
$felh_nev = $_POST['fnev'];
$jelszo = $_POST['jelszo'];
/*SESSION elindítása*/
session_save_path("sessions");
session_start();
/*--------------------------*/
if (empty($felh_nev) || empty($jelszo)) {
echo 'Hiba! Valamely mezo ures! Kerem lepjen vissza es toltse ki! Koszonom!';
}
elseif((strlen($felh_nev)<2) || (strlen($jelszo )<2))
{
echo'Hiba! Valamely mezo erteke rovidebb mint 2 karakter! Kerem lepjen vissza es javitsa!';
}
else {
//----------------------------------------------------------------
include 'mysql/mysql_conn.php';
include 'mysql/mysql_select_db.php';
$result = mysql_query("SELECT * FROM felhasznalok");
$tabla_hossz = mysql_num_rows($result);
$tabla = mysql_query("Select * FROM felhasznalok WHERE fnev="$felh_nev." and jelszo=".$jelszo." ");
//---------------------------------------------------------------
if($tabla_hossz<0)
{
echo'Hiba! Ures az adatbazis!';
}
elseif($tabla) {
$row = mysql_fetch_array($result);
$_SESSION['belepve']=$row['fnev']; /* Ez jelzi, hogy sikerült, és bárhol ki is irathatod */
header("Location: index2.html"); /* Átirányít */
exit; /* Biztossá teszi azt, hogy az következő kódrész nem fut le. */
}
else {
echo 'Hiba! A felhasznalonev vagy a jelszo nem letezik!';
}
}
?>
Működése:
1, megvizsgálja üres-e a mező. OK
2,Megvizsgálja, hogy nem-e rövidebb a jelszó/felh.név mint 2 karakter. OK
3,Megvizsgálja, hogy a táblában vannak-e sorok. OK
Pontosan amivel problémám lenne az ez a sor
$tabla = mysql_query("Select * FROM felhasznalok WHERE fnev="$felh_nev." and jelszo=".$jelszo." ");
Köszönöm előre is a segítségeteket!
Sziasztok!
elgépelés
ezenkívül nagyon megterhelő, hogy minden bejelentkezésnél lekéred az egész táblád, ezentúl felesleges a beírt adatokat azonosításnál ellenőrizni (hossz) hiszen azokat nem adhatta meg regisztrációkor (mert ott viszont ellenőrzöd) ha meg nem adhatta meg, akkor úgyse tud bejelentkezni.
+A jelszót ne valódi formájában, hanem valami hash értékben tárol biztonsági szempontból szvsz.
nem jó...
Köszi a választ, csak az a baj, hogy kitettem oda a pontot, és még így sem jó...
UI.: Ezt a hash dolgot el tudnád nekem magyarázni miképp kell? Megköszönném!
Szia!
huhh
var_dump($tabla); ez kiírja a nyers változót, amit ha becopiznál, akkor tudnánk érdemben segíteni.
2. hibás ez a sor is:
$row = mysql_fetch_array($result);
a $result helyett $tabla kene
3. illik a stringeket egyes idézőjelbe írni:
$tabla = mysql_query("Select * FROM felhasznalok WHERE fnev='".$felh_nev."' and jelszo='".$jelszo."' ");
4. lehet, hogy a karakterkódolással is gond van
sql injection
hatékonyság, idézőjelek, escapelés
1. Miért fontos tudatni a belépővel, hogy üres a tábla? De ha fontos, akkor miért nem egy select count(1) from tabla lekérdezéssel kérdezed le miért select *-gal? Az előbbi 1 db értéket ad vissza a tiéd meg mindent lekérdez, ez nagy tábla/nagy forgalom kombóban igencsak odaverhet az adatbáziskezelőnek....
2. Rossz a lekérdezésed (az sql injection az egy dolog... :) idézőjelek lemaradtak.
Rossz...
Köszi a sok választ, de ennek ellenére még mindig rossz, most a köv. probléma állt elő:
Bármit írok be a felh.név/jelszó mezőbe elfogadja és mindjárt oda ugrik ahová csak akkor kellene amikor a felh.név/jelszó páros egyezik!
Most így néz ki a kódom:
De ehelyett - mint már fentebb is említettem - bármit is írok be, egyszerűen beléptet, mintha ez lenne a helyes felh.név/jelszó páros.
Nagyon köszönöm az eddigi sok segítséget!
Sziasztok!
vegyük sorba
futtatod ezt a parancsot, az eredményt (ami vagy erőforrás vagy hamis érték lesz) a $result változóba rakod
ezek után 3 lehetőség van:
1.
ha üres a felhasználónév vagy a jelszó, kiírsz egy hibát
2.
ha mindkettőben van érték és a $result nem hamis (nem lesz az, mert egy erőforrás lesz benne, ha szintaktikailag helyes az sql parancs) akkor beléptél
(itt látszik, hogy a notice hibákat nem is figyeled, mert ha rossz adatokat adsz meg, a $row változónak nem is lesz fnev indexű eleme)
3.
ha mindkét változóban (felh_nev, jelszo) van érték és hamis van a $resultban (azaz helytelen az sql parancsod) akkor kiírod, hogy ilyen nincs.