Autor Zpráva
PHP_Nemaster
Profil
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
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: