ugrás a tartalomhoz

PHP - MYSQL - Egyszerű (SESSION alapú) bejelentkező rendszer

attiss94 · 2011. Már. 30. (Sze), 18.52
Sziasztok srácok!
Új vagyok az fórumban, de máris lenne egy kérdésem hozzátok! Kezdő PHP-s tudásommal csináltam egy egyszerű (SESSION alapú) bejelentkező rendszert, de nem akar működni, és a segítségeteket kérném, mert akármit csinálok, nem jövök rá a hiba okára... Bele is vágok a közepébe:

telepites.php:

<?php
$con = mysql_connect("localhost","v630i-w660i","XYZ");

if (!$con)
  {
	die('Sikertelen kapcsolódás: ' . mysql_error());
  }

mysql_select_db("v630i-w660i", $con);

$sql = "CREATE TABLE Adminisztratorok
	(
		id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
		felhasznalonev VARCHAR(50),
		jelszo VARCHAR(50)
		email VARCHAR(50)
    )";

mysql_query($sql,$con);

$jelszo = md5('Attiss');
$sql = "INSERT INTO Adminisztratorok (id, felhasznalonev, jelszo, email) VALUES
	(
		'',
		'Fábián Attila',
		'".$jelszo."',
		'xyz##kukac##freemail.hu'
	)";

mysql_query($sql,$con);

mysql_close($con);

echo  "<head>"
  	  . "<title>Telepítés</title>"
	  . "<meta name=\"description\" content=\"\" />"
	  . "<meta name=\"keywords\" content=\"\" />"
	  . "<meta name=\"author\" content=\"Fábián Attila\" />"
	  . "<meta http-equiv=\"content-type\" content=\"text/html;charset=iso-8859-2\" />"
	  . "<link rel=\"stylesheet\" type=\"text/css\" href=\"../stilus.css\" />"
	  . "</head>"
	  . "<body>"
	  . "<font face=\"Verdana\" color=\"#FFFFFF\">"
	  . "<div class=\"sikeres_\"></div>"
	  . "<div class=\"sikeres\">"
	  . "<center>"
	  . "<p>"
	  . "A telepítés sikeresen lezajlott!<br />"
	  . "<a href=\"../index.php\">Adminisztrációs felület</a>"
	  . "</p>"
	  . "</center>"
	  . "</div>"
	  . "</font>"
	  . "</body>"
	  . "</html>";
?> 
bejelentkezes_0.php:

<?php
$adatbazis_host = 'localhost';
$adatbazis_nev ='v630i-w660i';
$adatbazis_felhasznalonev ='v630i-w660i';
$adatbazis_jelszo ='XYZ';

mysql_connect ($adatbazis_host, $adatbazis_felhasznalonev, $adatbazis_jelszo);
mysql_select_db($adatbazis_nev);

print "
<html>
	<head>
		<title>Bejelentkezés</title>
		<meta name=\"description\" content=\"\" />
		<meta name=\"keywords\" content=\"\" />
		<meta name=\"author\" content=\"Fábián Attila\" />
		<meta http-equiv=\"content-type\" content=\"text/html/php;charset=iso-8859-2\" />
		<link rel=\"stylesheet\" type=\"text/css\" href=\"../stilus.css\" />
	</head>
	<body>
		<font face=\"Verdana\" color=\"#FFFFFF\">
			<div class=\"bejelentkezes_\"></div>
			<div class=\"bejelentkezes\">
				<center>
					<form name=\"bejelentkezes\" method=\"post\" action=\"bejelentkezes_1.php\">
						Felhasználónév:<br />
						<input name=\"felhasznalonev\" type=\"text\" id=\"felhasznalonev\"><br />
						Jelszó:<br />
						<input name=\"jelszo\" type=\"password\" id=\"jelszo\"><br />
						<input type=\"submit\" name=\"Submit\" value=\"Bejelentkezés\">
					</form>
				</center>
			</div>
		</font>
	</body>
</html>
";
?>
bejelentkezes_1.php:

<?php
session_start();

$adatbazis_host = 'localhost';
$adatbazis_nev ='v630i-w660i';
$adatbazis_felhasznalonev ='v630i-w660i';
$adatbazis_jelszo ='XYZ';
$kezdooldal = '../index.php';

