Mi a baj a kódban?
<?php
session_start();
ob_start();
include("inc/connect.php");
if (isset($_SESSION["bejelentkezve"])) {
ob_end_clean();
header("location: index.php?kezdolap");
die();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Hu-Játék Főhonlapja</title>
<meta name="keywords" content="kulcszavak vesszővel elválasztva">
<meta name="description" content="egy bővített mondat">
<META http-equiv="Content-Language" CONTENT="HU">
<META name="Robots" content="index,follow">
<link rel="stylesheet" href="css/template.css" type="text/css" />
</head>
<BODY>
<div id="headerwapper">
<div id="header">
<div id="sitename"><a href="index.html">Hu-Jatek.Net</a></div>
</div>
</div>
<div id="topmenuwrapper">
<div id="topmenu">
<ul>
<li><A HREF="Index.php?kezdolap">Kezdőlap</A></li>
<li><A HREF="index.php?jatek">Játék tesztek / Játékok</A></li>
<li><A HREF="index.php?tutorial">Tutoriálok</A></li>
<li><A HREF="index.php?termekek">Termékek</A></li>
<li><A HREF="index.php?tamogatas">Támogatás</A></li>
<li><A HREF="index.php?kapcsolat">Kapcsolatok</A></li>>
</ul>
</div>
<div id="clear"></div>
</div>
<div id="bodywrapper">
<div id="contentwrapper">
<div id="contentinner">
<div id="content">
<?php
if (isset($_GET["regisztracio"]))
include("inc/regisztracio.php");
if (isset($_GET["webadmin"]))
include("inc/webadmin.php");
if (isset($_GET["nincsbelepve"]))
include("inc/nincsbelepve.php");
if (isset($_GET["kezdolap"]))
include("oldalak/kezdolap.php");
if (isset($_GET["jatek"]))
include("oldalak/jatekok.php");
if (isset($_GET["tamogatas"]))
include("oldalak/tamogatas.php");
if (isset($_GET["tutorialok"]))
include("oldalak/tutorial.php");
if (isset($_GET["kapcsolat"]))
include("oldalak/kapcsolat.php");
if (isset($_GET["termekek"]))
include("oldalak/termekek.php");
if (isset($_GET["udvozles"]))
include("inc/belepve.php");
if (isset($SESSION["belepve"])) {
}
?>
<h1><?php echo htmlspecialchars($_SESSION["username"] , END_QUOTES) ?></h1>
Sikeressen beléptél
?>
</div>
<div id="right">
<h3>Oldalaim</h3>
<ul id="fomenu">
<li><A HREF="">Minecraft szerver</A></li>
<?php
if (isset($SESSION["belepve"])) {
}
?>
<li><A HREF="index.php?regisztracio">Regisztráció</A</li>
<li><A HREF="">link3</A></li>
<li><A HREF="">link4</A></li>
<li><A HREF="">link5</A></li>
</ul>
<h3>Belépés</h3>
<?php
include("inc/belepesurl.php");
?>
</div>
<div id="clear"></div>
</div>
</div>
</div>
<!-- Az alábbi kódot NE töröld! Creative Commons (CC) -->
<div id="footer">Design By <A HREF=#>Slimebal </A></div>
</BODY>
</HTML>
Hát...millió dologba bele lehetne kötni, de csak egy pár:
<li><A HREF="Index.php?kezdolap">Kezdőlap</A></li>
ilyen nincs, ezt így nem lehet, esetleg így:
<li><A HREF="Index.php?q=kezdolap">Kezdőlap</A></li>
ebből következik, hogy ez abszolút nem jó:
if (isset($_GET["kezdolap"]))
include("oldalak/kezdolap.php");
ezt így:
if ($_GET['q'] == "kezdolap") {
include("oldalak/kezdolap.php");
}
továbbá, ez mi? :
if (isset($SESSION["belepve"])) {
}
?>
<h1><?php echo htmlspecialchars($_SESSION["username"] , END_QUOTES) ?></h1>
Sikeressen beléptél
?>
levezetem mi a baj ezzel: megkérdezed a PHP-tól hogy létezik-e a $_SESSION['belepett'], és ha igen, nem történik semmi, hisz amint kinyitod a { rögtön le is zárod, vagyis ha létezik az említett session, nem történik semmi, ráadásul egy kósza PHP lezárás is van, d kinyitva nincs...
Még sok dolog lenne, de már csak egyet említek meg:
<div id="clear"></div>
ID helyett inkább Class-t kéne alkalmazni, mert az ID, egy egyéni azonosító, csak EGYSZER szerepelhet az oldalon, Class viszont annyiszor ahányszor akarod.
Nyuglom még csak tanulom!
ám müködik csak a védett rész nem
"<?php echo htmlspecialchars($_SESSION["username"] , END_QUOTES) ?>" ezt irja hibának!
Az index.php?kezdolap és GET["kezdolap"] formulákkal nincs semmi gond, használhatod, de ügyelj a kis és nagybetűkre!
A kódban szerepelt valahol egy index.html is, ami nem biztos hogy létjogosult az index.php mellett.
A hibás sor után ("Sikeresen beléptél...") vedd ki a ?> lezárást!
Sajnos nem tudom, hogy létezik-e a $_SESSION["username"] változó, hiszen ez valószínűleg a connect.php-ban generálódna, de ha mégsincs, akkor az okozhat hibát.
Nem jó
átirányít meg működik de ezt ki írja!
ezt írja:
Notice: Undefined index: username in D:\New folder\xampp\htdocs\belepve.php on line 86
Notice: Use of undefined constant END_QUOTES - assumed 'END_QUOTES' in D:\New folder\xampp\htdocs\belepve.php on line 86
Warning: htmlspecialchars() expects parameter 2 to be long, string given in D:\New folder\xampp\htdocs\belepve.php on line 86
Sikeressen beléptél
A connect.php csak a mysql kapcsolódást működteti
belepesurl.php az ami ezt generálja
<?php
if (isset($_POST['login'])) {
If (empty($_POST['username'])) {
echo "Felhasználónév megadása kötelező! <br />";
}
If (empty($_POST['pass'])) {
echo "Jelszó megadása kötelező!";
} else {
echo "";
$username = $_POST['username'];
$sql = "SELECT * FROM info WHERE username='$username'";
$lekeres = mysql_query($sql) or die(mysql_error());
$numrows = mysql_num_rows($lekeres);
if ($numrows == 1) {
// echo "Létező felhasználó";
$user = mysql_fetch_assoc($lekeres);
// echo $user["password"];
// echo md5( $_POST['pass']);
if ($_POST['pass'] == $user["password"]) {
// echo "Helyes a jelszó";
$_SESSION["bejelentkezve"] = 1;
$_SESSION["username"] = $user["username"];
$_SESSION["email"] = $user["email"];
echo "Sikeres a belépés!";
header("location: belepve.php");
die();
} else {
echo "Nem jó a jelszó!";
}
} else {
echo "Nem létező felhasználó";
}
}
}
?>
<h3>
<form method="POST">
Felhasználónév: <br />
<input type="text" name="username"><br />
Jelszó:<br />
<input type="password" name="pass"><br /><br />
<input type="submit" name="login" value="Bejelentkezés" >
<br />
<a href="index.php?regisztracio">Regisztráció</A>
</form>
</h3>
$SESSION["belepve"] helyett $_SESSION["belepve"] !
Az is lehet gond, hogy a kódot php 5.2 értelmezővel (vagy az alatti) próbálod futtatni.
PHP 5.2-ben a $_SESSION változókat előzőleg deklarálni kell, nem elég értékadással létrehozni őket.
Javaslom a connect.php végénél deklaráld a $_SESSION változókat (a session már el van indítva):
if (!session_is_registered("belepve")) session_register("belepve");
$_SESSION["belepve"] = false;
if (!session_is_registered("username")) session_register("username");
$_SESSION["username"] = "";
Egyébként is célszerű alapértékekkel deklarálni a $_SESSION változókat.
A session változó vizsgálatához így nem elég az isset($_SESSION["belepve"]) (hiszen ez igaz minden esetben), helyette a tartalmát vizsgáld:
if ($_SESSION["belepve"]) {...}
Belépéskor a $_SESSION["belepve"] = true; kilépéskor vissza false-ra...
Sajnos a php értelmező verzióváltozásai miatt előfordulhatnak ilyen hibák.
<?php
session_start();
ob_start();
include("connect.php");
if (isset($_SESSION["bejelentkezve"]) == 1) {
$username = $_SESSION["username"];
echo "Szia $username";
echo "<a href='kijelentkezes.php'> Kijelentkezés </a>";
} else if (isset($_SESSION["bejelentkezve"]) == 0) {
echo "Nem vagy bejelentkezve kérlek jelentkezz be ezt megteheted ide kattintva <a href='index.php'>Bejelentkezes</a><br />";
echo "Ha nincs felhasználód akor kérlek regisztrálj ezt ide kattintva megteheted!<a href='index.php'>Regisztráció</a>";
}
?>
ez a kód jó? a bisztonság szempontjából?
és azt hogy lehet megcsinálni hogy ha be vagy jelentkezve és betöltöd az index.php-t akor egyből a bejelnetkezett oldalra menjen
Az, hogy a bejelentkeztetés után a megfelelő oldalra küldjön oldalszerkezettől függően más és más megoldást igényel, de alapvetően a lényeg ugyanaz. Először is, nem a bejelentkezetteket kell átirányítani, hanem azokat akik nincsenek loginolva. Pl.:
<?php
// inicializációs, konfigurációs részek, csatlakozás adatbázishoz...
if ($_SESSION["belepve"] != 1) {
header("Location: belepes.php");
}
// tovább a html fejlécre...
?>
A belépés phpban lehet aztán gomb a belépéshez, regisztrációhoz, jelszóvisszaállításhoz stb...
A bejelentkeztetésnél és a regisztrációnál kell ügyelni a biztonságra. Itt vannak jó példák az adatbázis támadások kivédésére:
Regisztrációnál érdemes captcha-t alkalmazni, de láttam már login előtt is. A captcha lehet vizuális grafikus dolog is, de lehet például egy egyszerű matemetikai kérdés is pl Mennyi 12 + 36, amire a válasz az ellenőrzőkód.
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!