ugrás a tartalomhoz

[PhP] Bejelentkezés.

ThePeace · Nov. 30. (Cs), 12.20
Üdv!

Van 1 kódom az miért van hogy jó adataimat írom be de helytelenül olvassa ki?


<?php
 
$felh = $_POST["users_felh"];
$pass = $_POST["users_pass"];
 
 
$con =mysql_connect("localhost","u_25862","pass","u_25862");
 
 
if(! $con){
    die('Failed to connect: Connection Failed'.mysql_error());
}
 
$query = "SELECT * FROM habile_deathrun WHERE Felhasznalonev='$felh' and Jelszo='$pass'";
$result = mysql_query($query);
 
if($result["users_felh"]==$felh && $result["users_pass"]== $pass)
    echo"Sikeresen bejeletnkeztél  Felh: ",$result['Felhasznalonev'];
else
    echo"Sajnáljuk rossz felhasználónév vagy jelszó. "; // mindig ez fut le sajnos., pedig a rendes felh nevem + jelszót írom be ami a táblába is benne van.

?>
 
1

Hibakeresés

Hidvégi Gábor · Nov. 30. (Cs), 14.24
Ránézésre elég egyértelmű a hiba, de azért ajánlom figyelmedbe az Egyszerű hibakeresés című cikket, ott minden szükséges információt megtalálsz, amivel ki lehet deríteni.
2

Problema

janoszen · Nov. 30. (Cs), 16.02
Szia,

itt tobb problema is lesz.

1. ha megnezed a mysql_query() dokumentaciojat, az nem egy tombot (array) ad vissza, hanem egy MySQL resource objektumot. Vagyis a mysql_fetch_assoc() fuggveny nelkul nem fersz hozza az adatokhoz.

2. a mysql_* fuggvenyek hasznalata deprecated, 7-es PHP-tol mar nem fognak mukodni, helyette erdemes atallni a mysqi_*-ra vagy a PDO-ra.

3. az alkalmazasod egy un. SQL injection sebezhetoseget tartalmaz mivel a felhasznalotol erkezo adatokat (felhasznalonev es jelszo) kozvetlenul beleirtad az SQL querydbe. Ezzel az injection sebezhetoseggel legjobb esetben barki be tud lepni az alkalmazasba, legrosszabb esetben letorolhetik az egesz adatbazisodat. Nezz utana es javitsd ki.
3

Ne itt kezdd

Pepita · Nov. 30. (Cs), 17.42
Először is hangsúlyoznám Janoszen 2. és 3. válaszát, ezek javítása nélkül még otthoni fejlesztői környezetben sem szabad tovább menni.
jó adataimat írom be de helytelenül olvassa ki
Egy szoftver nem tud adatokat kiolvasni. Pláne nem helytelenül.
A "kódod" pontosan azt hajtja végre, amit bele írsz.
Kezdésnek a $result = mysql_query($query); sor után tegyél be egy var_dump($result); sort..
Ezen kívül fejleszteni mindig célszerű
		error_reporting(E_ALL | E_STRICT);
		ini_set('display_errors', 1);
beállítással (összes hibát kiírja a PHP a kimenetre).

Szerintem a tanulást ne ott kezdd, hogy "csinálok egy login rendszert".
Sokan beleesnek ebbe a hibába - és bizony a gyakorlott fejlesztők között is van aki nem tudja elég biztonságosan lefejleszteni. Egyszerűbb feladattal kezdj, az még nagyon messze van, hogy éles és legalább picit biztonságos felhasználókezelést megvalósíts.
4

plaintext

firith · Nov. 30. (Cs), 21.21
És ami még fontos: ne tárold a jelszavaidat plaintext formátumban az adatbázisban, hash-eld el mindenképp!
8

Tök mindegy

