PHP login scriptnem mi a hibám?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<?php
include('php/login.php');
?>
<HTML>
<HEAD>
<title>AIRSOFT</title>
<link rel="stylesheet" href="css/style.css">
<script src="js/jqueryBox.js"></script>
<script src="js/scriptBox.js"></script>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/carousel.js"></script>
<script type="text/javascript">
$(document).ready(function() {
carousel();
});
</script>
</HEAD>
<BODY>
<?php if(!isset($user)){ ?>
<section>
<article class="box">
<header>Login Section:</header>
<ul>
<form action="index.php" method="POST">
<li><label>Username: </label><input type="text" id="x" name="username"></li>
<li><label>Password: </label><input type="password" id="y" name="password"></li>
<ul class="gomb">
<li class="RegisterGomb"><a href="#">Register Here!</a></li>
<li class="LoginGomb"><input type="submit" name="submit" value="Login"></li>
</ul>
</form>
</ul>
</article>
</section>
<?php }
if(isset($user)){ ?>
<div class="test">
asfasfasfas
</div>
<?php
}
?>
</BODY>
</HTML>
Az abajom, amikor beirom a jelszot meg a Passwordot, ugyan ezt az ablakot hozza visssza.
PHP CODE:
<?php
if(isset($_POST['submit'])){
$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="user"; // Database name
$tbl_name="user"; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$myusername = $_POST['username'];
$mypassword = $_POST['password'];
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
if($count==1){
$user;
}
else {
echo "Wrong Username or Password";
}
}
?>
UI: PHP Különórát vásárolnék
1. mi a baj azzal, ha ugyanazt az ablakot hozza vissza? ez a lényege
2. mysql-t már nagyon régen nem használunk, mert nem biztonságos..helyette mysqli (egyszerűbb is)
Az hogy amikor a $user nincs beállítva azt a sectiont kell megjeleníteni amiben a Inputok vannak.
Amikor a count=1 akkor kellene megkapni a $user változót és akkor kellene megjeleníteni a bejelentkeztél echo-t.
formnál az action-be vagy #-t szoktunk használni, vagy (többek közt) $_SERVER['PHP_SELF'], esetleg bizonyos esetekben $_SERVER['REQUEST_URI']
Egyébként ez most azt csinálja, hogy ha létezik adatbázisban az adott felhasználó, akkor nem történik semmi ($user; önmagában értelmezhetetlen cselekvés), egyéb esetben pedig kiírja, hogy "Wrong Username[...]"
Folytassuk ott, hogy maga a HTML-kód sem jó (tessék ellenőriztetni a [link] oldalon!):
- <section>, <article>, <header> tagek HTML5-ben vannak, de te HTML 4.01-et használsz.
- ha kijavítjuk HTML5-re, akkor az <article> illetve a <section>ben a címsorok hiányát taglalja
Szóval, ha csak az űrlapot nézzük, én ezt a leegyszerűsítést javasolnám:
a script.js-be belekerülhet a
$(document).ready(function() {
carousel();
});
Lássuk a PHP-t. Mint előttem is javasolták: MySQL helyett MySQLi vagy PDO. És a felhasználótól érkező adatokat tessék ellenőriztetni mysqli_real_escape_string-gel vagy prepared statement használatával - egy SQL injection-támadásnak te sem örülnél.
Sikeres bejelentkezés esetén pedig hozz létre egy munkamenetet (például: $_SESSION["logined"] = 1), és annak meglétét ellenőrizd (if ($_SESSION["logined"] == 1) {} ). Az egész login.php tetejére kelleni fog egy );
session_start();.
"if($count==1){
$user;
}"
Ez mi?! Ettől még nem lesz beállítva a $user változó.
Kedves kérdező írtál nekem egy "nem privát"- jellegű "karakterhalmazt" privát-jellegű üzenetként:
"Szija. Olvastam amit írtál, próbáltam úgy megoldani, hogy
deklaráltam egy $logedin =false-t. amikor teljesül a feltétel, tehát user létezik akkor adtam neki egy $logedin= true-t. az indexben pedig : if($logedin = false){
itt vannak az article-k és ha true akkor meg egy szoveg. Nah én szerintem ennek mennie kellene , de még sem jó. De amikor elinditom , a login képernyo helyett egy ures lap fogad. nem értem. ezek szerint még sem állítja be magának a FAlse értéket, de nem értem miért.
}"
No szóval: ha a sikeres bejelentkezéskor adsz a $logedin változónak egy TRUE értéket, az csak addig lesz TRUE, amíg az index.php fut. Amint újratöltöd az oldalt a $logedin változó értékét elveszti. Ezért mondtam, hogy használj munkamenet-kezelést.
Itt egy példa rá:
Elég sokan leírták már, hogy hibás az egész...ez pl mit takarna? <?php
include('php/login.php');
?>
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!