Kezdőoldal » Számítástechnika » Programozás » Miért nem működik ez a php kód?

Miért nem működik ez a php kód?

Figyelt kérdés

Egy egyszerű login rendszerről van szó, és valószínű hogy egy egyszerű hibát vétettem, de nem jövök rá h miért nem jó... ha jó adatokat írok be akkor is a kettes hibaüzenettel dob vissza, ami a hibás fhnév vagy jelszó


<?

require 'config.php';


function hiba(){


print("A mûvelet során hiba lépett fel");


}


if ($_SERVER["REQUEST_METHOD"] == "POST"){


if(isset($_POST['account-name']) && isset($_POST['account-password'])){

$fhnev = mysql_real_escape_string($_POST["account-name"]);

$jelszo = mysql_real_escape_string($_POST["account-password"]);

}


if (empty($fhnev) or empty($jelszo)){

header("Location: login.php?hiba=1");

die;

}



$reg_keres = mysql_query("SELECT * FROM felhasznalok WHERE fhnev = '".mysql_real_escape_string($fhnev)."' AND pass = '".mysql_real_escape_string($jelszo)."'");

$reg = mysql_fetch_assoc($reg_keres);

$rekordok = mysql_num_rows($reg_keres);



if ($rekordok > 0){

if ($reg["kitiltva"] == "nem"){

setcookie("fhnev", "".$fhnev."", time()+31536000);

setcookie("jelszo", "".$jelszo."", time()+31536000);

setcookie("id", "". 0 + $reg["id"]."", time()+31536000);


header("location: fooldal");

} else {

header("Location: login.php?hiba=3");

}

}


if($rekordok == 0)

header("Location: login.php?hiba=2");

}



if (isset($_GET["hiba"])) {

$hiba = 0 + $_GET["hiba"];


if ($hiba == 1){

hiba("Hiányos adatok!", "<center>Belépéshez mindenképp kell név és jelszó is, ezek nélkül nem fog menni!</center>");

}


if ($hiba == 2){

hiba("Hibás felhasználónév/jelszó!", "<center>Hibás felhasználónév vagy jelszó!</center>");

}


if ($hiba == 3){

hiba("Bamm..", "<center>Az oldalról ki lettél tiltva.<br> Ha nem tudod miért, akkor írj az oldal alján található kapcsolat menüpontban.</center>");

}

}



?>

<body>

<link rel="stylesheet" type="text/css" href="style/style.css">

<meta charset="UTF-8" lang="HU">


<head>

<title>Fórum :) - Beta</title>

<div id="loginkep"><img src="/images/lock-icon.png"></div>

<form method="post" action="login.php">

<table><tr>

<td><!-- <b><font color="#037094" size="5">Bejelentkezés</font><b><br><br>!-->

<div id="fhnev-box"><input type="text" name="account-name" placeholder="Felhasználónév"></div><br>

<input type="password" name="account-password" placeholder="Jelszó"><br>


<div id="remember"><input type="checkbox" checked="checked" name="remember"> Jegyezz meg</div><br>

<input type = "submit" value = "Belépés" class="sz1"><button type="button" class="reg-button">Regisztráció</button><br><br>

