Autor | Zpráva | ||
---|---|---|---|
PHP_Nemaster Profil |
#1 · Zasláno: 11. 6. 2009, 18:49:28
Dobrý den,
mám stránku, na které mám přihlašovací systém, ale ten nefunguje tak, jak bych chtěl. Přihlásí uživatele, ale správný obsah se zobrazí pouze po obnovoneví stránky ( chová se, jak by neměla relace žádný obsah ), v opačném případě se objeví přihlašovací pole a je potřeba se přihlásit znova, nevíte, co s tím? Toto je kód: ____________________________________________________ Kontrola údajů. Pokud zadám heslo špatně, objeví se stránka icpass.php. Pokud správně, objeví se také, ale po obnovení to funguje normálně... <?php include "connect.php"; session_start(); if ( ( isset( $_SESSION['username']) && $_SESSION['username'] != "" ) or ( isset( $_SESSION['password']) && $_SESSION['password'] != "" ) ) { echo $_SESSION['username']; } else { include "icpass.php"; } ?> Přihlašovací stránka. <?php session_start(); include "connect.php"; error_reporting ( E_ERROR ); if ( isset( $_POST['submit'] ) ) { $query = "SELECT username, password FROM Profiles WHERE password = '".$_POST['password']."' AND username = '".$_POST['username']."'; "; $result = mysql_query( $query ); if ( mysql_num_rows( $result ) == 1 ) $_SESSION['username'] = $_POST['username']; $_SESSION['password'] = $_POST['password']; } ?> <html> <form action="session.php" method="post"> Name: <input type="text" name="username"><br> Password: <input type="password" name="password"><br> <input type="submit" name="submit" value="submit"> </form> </html> icpass.php - je úplně stejná jako login.php, přesměruji tam uživatele z session.php, pokud zadá nesprávné heslo. <?php session_start(); include "connect.php"; if ( isset( $_POST['submit'] ) ) { $query = "SELECT username, password FROM Profiles WHERE password = '".$_POST['password']."' AND username = '".$_POST['username']."'; "; $result = mysql_query( $query ); if ( mysql_num_rows( $result ) == 1 ) $_SESSION['username'] = $_POST['username']; $_SESSION['password'] = $_POST['password']; } ?> <html> <form action="session.php" method="post"> Name: <input type="text" name="username"><br> Password: <input type="password" name="password"><br> <input type="submit" name="submit" value="submit"> </form> </html> _____________________________________________ Pokud jsem to napsal nesrozumitelně, vyzkoušejte to prosím zde: www.amaga.czweb.org Registrace: www.amaga.czweb.org/register.php Přihlášení: www.amaga.czweb.org/login.php Po přihlášení na login.php vás to přesměruje na session.php, tam uvidíte opět přihlašovací pole. Pokud jste zadali správně heslo, obnovte stránku a měli byste vidět svoje přihlašovací jméno. Je to normální a je vždy třeba pro aktivaci relace obnovit stránku? Předem děkuji za odpověd'. |
||
TomášK Profil |
#2 · Zasláno: 11. 6. 2009, 19:25:28
Studovat se mi to nechce, na to je to moc dlouhý, ale od pohledu tam vidím
session_start() uprostřed kódu, což je chyba, která by mohla způsobit tatko podivné chování - musí být před začátkem jakéhokoliv výstupu - což není. |
||
AM_ Profil |
#3 · Zasláno: 11. 6. 2009, 20:40:00
„error_reporting ( E_ERROR );“
proč? a proč je to jen v jednom souboru? Je to dost zmatečné a špatně navržené, už jen proto, že tam máš dva skoro stejné soubory - lze řešit proměnnými a nacpat do jednoho. „if ( mysql_num_rows( $result ) == 1 ) $_SESSION['username'] = $_POST['username']; $_SESSION['password'] = $_POST['password'];“ tady je další chyba, když za tím if nemáš {}, naváže se na něj jen jeden následující příkaz, což zřejmě nechceš. Prostě je tam spousta chyb, ten kód si trochu zreviduj a pak se ptej na konkrétní věci :) to, že se přihlášení projeví až po refreshi, bývá obvykle prohozeným postupem - první musíš kontrolovat, jestli je v POST odeslaný login (a uložit do session nějaký příznak), a až potom, jestli je uživatel přihlášen pomocí session. |
||
Časová prodleva: 15 let
|
0