Pepita · Dec. 1. (P), 20.13
Fenti kódrészletben bőven van annyi bibi, hogy teljesen mindegy, mi van a db-ben...
Szimplán a "hash-eld" felszólítás egy kezdőnek nem tudom, hogy mennyivel jelent többet egy md5($jelszo) - nál (NEHOGY valaki kipróbálja!!), és ebben a fórumtémában kicsit meg is érintettük a témát, miszerint annyira legyünk biztonságtechnikai szakértők, amennyire űrhajósok. :)
5

Ha a fentiek javítása

kuka · Dec. 1. (P), 12.11
Ha a fentiek javítása megtörtént, akkor jöhet a logika: mysql_fetch_assoc() tömbindexként alapból az adatbázisbeli mezőneveket fogja használni, márpedig a selectből úgy néz ki a mezőnevek nem users_felh és users_pass. Azaz valószínűbb, hogy inkább $result['Felhasznalonev'] és $result['Jelszo'] tömbelemeket fogsz kapni. Ha fogsz. Mert ha a felhasználónév vagy jelszó hibás, a select egyáltalán nem fog adatot visszaadni.
6

Igazatok volt!

ThePeace · Dec. 1. (P), 12.13
Üdv!

Rossz volt az egész sajnos, nem tudom hogy ezen a fórumon hogy működik, de ha lehet akkor nyugodtan zárjátok a témát. és köszönöm mindenkinek aki segített (bocsánat 2-3 napja kezdtem a php-t)


További szép napot!
7

Semmi gond

Pepita · Dec. 1. (P), 20.05
Szívesen segítünk, akkor is, ha most kezdesz fejleszteni. Ezen a fórumon általában így működik. :)

Ebben az esetben viszont tényleg nem szabad felhasználókezeléssel indulni, mert hatalmas bukta lesz.

HTML - CSS elsőre. Csinálj pár statikus oldalt, legyen annyira szép, hogy meg lehessen nézni.
JS a második. Legyen valami kis logika, ami "működik". Pl ha egy képre kattintok, akkor az kezdjen el fel - le ugrálni. :) Vagy az oldal betöltődése után az a menü, amelyiknek éppen az oldalát látom, az legyen színesebb a többinél ("aktív menü").
PHP a harmadik. Pl a menü egyetlen fájlban legyen, mégis mindegyik oldalon látsszon és ugyanott. Aztán legyen egy form, ahol bekérjük a user nevét, és ha elég hosszú nevet beírt, akkor írjuk ki neki, hogy "Szia [beírt név]! Hogy vagy?" Aztán egy kicsit legyen komolyabb ellenőrzés, ha olyasmit küld be, ami valószínűleg nem név, akkor csak azt írjuk ki, hogy "ne szórakozz!".
MySql a negyedik. Csak ha fentiekkel már lett egy pici rutin, csak akkor kezdünk el bármit is "adatbázisolni".
Először "csak" mentsük el egyetlen táblába az összes beérkező adatot, de ezt biztonságosan tegyük, bármit beírt a user, mindenképp azt és csak azt tegyük egyetlen táblába. Legyen mégegy oszlop, a státusz, ezzel megjelöljük, hogy a PHP-s részben megvalósított ellenőrzés szerint ez rendes név, vagy szórakozott velünk.
Következő lépésként jöhet mondjuk egy kis type ahead, leendő ajax és MySql tudásunk segítségével "dobjunk ki" a név input mező alá (szépen, mintha lenyíló lenne!) 5 lehetséges értéket, ha már beírt legalább 3 betűt. Természetesen olyanokat, amik tartalmazzák azt a szöveget, amit beírt.

Ezen az úton haladj.
Rajtad múlik, hogy mennyi idő, megunod-e közben, stb.
Hidd el: jót akarunk, csak azért írtam ezt a "mesesztorit" a sorrendről, mert nem szeretném, hogy beletörjön a bicskád. Ha csak ennyit végigcsinálsz - pusztán a tanulásért -, akkor menet közben Te is rengeteg dolgot meg fogsz látni, amik miatt nagy kár lett volna "felhasználókezelést" "hegeszteni". (Nem véletlen az idézőjel.)