Another
2005. Jan 8., 10:48
Hello,
Akarok csinálni egy belépőrendszert, csak PHP és MySQL felhasználásával. Már régebben egyszer sikerült megcsinálnom egy ilyet, de most valamiért nem jön össze. Az oldal címe: htt://bogey.fw.hu/
Leírom, hogy kb milyenre gondoltam, és hogy hogyan álltam neki.
Elképzelés:
- Regisztráció
- Belépés
- Különböző jogok (Operátor, VIP, User)
- Jogoknak megfelelően különböző menü betöltése
- Session használata, a belépéskor
- Felhasználónév
- E-mail cím
- Jog
(Lehet, hogy még lenne majd más is)
Hogyan álltam neki:
Az oldal úgy épül fel, hogy van egy page változó, amit mindig akkor küld el, ha új oldalra akar lépni (?page=1, ilyenkor például a hírek oldal töltödik be). Az index.php nyílik meg minden alkalomkor, csak mindig más az, amit a táblázat egyes részeibe betölt. Az csináltam, hogy a index.php elejére beírtam, hogy session_start(); majd ahol be akartam illeszteni a belejelntkezést (a felhasználói menü is itt lesz majd), oda beírtam azt, hogy if($_SESSION["UserName"] =! "") { /* a felhasználói menü */ } else { /* a belejentkezés */ }. És csináltam egy olyat, hogy a felhasználói menünél, legyen egy olyan pont (Harmadik menü), hogy ki tudjon jelentkezni a felhasználó. Nem sikerül kijelentkeztetni. A fájlba, ami ezt csinálja beírtam, hogy print("valami");, hogy egyeltalán lefut-e. És kiírta, hogy valami, szóval igen. A fájl tartalma ez:
<?php
$_SESSION["UserName"] = "";
$_SESSION["UserMail"] = "";
$_SESSION["UserJog"] = "";
session_destroy();
print("valami");
?>
Először még nem volt bent a session_destroy();, de később azt is betettem. És mivel ez a fájl előbb van be include-olva, mint, hogy ellenőrzi, hogy if($_SESSION["UserName"] =! "") { .. }, ezért amikor ellenőrzi, akkor már elvileg üresnek kell lennie a UserName-nek. Na de nem üres. Mert ugyanúgy betölti a felhasználói menüt. És a UserName értéke 1. (a menü legfelső részében az van, hogy Print("Üdvözöllek.$_SESSION["UserName"]); )
BlackY
2005. Jan 8., 12:05
<?PHP
session_destroy();
session_start();
?>
Azért nem műxik, mert a destroy az egész session-t törli...
A te barátod inkább a
<?PHP
session_unset();
?>
lesz..
BlackY
Another
2005. Jan 8., 12:39
Próbáltam azzal is, és még a session_unregister()-el is. Egyikkel se ment. Így írtam session_unset($_SESSION["UserName"]); , session_unregister($_SESSION["UserName"]);.
BlackY
2005. Jan 8., 12:40
Próbáld ki, hogy nem csinálsz semmit a session-nel, hanem inkább
unset($_SESSION['username']);
és a többi...
BlackY
Another
2005. Jan 8., 13:56
Így sem sikerült. Valami más gond lesz itt sztem, de nem tudom, hogy mi.
BlackY
2005. Jan 8., 14:14
Nem lehet, hogy a két cucc között (törlés -> if) valami még felülírja?
BlackY
Another
2005. Jan 8., 18:01
Végig néztem a fájlt, de nem találtam benne olyat. Egyedül akkor lehetne felülírni, ha közben lefutna az enter.php, de ez nem futhat le, mert még sehol sincs belinkelve.
BlackY
2005. Jan 8., 18:13
Erre annyit tudok mondani, hogy KELL, hogy legyen valami, ami nem stimmel, különben a leírtak szerint működnie kéne...

Különösen az-az 1-es érték gyanús...

BlackY
Another
2005. Jan 8., 19:15
Az index.php így kezdődik:
<?php
session_start();
ob_start();
include("data.php");
if($page == "") { $page = 1; }
$site = 'None site';
if($page == 14) { $page = $dd; include("fastps.php"); }
if($page == 15) { $page = $dd; include("logout.php"); }
..//Itt az if()-ek folytatódnak.
?>
<html>
<head>
<meta http-equiv="Content-Language" content="hu">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<title>Public File Share</title>
<link rel="stylesheet" type="text/css" href="general.css">
<script language="javascript" src="general.js"></script>
</head>
<body text="#333333" onload="JSClock()">
<div align="center"><table id="MainTable" cellspacing="0" cellpadding="0" style="border-style: solid; border-width: 0">
<tr>
<td rowspan="2" width="300" align="center" valign="top">
<?php
if($_SESSION["UserName"] =! ""){
print("<table border=\"0\" width=\"250\"><tr><td bgcolor=\"#999999\" colspan=\"2\" id=\"NormalLetter\" align=\"center\">Üdvözöllek ".$_SESSION["UserName"]."</td>
</tr><tr><td id=\"WhiteAlpha\"><span id=\"SmallLetter\">Első menü</span></td></tr><tr>
<td id=\"WhiteAlpha\"><span id=\"SmallLetter\">Második menü</span></td></tr><tr>
<td id=\"WhiteAlpha\"><span id=\"SmallLetter\"><a href=\"?page=15&dd=".$page.$dat."\">Harmadik menü</a></span></td>
</tr></table><br>");
} else {
print("<form><table border=\"0\" width=\"250\"><tr><td bgcolor=\"#999999\" colspan=\"2\" id=\"NormalLetter\" align=\"center\">Bejelentkezés</td>
</tr><tr><td id=\"WhiteAlpha\"><span id=\"SmallLetter\">Felhasználónév:</span></td><td id=\"WhiteAlpha\" align=\"center\">
<input type=\"text\" name=\"UserName\" size=\"20\" tabindex=\"1\"></td></tr><tr><td id=\"WhiteAlpha\"><span id=\"SmallLetter\">Jelszó:</span></td>
<td id=\"WhiteAlpha\" align=\"center\"><input type=\"password\" name=\"PassWord\" size=\"20\" tabindex=\"2\"></td></tr>
<tr><td id=\"WhiteAlpha\" colspan=\"2\" align=\"center\"><input type=\"submit\" name=\"Enter\" tabindex=\"3\" value=\"Belépés\"></td></tr>");
if($ok != "" && $ok) {
print("<tr><td id=\"WhiteAlpha\" colspan=\"2\" align=\"center\"><span id=\"SmallLetter\"><font color=\"#ff0000\">HIBA: Rossz adatok</font></span></td></tr>");
}
print("</table></form>");
}
?>
Nem tudom, hogy ebből mennyire látszik, de itt nincsen felhasználva a $_SESSION["UserName"]. Sehol máshol az oldalon eddig nem használtam session-t, szóval csak egyedül az enter.php tudja megváltoztatni.
BlackY
2005. Jan 8., 19:18
Próbáld úgy, hogy unset($_SESSION['username']) és utánna nem a != "" hanem isset($_SESSION['username'])...
Amúgy ötletem sincs, hogy mi lehet...
BlackY
RoolY
2005. Jan 8., 19:27
Lehet hogy hülyeséget mondok, de
CODE
($_SESSION["UserName"] =! "")
helyett nemlehet hogy
CODE
if($_SESSION["UserName"] = ! "")
??
Rooly
RoolY
2005. Jan 8., 19:29
Egy próbát megér.
Rooly
BlackY
2005. Jan 8., 19:36
Öööö...
A nem egyenlőnek a jele ugye az egyenlőség tagadása, tehát ! (tagadás) = (egyenlő)... !=
BlackY
toxin
2005. Jan 8., 21:07
alapkomponenseket miért nem a PEAR-ről szeditek, mondjatok logikus érvet és akkor megnyugszom
http://pear.php.net/packages.php?catpid=1&...=Authentication
Another
2005. Jan 8., 21:20
QUOTE(toxin @ 2005. Jan 8., 21:07)
alapkomponenseket miért nem a PEAR-ről szeditek, mondjatok logikus érvet és akkor megnyugszom
http://pear.php.net/packages.php?catpid=1&...=AuthenticationSzeretek mindent magam megcsinálni....
toxin
2005. Jan 8., 21:24
én spec szeretek rendszeremnek olyan auth. rendszert választani amit sokan tesztelnek, és nem a saját bőrömön tapasztalom a saját rendszerem hiányoságainak káros következményeit
BlackY
2005. Jan 8., 21:47
Én is ezt akartam írni

És nem is, hogy szeretek, hanem valamilyen szinten kötelességemnek érzem, hogy ha már valamihez a nevem adom, akkor abban a lehető legtöbb mindent én írjam

BlackY
Another
2005. Jan 8., 21:49
A hozzászólásodon javítok egy kicsit, remélem nem bánod:
én spec szeretek (másokáltíl írt)
rendszeremnek olyan auth. rendszert választani amit sokan tesztelnek, és nem a saját bőrömön tapasztalom a nem saját
rendszerem hiányoságainak káros következményeit

Így már jobb.
toxin
2005. Jan 8., 22:38
ezt majd holnap feldolgozom, ma aludtam 4 órát + teniszeztem 3 órát + csocsóztam rá 3 órát

bőőőőő mi volt a baj ?

--
ja fogom már

, hát én saját rendszert nagyon régen még az elején próbáltam összerakni, munkában már nem volt nyerő (sokáig tart elkészíteni, sokat kell tesztelni, van benne mindig hiba ami általában az ügyfélnél jön elő stb.),
PEAR-es cuccokban pedig eddig még nem csalódtam, csak + -ak a tapasztalataim

ajánlom is mindenkinek, lehet nem munka lenne akkor én is máshogy állnék hozzá
de most abszolúte nincs agyam mentem is hajcsizni

PEACE !
Another
2005. Jan 9., 15:26
Most sikerült megcsinálni azt, hogy ne egyből a felhasználói menüt írja ki. Viszont most az a gond, hogy nem tudok bejelentkezni. Megnéztem a forráskódját a honlapnak. A form része ez volt:
CODE
<form>
<table border="0" width="250">
<tr>
<td bgcolor="#999999" colspan="2" id="NormalLetter" align="center">Bejelentkezés</td>
</tr>
<tr>
<td id="WhiteAlpha"><span id="SmallLetter">Felhasználónév:</span></td>
<td id="WhiteAlpha" align="center"><input type="text" name="UserName" size="20" tabindex="1"></td>
</tr>
<tr>
<td id="WhiteAlpha"><span id="SmallLetter">Jelszó:</span></td>
<td id="WhiteAlpha" align="center"><input type="password" name="PassWord" size="20" tabindex="2"></td>
</tr>
<tr>
<td id="WhiteAlpha" colspan="2" align="center"><input type="button" name="Enter" tabindex="3" value="Belépés" onclick="?page=15&dd=1"></td>
</tr>
</table>
</form>
Próbáltam úgy is, hogy nem onclick-be teszem az urlt, hanem action-be, de ott úgy sem sikerült.
BlackY
2005. Jan 9., 15:43
Rakd be input type="submit"-ra a button-t és a form-nak adj egy action="index.php?page=15&dd1" és method="post" v. method="get" (inkább előbbi) paramétert...
BlackY
Another
2005. Jan 9., 18:15
QUOTE(BlackY @ 2005. Jan 9., 15:43)
Rakd be input type="submit"-ra a button-t és a form-nak adj egy action="index.php?page=15&dd1" és method="post" v. method="get" (inkább előbbi) paramétert...
BlackY
Sikerült megcsináli, de egy kicsit át kellet írni a php-t. Az ellenőrzés isset-el van, a törlés unset-el, a gomb submit, és a form actionjában van az url.
Erik
2006. Jan 19., 22:23
Üdv mindenki!
arra szeretnélek titeket megkérni, hogy légyszíves magyarázzátok el nekem, hogy hogyan kell használni a session-okat!
nem igazán értem, hogyan működik.
itt ebben a topikban (is) sokat írtok róla a forráskódokban is, de mindegyik egy másiknak a folytatása és így teljes a káosz és türelmem sincs végigolvasni...
hogyha meg pl a php.net-en akarnám elolvasni az meg egy kicsit magasröptű nekem...
előre is kösz!
toxin
2006. Jan 19., 22:53
C.o.D.er.
2006. Feb 4., 09:01
Hali.
hogy lehet azt megoldani h van egy fügvényem ami auth-ol(PHP Tutor topicban ban közétettem. az 0.0 verzió(de már javítgatam pár dolgot rajta de az elv ugyan az))és 2 változót fogad el.de én azt akarom hogy mivel két felől is megkaphatom az adatot egy változóból ezt tettem:
CODE
$adminname = $_POST['name'] or $_SESSION['adminname'];
$adminpass = $_POST['pass'] or $_SESSION['adminpass'];
lehet ilyet vagy bonolítsam még be fögvény elenörzésekel? gondolom nem jó de hátha
LuXoid
2006. Mar 4., 16:39
Hali!
Lenne egy nagy kérésem, ill kérdésem! Szeretnék egy feltöltést és egy fórumot kreálni a flashben készülő oldalamra, amit csak bejelentkezett, regisztrált felhasználók tudnak ígénybe venni!
Nos a problémám ott kezdődik, hogy miképpen is lehet Flashen belül php és java nélkül, csak action scriptekkel regisztráció/login részt kreálni, ha lehet? Ha engedi időtök, akkor légyszike segítsetek nekem ebben, mivel én inkább grafikával foglalkoztam eddig, aztán nem mozgok még annyira otthonosan ebben a témában.
Előre is köszi!
LuXoid
BlackY
2006. Mar 4., 17:20
PHP - Flash kapcsolat, asszem loadVars a neve annak az AS objektumnak, amivel ezt meg lehet valósítani (meg persze van xml is, de arról fogalmam sincs, hogy hogy hívják

).
Mellé benyomsz egy PHP szkriptet a szerverre, ami regel, beloginol, stb.
BlackY
bugadani
2006. Mar 4., 17:42
Egy gyors kérdés: a süti- és sessionmentes bejelentkezés mennyire megbízható?
Értem ezalatt:
user belép, bekerül az adatbázis login_ip oszlopába az ip-je, login_time oszlopba pedig a belépés ideje. A rendszer meg vizsgálja az ip-t és az időt...
Ez mennyire lenne életképes? Mert nem kéne vesződni a sütikkel/sessionokkal, csak az adatbázis, és így meg lehetne oldani a kiléptetést is
vagy ez

halott ötlet?
BlackY
2006. Mar 4., 20:05
Halottabb nem is lehetne. Ha mondjuk belépnék admin joggal, és a másik gépnél elmennék a site-ra ott is full jogom lenne, mivel a router miatt azonos IP-címe van a két gépnek. Ha még egy böngészőt is tárolsz, akkor már jobb a szitu, de két FX vagy IE ugyanúgy összeakad.
Szal felejtős...
BlackY
bugadani
2006. Mar 4., 23:05
Kösz
LuXoid
2006. Mar 5., 12:46
Kösz az infot! Próbálkozom vele!
heló!
abba kéne segíteni, hogy hogyan lehet beállítani, hogy olyan auth ablakot dobjon fel?
mint itt...ebben a segédletben...
összevonta LeGaS
BlackY
2006. Mar 5., 15:32
Ott van a Zsola hozzászólására mutató link, amiben le van írva a szükséges HTTP fejléc:
http://www.tutorial.hu/forum/index.php?sho...dd%20user&st=19BlackY
vackor
2008. Apr 13., 20:26
Sziasztok!
Lenne egy nagy problémám.
Csináltam anno egy egyszerű beléptetőt. A regisztrációval nincs semmi probléma, de a belépésnél (nálam még sosem jelentkezett ez a hiba) azt a hibaüzenetet írja ki, hogy nem írtak felhasználónevet.
Arra gondolni sem merek, hogy a felhasználó nem ír be semmit.
Bele tudnátok nézni, hogy esetleg mi lehet a gond vele?
CODE
<?php
session_start();
if (empty($_SESSION['user'])){
?>
<table cellpadding="4" cellspacing="2" align="center" class='text' border="1"><form name="belep" action="belep2.php" method="post">
<tr><td colspan="2" align="center">Belépés</td></tr>
<tr><td align="right">Név: </td><td><input type="text" name="nev" value="<?=$_POST['nev'] ?>" size="25"></td></tr>
<tr><td align="right">Jelszó: </td><td><input type="password" name="jelszo" value="<?=$_POST['jelszo'] ?>" size="25"></td></tr>
<tr><td colspan="2" align="center"><input type="submit" name="submit" value=":: Belépek ::"></td></tr>
</form>
<?
}else{ echo "<table cellpadding='4' cellspacing='2' align='center' class='text'>
<tr><td colspan='2' align='center'>Szia ".$_SESSION['user']."</td></tr>
<tr><td colspan='2' align='center'><a href='belep2.php?oldal=kilep'>Kilép</td></tr>
</table>";
}
if (isset($_POST['submit'])){
if (empty($_POST['nev'])) {echo "<tr><td colspan='2' align='center'>Nem írtál felhasználónevet!</td></tr>"; exit;}
if (empty($_POST['jelszo'])) {echo "<tr><td colspan='2' align='center'>Nem írtál jelszót!</td></tr>"; exit;}
include ("log.php");
$tag = mysql_query(" SELECT * FROM tarik_login WHERE user='".$_POST['nev']."' ") or die(mysql_error());
$ellenoriz = mysql_fetch_object($tag);
if ($ellenoriz->user == ""){echo "<tr><td colspan='2' align='center'>Ilyen néven nincs regisztált felhasználó</td></tr>";}
elseif ($_POST['jelszo'] != $ellenoriz->pass) {echo "<tr><td colspan='2' align='center'>A beírt jelszó nem megfelelő</td></tr>";}
else{
$id = $ellenoriz->id;
$_SESSION['user'] = $ellenoriz->user;
$pass = $ellenoriz->pass;
$_SESSION['email'] = $ellenoriz->email;
$_SESSION['aktivalva'] = $ellenoriz->aktivalva;
$ossz = $ellenoriz->ossz;
echo "<script language=javascript>window.location='belep2.php';</script>";
}}
echo "</table>";
?>
Köszönöm előre is a segítséget.
BlackY
2008. Apr 13., 21:16
Hát ez így ránézésre is több sebből vérzik, de a nem írtál felhasználónevet üzinek - ha tényleg írtak - elvileg nem kéne megjelennie.
Viszont néhány észrevétel:
CODE
if (isset($_POST['submit'])){
if (empty($_POST['nev'])) {echo "<tr><td colspan='2' align='center'>Nem írtál felhasználónevet!</td></tr>"; exit;}
if (empty($_POST['jelszo'])) {echo "<tr><td colspan='2' align='center'>Nem írtál jelszót!</td></tr>"; exit;}
Azon kívül, hogy csak úgy exitelni nem egy szép dolog, át kéne írni az első feltételt isset($_POST['nev']) && isset($_POST['jelszo']) -ra, és a kód maradékát egy else ágba rakni.
CODE
$tag = mysql_query(" SELECT * FROM tarik_login WHERE user='".$_POST['nev']."' ") or die(mysql_error());
Megintcsak nem szép dolog ledieolni a script lefutását, továbbá escapelni kéne a usertől származó adatot, és egyszerűbb lenne, ha már itt hozzáadnál még egy feltétel, hogy jelszó ez és ez. Pl.: így:
CODE
'SELECT count(id) FROM tarik_login WHERE user="' . mysql_escape_string($_POST['nev']) . '" AND pass=MD5("' . mysql_escape_string($_POST['jelszo']) . '")'
Aztán már csak egy current(mysql_fetch_array($tag)) == 0 vizsgálattal el kell döntened, hogy jó volt-e a user/pass páros vagy sem. (Remélem észrevetted, hogy beleraktam az md5 hash képzést is

)
Szal egy újraírást megérne, nem hosszú idő azt

BlackY
vackor
2008. Apr 13., 23:08
Köszönöm BlackY!
Átírom, aztán jelentkezem.
BlackY
2008. Apr 13., 23:36
Akkor még néhány tipp
- Válaszd le a beléptetést/ellenőrzés végzést a megjelenítéstől (értsd: legyen egy auth függvényed, ami visszaad egy user id-et (bejelentkezett user) vagy nullt (vendég), ez ellenőrizze, hogy jött-e post-olva usernév, stb.).
- Session-ben csak user azonosítót tárolj (mert ugye van auto_inc-es mező a usereket tartalmazó tábládban?

)
- mysql_fetch_object helyett én ajánlom az array-t, de teljesítményben minimális a különbség (ha van egyáltalán), így ez csak megszokás kérdése.
BlackY
vackor
2008. Apr 14., 00:19
Az a baj, hogy azt gondolod rólam, hogy én is vágom ezeket a dolgokat. (Öreg vagyok már ahhoz, hogy mindent megértsek röptében)
Egyelőre leragadtam a mysql_escape_string() és a current() függvénynél. Most mazsolázom. Akkor hozzá veszem az auth() is.
Kedves BlackY! Nem lehetne egy kis demóval köríteni a dolgokat, mint ahogy az előzőben is tetted?
Megköszönném!
Anybudi
2008. Apr 27., 13:59
QUOTE(toxin @ 2005. Jan 8., 22:07)

alapkomponenseket miért nem a PEAR-ről szeditek, mondjatok logikus érvet és akkor megnyugszom
http://pear.php.net/packages.php?catpid=1&...=AuthenticationNekem valahogy a "mindenre PEAR"-es megoldástól mindig olyan ágyúval verébre érzésem támad...
devilion
2008. May 9., 22:26
Hali mindenkinek!
Rátaláltam erre a login rendszerre, admin funkciókkal stb (lehet h van aki ismeri), de az a bajom, h nem tudom bőviteni (avatar, msn, aláirás stbstb), és megpróbáltam utána járni, de nem nem találtam semmit

....
Login System v2.0Vki tudna segiteni ebben????
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please
click here.