mysql_connect ($adatbazis_host, $adatbazis_felhasznalonev, $adatbazis_jelszo);
mysql_select_db($adatbazis_nev);

$jelszo = md5($_POST['jelszo']);
$sql_0 = "SELECT * FROM Adminisztratorok WHERE felhasznalonev = '".mysql_real_escape_string($_POST['felhasznalonev'])."' AND jelszo = '".mysql_real_escape_string($jelszo)."'";
$sql_1 = mysql_query($sql_0) or die(mysql_error());
$sql_2 = mysql_num_rows($sql_1);

if ($sql_2 == 1)
	{
		$_SESSION['felhasznalonev'] = $_POST['felhasznalonev'];
		header ('Location:'.$kezdooldal);
	}
	else{
		header ('Location:bejelentkezes_0.php');
	}
?>
bejelentkezes_2.php:

<?php
session_start();

$adatbazis_host = 'localhost';
$adatbazis_nev ='v630i-w660i';
$adatbazis_felhasznalonev ='v630i-w660i';
$adatbazis_jelszo ='XYZ';
$kezdooldal = '../index.php';

if (isset($_SESSION['felhasznalonev']))
	{
		if (isset($_GET['kilep']))
			{
				unset($_SESSION['felhasznalonev']);
				header('Location:bejelentkezes_0.php');
				exit();
			}
			else
				{
					print "<a href='?kilep=1'>Kijelentkezés</a><br>";
					$hozzaferes = TRUE;
				}
	}
	else
		{
			print 'Hozzáférés megtagadva!';
			include('bejelentkezes_0.php');
			$hozzaferes = FALSE;
		}
?>
index.php:

<?php
include ('bejelentkezes_2.php');

if ($hozzaferes == TRUE)
	{
		print 'Be vagyok jelentkezve...';
	}
	else
		{
			print 'Nem vagyok bejelentkezve...';
		}
?>
<html>
	<head>
		<title>Valami</title>
		<meta name="description" content="" />
		<meta name="keywords" content="" />
		<meta name="author" content="Fábián Attila" />
		<meta http-equiv="content-type" content="text/html/php;charset=iso-8859-2" />
		<link rel="stylesheet" type="text/css" href="../stilus.css" />
	</head>
	<body>
		Valami...
	</body>
</html>
Ha valaki megmondja, hogy mi a baja, hálás leszek, én már két napja nézegetem, de egyszerűen semmi...
 
1

Legalább...

QXY · 2011. Már. 30. (Sze), 20.23
Legalább annyit tegyél meg, hogy elárulod mi az ami nem úgy működik ahogy szeretnéd, ne kelljen nekünk is két napig nézegetni...
2

A bejelentkezes_0.php

attiss94 · 2011. Már. 30. (Sze), 20.47
A bejelentkezes_0.php tartalma megjelenik (ott kéri a felhasználó adatait), de amint elküldöm a FORM-ot, nem csinál semmit, vissza dobja az oldalt... (És elnézést, amiért ez kimaradt : )).
3

debug

QXY · 2011. Már. 30. (Sze), 22.37
Nos így mindjárt gyorsabban megy a dolog. A bejelentkezes_1.php-ban az sql query hibás:

$sql_0 = "SELECT FROM Adminisztratorok WHERE...

A "SELECT" után nem ártana legalább 1 oszlopnév, vagy * (minden oszlop). Valószinűleg ez miatt nem lesz egyetlen sor sem és ezért dob vissza...

Miután végrehajtod a query-t mindig ellenőrizd le nem volt-e hiba!

$sql_1 = mysql_query($sql_0) or die(mysql_error());

A végleges - működő - verzióból viszont majd távolítsd el ezt a kiegészítést (pl. kommentezd ki).
6

Megcsináltam, de....

attiss94 · 2011. Már. 31. (Cs), 11.06
Köszönöm a válaszokat, elvégeztem az általad ajánlott módosításokat (QXY)(itt is kijavítottam, hogy ne zavarjon meg senkit), de sajnos így is ugyanazt csinálja, mint eddig (semmilyen MYSQL hibaüzenet nem jön, csak visszadob a bejelentkező FORM-ot tartalmazó oldalhoz...).
10