<div id="forgot-password"><a href="pw-reset.php"><font color="black">Elfelejtett jelszó :(</font></a></div>

</td>

</tr>

</table>

</form>

</head>

</body>



2018. febr. 19. 21:07
 1/5 anonim ***** válasza:
100%
Mielőtt jobban megvizsgálnánk a kódot, írd át MySQLi, vagy PDO használatával!
2018. febr. 19. 21:47
Hasznos számodra ez a válasz?
 2/5 uno20001 ***** válasza:
100%

1. a hiba() függvénynek kellenének paraméterek, ha azzal hívod őket meg

pl. function hiba($error, $explanation) {...} vagy valami ilyesmi


2. döntsd el, hogy a magyar vagy az angol nyelvet akarod használni; ne keverd!


3. A JELSZAVAKAT NE SIMÁN TÁROLD AZ ADATBÁZISBAN, használj valami hash függvényt ( [link] )


4. ÉS NEHOGY, ISMÉTLEM, NEHOGY TÁROLD A JELSZÓT SÜTIBEN!


5. ne közvetlenül kezeld a sütiket, használd a PHP session függvényeit ( [link] )


6. $hiba = 0 + $_GET["hiba"]; - nagyon ötletes, de inkább használd az intval függvényt ( [link] )


7. nincsen <html> és </html> tag


8. az egész tartalom a <head>-ben van... valahogy így nézzen ki: [link]


9. a hiba() függvénnyel ki akarsz íratni, no de az a még a <body> tag "előtt" van meghívva, így a szöveg a <body> előtt lesz a szöveg kiírva, ami durván áthág minden HTML szabványt


lehetne valami ilyesmi:


<?php


...


if (...) {

$error_msg = "lkshfkjsdhf";

}


....

?>


<html>

<head>...</head>

<body>


<?php if (isset($error_msg)): ?>

<div class="error">

<?php echo($error_msg); ?>

</div>

<?php endif; ?>


</body>

</html>



10. ez egy kisebb dolog, de inkább else-if-t használj ahelyett, hogy mindig teljesen "új" if-t hozol létre; ennél jobb (szerintem) ha itt switch-t használsz ( [link] )

2018. febr. 19. 21:57
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:

Eleve a HTML rész is hibás:

* nincs DOCTYPE

* nincs <html> tag

* a <link>, <meta> tagek a <head> elemen kívül vannak

* a <head> tag a <body>-n belül van, amin belül nem a <head>-be való elemek vannak.

* táblázatos oldalszerkezet - elavult

* <font>, <b>, <center> tag - elavult

* <br> helyett tessék css-t használni a margóhoz


A PHP-ban pár nüansz:

* A mysql függvények elavultak - helyette ott a mysqli vagy a PDO

* A jelszót titkosítatlanul nem tároljuk adatbázisban - maximum az ellenőrzőösszegét. És nem küldjük el sütiben a kliensnek.


Egyébként var_dump() segítségével nézd meg, sikeresen végrehajtódik-e a lekérdezés, mik a rekordok, hány sort ad vissza, stb...

2018. febr. 19. 21:58
Hasznos számodra ez a válasz?
 4/5 uno20001 ***** válasza:

11. és persze, SOHA TÖBBÉ NE HASZNÁLJ SIMA MYSQL-t, ott van helyette a jobb (és karbantartott) MySQLi és PDO; ráadásul a PHP7-ben már nincsenek mysql_ függvények


[link]

[link]

2018. febr. 19. 22:00
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:

Ez a kód több sebből vérzik!


1. Nem jó ötlet duplán escape-elni az inputot. Ha már az elején letisztázod, akkor az SQL query-ben miért escapeled megint?

2. A mysql függvények elavultak, NEM szabad őket használni. PHP7-ben már benne sincsenek. Helyette mysqli vagy PDO használatos!

3. Jelszót NEM tárolunk plain text-ben, csak és kizárólag hash-ként, azt is sózva. Óriási biztonsági hiba letárolni a teljes jelszót az adatbázisban!

4. Cookie-ba meg pláne nem tesszük bele a jelszót, mert az is titkosítás nélkül landolg a user gépén.

5. Adatbázisban logikai mezőt boolean vagy tinyint típusban tárolunk, 0 és 1 értékkel, nem pedig stringként "igen" / "nem" karakterlánccal!

6. A HTML-ben is használtál pár deprecated tag-et, pl FONT, ami helyett CSS-t illik használni.


Oké, lehet, hogy most tanulod csak, de az ilyeneket az elején kell megtanulni, hogy ne a rossz szokások rögzüljenek!

2018. febr. 20. 13:06
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!