Turtam a net-et, es a php manualt, de ami nekem kell az nem igazan talatam meg, pedig valoszinuleg az orrom elott van.
Adoott pl. login form
- js kliensoldali ellenorzes, ha ok akkor tovabb a
- login_ell.php szerveroldali ellenorzes,
- ha minden ok tovabb header("location:kezdolap")
- hiba eseten vissza header("location:form") form-ra, ez esetben hogyan adjam vissza az ediig beirt adatokat?
$_GET eleg tragyan nez ki, foleg megjegyzes tipusu mezonel.
Session valtozo?
$_POST ez tetszene, csak nem jottem ra azt hogyan lehet megvalositani.
Avagy hogyan kell ezt kulturaltan megcsinalni?
- 4138 megtekintés
Hozzászólások
Én így oldanám meg:
-----login.php
<!--Ide kerül az űrlap illetve a hibaüzenet-->
<html>
<body>
<!-- form method jellemző post-ra állítása, alapesetben ez get.
Ekkor a böngésző post adatként küldi el az űrlap tartalmát, a böngésző fejlécében nem fog megjelenni -->
<form method="post" action="login_ell.php">
<input type="text" name="user" />
<input type="password" name="pass" />
<input type="submit" value="bejelentkezés" />
</form>
</body>
</html>
-----login_ell.php
<?php
/* Ebben a fájlban hiba esetén nem headerrel irányítanám vissza, hanem újra kiiratnám vele a login.php tartalmát.
A $_POST helyett használhatod a $_REQUEST tömböt is, az tartalamzza a $_POST, $_GET, $_COOKIE tömb összes elemét. */
//Ellenőrzés - példa
$felhasznalonev="jozsi";
$jelszo="1982";
$hiba = false;
$hiba_tomb = array();
if(!$hiba && $_REQUEST["user"]!=$felhasznalonev) {
$hiba = true;
$hiba_tomb["user"] = "Helytelen felhasználó";
}
if(!$hiba && $_REQUEST["pass"]!=$jelszo) {
$hiba = true;
$hiba_tomb["pass"] = "Helytelen jelszó";
}
/* A $hiba változó igaz hamis érték, ha true, akkor történt hiba, ha hamis, akkor nem. $hiba_tomb változótömbben bennevannak a hiba okai. */
//Végkimenetel
if($hiba) {
//ha történt hiba
include("login.php");
} else {
//ha a felhasználónév és jelszó helyes is.
header("Location: http://hup.hu/");
}
?>
Ezután módosítanám a login.php -t a következőképpen:
-----login.php
<html>
<body>
<form method="post" action="login_ell.php">
<input type="text" name="user" />
<?php if(isset($hiba) && array_key_exists("user",$hiba_tomb)) {echo $hiba_tomb["user"];} ?>
<input type="password" name="pass" />
<?php if(isset($hiba) && array_key_exists("user",$hiba_tomb)) {echo $hiba_tomb["user"];} ?>
<input type="submit" value="bejelentkezés" />
</form>
</body>
</html>
<!-- Így ki fogja írni a hibáit a bejelentkezésnek -->
Ha valami hibát vétettem benne, akkor bocsánat, majd később utáta nézek és még kipótolom, amivel tudom.
- A hozzászóláshoz be kell jelentkezni
Bocsánat kedves kolléga, de a $_REQUEST tömb használatát elég sok helyen megkérdőjelezik, és nem tanácsolják, erről már a huppon is többször volt szó. itt vagy itt de egész biztos a google részletesebb magyarázatot is ad. A másik dolog ami eszembe jutott, hogy ennyi erővel miért van 2 külön állomány miért nem csak egy van, ami előszőr megjeleníti az oldalt, majd saját magára postol, ellenőriz, majd ha hiba van ismét megjeleníti az oldalt, ha pedig nincs elirányít?
- A hozzászóláshoz be kell jelentkezni
ja hát ugyis lehetséges, akkor 1 php fájlba kell rakni az egészet, esetleg egy rejtett (input type=hidden) mezőt kell elkalamzni, hogy egyszerűen meg lehessen állapítani, hogy a felhasználó már kitöltötte e az űrlapot, vagy csak msot töltötte be először.
- A hozzászóláshoz be kell jelentkezni
miert kell +1 mezo, amikor barmelyik mezo megletet a POST-ban egy isset()-tel ellenorizni lehet -- folosleges erre uj (egyebkent haszontalan) mezot bevezetni
- A hozzászóláshoz be kell jelentkezni
a $_REQUEST tömb használatából milyen hiba adódhat?
legfeljebb a sütikkel lehet összetéveszteni, mást nem tudok elképzelni.
- A hozzászóláshoz be kell jelentkezni
Pl. a $_REQUEST-ben a jelszo post-olt erteket felulirhatod az URL-bol... login.php?password=ize meghivasaval. Ez nem biztos hogy egeszseges.
Itt az en megoldasom roviden:
<?php
if (isset($_POST['username']) $username=$_POST['username'] else $username='';
// beallitjuk a $username erteket a formhoz
$hiba='';
// hiba valtozo inicializalasa
if ($_POST['submit'])
{
// submitalva volt a form, itt johet a feldolgozasa, ellenorzese
if (jojelszo($_POST['username'],$_POST['password']))
{
// jo az jelszo, username
header("Location: kezdolap.php"); die();
}
else
{
// nem jo a jelszo, ballitjuk a hiba valtozot
$hiba='hiba leirasa';
}
}
?>
<?php if ($hiba) { ?>
hibauzenet kiiratasa
<?php } else { ?>
Ide jon a html oldal maga a login formmal;
<? } ?>
- A hozzászóláshoz be kell jelentkezni
"ami előszőr megjeleníti az oldalt, majd saját magára postol, ellenőriz, majd ha hiba van ismét megjeleníti az oldalt, ha pedig nincs elirányít"
Valahogy ez nem ugrott be megoldasnak :) "valoszinuleg az orrom elott van" tenyleg igy a legegyszerubb.
- A hozzászóláshoz be kell jelentkezni
Csak halkan: miért kell szétszaggatni php kódrészletekkel egy HTML-t, amit amúgy php fájlként kezeltetsz a szerverrel? Így a parser minden egyes php kódrésznél újraindul (vagy rosszul tudom?).
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni
A statikus oldalakat érdemes html-nek nevezni, mert akkor a webszerver statiuks tartalomként kitolja az oldalt, ellenkező esetben pedig a php fordítón keresztűl.
- A hozzászóláshoz be kell jelentkezni
tudtommal csak egyszer kell leforditani egy oldalt a php nek, és utánna benne marad a memóriában.
- A hozzászóláshoz be kell jelentkezni
eAccelerator-ral meg egyszer sem kell leforditani.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
/o\
A PHP alapból úgy működik, hogy minden egyes lapletöltéskor fogja a forrásfájlokat, és lefordítja. Fel lehet rakni opcode cache-eket (eaccelerator, apc, xcache), amik egy cache-ben eltárolják a lefordított PHP opcode-ot, így nem kell minden alkalommal lefordítani.
- A hozzászóláshoz be kell jelentkezni
En egeszen konkretan ugy ertettem, hogy elso kereskor forditja csak le. Keresenkent kozelitoleg 0 forditas (1000 keres felett mar ki lehet kerekiteni :-) )
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
+1
énis ezt mondtam
- A hozzászóláshoz be kell jelentkezni
erre valóak a framework-ök...
- A hozzászóláshoz be kell jelentkezni
+1 sok szívatástól megkímélheted magad egy jó keretrendszer használatával. Vannak egész nagyok, meg egész kicsik is, attól függően válassz mire szeretnéd használni. A lentebb említett Schlossnagle, George: PHP fejlesztés felsőfokon mindenképpen olvasd el, ha komolyabban akarsz php-vel foglalkozni, sok trükk van benne, és rávezet az oop használatára is, mertugye egy keretrendszert elég nehéz használni, ha nem vagy tisztába pár alapfogaommal.
- A hozzászóláshoz be kell jelentkezni
erre csak azt tudom mondani hogy lol. Te egy egesz frameworkot beuzemelsz 1 darab form validalas miatt? :)
- A hozzászóláshoz be kell jelentkezni
Elég ritka, ha van bejelentkező form, és nincs miért bejelentkezni, mert a többi static HTMl :D szóval tuti van ott még egy pár dolog, ami dinamikus.
- A hozzászóláshoz be kell jelentkezni
Melyiket erdemes hasznalni, tehetek veluk egy kiserletet.
Bar en jobb szertem elosszor txt editorral hasznalni, tobbet tanulok meg belole.
- A hozzászóláshoz be kell jelentkezni
Ha komolyabb oldalhoz kell és mondjuk lesz még alatta egy adatbázis is, akkor én a symfony-t ajánlom. _NAGYON_ sok mindent tud. Részletes dokumentáció, könyv, API referencia és többféle tutorial is van hozzá. Kísérletezgetéshez, próbálgatáshoz letöltheted a "sandbox"-ukat is. Erősen objektumorientált PHP5. Különböző mélységekben állhatsz neki. Már egyszerűbb konfigurálással is sok mindent meg lehet vele csinálni. A login problémádra van külön beléptető/hitelesítő pluginja (sfGuard) is, ami jócskán túlmutat azon, amiket szeretnél. Sőt, általában bármilyen form ellenőrzéshez, újrakitöltéshez, hibakezeléshez és -kiíráshoz pedig nem kell egy sor új PHP kódot sem írnod. A symfony ezt is mind tudja. Ja, és az egész nyílt forrású! ;)
Sok sikert!
- waiter -
- A hozzászóláshoz be kell jelentkezni
PHP fejlesztés felsőfokon című könyv "Olvasson bele!" címszóval letölthető 13-adik fejezete részletesebben pont erről is szól: "A felhasználók hitelesítése
és a munkamenetek biztonsága"
--
не закуриться!
- A hozzászóláshoz be kell jelentkezni
Koszi elolvasom eddig a php 24ora allatt -hoz volt szerencsem + php man oldalak.
- A hozzászóláshoz be kell jelentkezni
Abból legalább a "Tanuljuk meg a PHP5 használatát 24 óra alatt", vagy a PHP4-es? Mert a PHP4-es ismeret bizonyos fokig frissítésre szorul.
PHP-t tanulni vagy új alkalmazást írni már PHP5-ben célszerű.
--
не закурить! (Ne gyújts rá!) не куриться! (Ne dohányozz! Ne füstölögj!)
- A hozzászóláshoz be kell jelentkezni
A 4-est olvastam meg anno, most frissitem a tudast 5-re, termeszetesen mar php5-ben megy a fejlesztes.
- A hozzászóláshoz be kell jelentkezni
Loginnál minek visszaírni az elrontott adatokat??
Én az input mezöbe irtam bele hogy mit vár a felh.tol
a php elején ellenörzés.
< input type="password" name="g_pass" class='btn'
onFocus="if(this.value=='Jelszó')this.value='';"
onBlur="if(this.value=='')this.value='Jelszó';" value='Jelszó'>
a post ugyanugy a index.php-t hívja meg. és mivel az elején ellenöriz (nálam mysql-be van tárolva az user) ha minden stimmel beenged, ha nem akkor megint megy a login formhoz.
pch
- A hozzászóláshoz be kell jelentkezni
En tamogatom az user visszairasat. Sokszor tudom peldaul, hogy az passt rontottam el, olyankor nem biztos, hogy be akarom irni a usert megeccer, foleg ha az egy felkilometeres e-mail cim.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
+1 user visszairasra.
pch: csak peldanak szantam, barmi mas adatbeviteli form is lehett volna "Adoott pl. login form".
- A hozzászóláshoz be kell jelentkezni
Lol, srácok, ennyi hülyeséget régen olvastam együtt, jót mulattam!!! :-) :-) :-)
A legelső megoldás kapcsán: bármelyik user bármelyik jelszavával beenged! (pl bélát a pista jelszavával)
REQUEST: sorrend megadható, a get-el való felülbírálás meg kifejezetten kívánatos, pl: login.php?username=valaki. Nem jutott eszedbe, he?
mellesleg mindenki jót vitatkozik azon, hogy HOGYAN adj át a paramétert, mikor a biztonság szempontjából az a fontos, hogy MIT ad át, ezt meg mindenki elfelejti leellenőrizni...
Behelyettesítés: teljesen rossz, js nélkül nem is megy. Ja, és jelszót NEM küldünk vissza cleartext formában!
Mindenkinél hiba volt: jean d'arc nem tud belépni! :-D
Ja, és alapszabály: a feldolgozó php-t és a megjelenítést SOSEM keverjük! Először szépen mindent lekezelünk, és ha minden megvan, akkor a legeslegvégén tesszük ki a html-t.
minta login.php:
<!--form kiértékelés -->
<?
//alapból nincs hiba
$error="";
//ha a belép-re nyomtak, csak akkor ellenőrzünk!!!!
if($_REQUEST['loginbtn']){
if(CheckPassword($_REQUEST['username'],$_POST['password'])) {
//beállítunk valami letöltések között is megmaradó cuccot
//setcookie, session_start stb.
header("location:loggedin.php");
exit;
} else {
$error="Nincs ilyen felhasználó vagy hibás jelszó!\n";
}
?>
<!-- ...html kirakás... -->
<?=($error?"<font color='red'>".nl2br($error)."</font>":"")?>
<!-- önmagára küldjük -->
<form action='login.php' method='post'>
<!-- visszaírjuk a usernevet SZERVER oldalon -->
<input type='text' name='username' value='<?=htmlspecialchars($_REQUEST['username'])?>'>
<!-- jelszót SOSEM írunk vissza!!!!!!!!! -->
<input type='password' name='password'>
<input type='submit' name='loginbtn' value='Belépés'>
</FORM>
<!-- ...html kirakás... -->
- A hozzászóláshoz be kell jelentkezni
...pedig a kisoccs Jean tulelte noveret, Joan D'arc-ot:D (az angolok igy emlitik, meginkabb Jeanne a neve:)). viccet felreteve, ezt a reszt nem ertem, ill. ertem, de nem latom, hogy hol bukik el az aposztrof a fenti megoldasokban.
- A hozzászóláshoz be kell jelentkezni
value='' -ba htmlspecialchars-al kerül az érték.
- A hozzászóláshoz be kell jelentkezni
"REQUEST: sorrend megadható, a get-el való felülbírálás meg kifejezetten kívánatos, pl: login.php?username=valaki. Nem jutott eszedbe, he?"
Ez gondolom nekem szolt... En meg nem lattam arra peldat hogy az usernevet valamiert get-tel felul akarnad irni. Persze ettol meg nincs kizarva, a te dolgod.
"Mindenkinél hiba volt: jean d'arc nem tud belépni! :-D"
Nyilvan egyik pelda sem 100%-os kidolgozottsagu, legalabbis nekem nem ez volt a celom.
Abban egyetertek hogy jelszot soha nem irunk vissza.
- A hozzászóláshoz be kell jelentkezni
"En meg nem lattam arra peldat hogy az usernevet valamiert get-tel felul akarnad irni"
Pl, mikor a mailben kiment visszaigazoló link után átdobod a bejelentkezésre. Szeretik a userek, ha nem kell beírni a kilométer hosszú email címüket.
- A hozzászóláshoz be kell jelentkezni
Ha adatmódosító formról van szó, akkor a GET alapból kiesett, mert az mindenféle vicces dologra ad lehetőséget. Namost hogy a POST jól működjön, azt úgy kell megcsinálni, hogy a POSTot feldolgozó oldalnak legyen egy külön URL-je, ami nem szolgál ki semmit, hanem csak visszadobja Location-nel a felhasználót a form oldalára, ha valami nem sikerült (mondjuk beleírva sessionbe a hibát) vagy az eredményoldalra ha sikerült. A külön URL azért kell, mert ha önmagadra redirectelsz, akkor mindenféle érthetetlen szívásnak esel áldozatul.
- A hozzászóláshoz be kell jelentkezni
adatmódosításnál valóban nem megfelelő a GET, márcsak azért sem, mert valószínűleg több adatot küldesz át 256-(base url hossza) karakternél.
A POST-ot feldolgozó oldalnak nem kell külön url-nek lennie, sőt, áttekinthetetlenebb kódot eredményez. Az önmagára küldött form semmilyen érthetetlen szívást nem okoz, ha jól van megtervezve a program. Nem véletlenül írtam, hogy feldolgozó engine legelőször, amiben NINCS html kimenet.
(Azt, hogy áttekinthetlenebb a kód, tapasztalatból tudom. Nemegyszer kaptam régebben olyan feladatot, hogy rázzak gatyába ilyen oldalakat, és elég macerás, mikor a könyvtárban 100ezer filet találsz. Igazodj el. Itt nem arról van szó, ha te csináltad, hanem ha másvalaki kódját kell módosítanod.)
- A hozzászóláshoz be kell jelentkezni