Ezesetben nem talál egyező

QXY · 2011. Ápr. 3. (V), 02.19
Ezesetben nem talál egyező sort. Ahogy látom a felhasználónév tartalmaz ékezetet így valószinű, hogy valami charset probléma lesz. Szerintem próbaképp - de a későbbiekben is javallott - csinálj egy ékezetmentes felhasználónevet és azzal próbáld ki!

Én felhasználónévnek szinte mindenhol (kivétel ahol az email címével jelentkezik be) csak alfanumerikus karaktereket engedek, kis és nagybetűre NEM érzékeny és van a felhasználóknak külön fullname mezőjük (vagy külön vezetéknév/keresztnév, ahogy tetszik). Ez azért jó mert egyrészt elkerülhetőek a charset gondok, másrészt nem biztos hogy mindenhol (pl. másik gépről jelentkezik be) elérhetőek azok a speciális karakterek amiket az illető használt. De lehet ezzel az elvvel nem mindenki ért egyet.
13

Megpróbálom, hátha tényleg

attiss94 · 2011. Ápr. 10. (V), 18.08
Megpróbálom, hátha tényleg igazad van, majd még írok! : )
14

Átírtam a felhasználónevet

attiss94 · 2011. Ápr. 10. (V), 18.15
Átírtam a felhasználónevet ékezetmentes karakterekre, de még mindig nem működik... : (
(Itt meg lehet tekinteni: http://diak.v630i-w660i.hu/bejelentkezes/bejelentkezes_0.php)
Felhasználónév: Fabian_Attila
Jelszó: Attiss)
4

Az index.php-ban azt a

pinguka · 2011. Már. 31. (Cs), 07.43
Az index.php-ban azt a $hozzaferes-t nem értem.
Inkább csináld úgy hogy $_SESSION["logged"] értékét 1-re állítod amikor sikeres a bejelentkezés, és utána azt ellenőrizd.
5

$hozzaferes

QXY · 2011. Már. 31. (Cs), 07.59
A bejelentkezes_2.php-ban kap értéket, teljesen rendben van szerintem.
7

A telepites.php 15. sorából

bb0072 · 2011. Már. 31. (Cs), 14.17
A telepites.php 15. sorából nem maradt ki véletlenül egy vessző, ami miatt az Adminisztratorok tábla nem olyan mint kéne?
11

attiss94

attiss94 · 2011. Ápr. 10. (V), 17.55
Elnézést, tényleg igazad van, csak valamiért a bejelentkezes_0.php-t néztem...
8

Az itt lévő szerkesztőben a

attiss94 · 2011. Ápr. 2. (Szo), 02.32
Az itt lévő szerkesztőben a 15. sor tartalma már nem határoz meg semmit az Adminisztratorok táblában, mert azt akkor írja ki, ha a telepítés befejeződött. (És egyébként sem látok semmilyen hiányzó vesszőt : ).)
9

tábla

Poetro · 2011. Ápr. 2. (Szo), 02.46
CREATE TABLE Adminisztratorok  
    (  
        id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,  
        felhasznalonev VARCHAR(50),  
        jelszo VARCHAR(50)  
        email VARCHAR(50)  
    )
itt a jelszo VARCHAR(50) után hiányzik egy vessző, és ezt tette szóvá bb0072.
12

Igazatok van és köszönöm,

attiss94 · 2011. Ápr. 10. (V), 18.04
Igazatok van és köszönöm, hogy szóltatok, de még javítás után sem üzemel...

Lefuttatom a telepítést, sikeresen lefut, de a bejentkezes_0.php (az adatok beírása után) még mindig visszadob amikor elküldöm a FORM-ot.

Itt megtekinthetitek:
http://diak.v630i-w660i.hu/bejelentkezes/bejelentkezes_0.php
15

Helló próbáld meg így: $sql

madmax24 · 2011. Nov. 30. (Sze), 04.03
Helló próbáld meg így:

$sql = "CREATE TABLE `adminisztratorok` (
`id` MEDIUMINT NOT NULL auto_increment,
`felhasznalonev` varchar(50),
`jelszo` varchar(40),
`email` varchar(50),
PRIMARY KEY (`id`)
) ;";