Autor Zpráva
Martin011
Profil
Dobrý den, mám problém s přihlášením na stránky. Registrace nového uživatele proběhne bez problémů i samotné přihlášení nepíše žádnou chybu. Problém je v tom, že se mi nezobrazuje, že je uživatel přihlášen. Pořád tam zůstává uživatel nepříhlášen. V souboru login_zpracuj.php mám tenhle kód:

<?php
ob_start();

session_start();
if(isset($_POST['jmeno'])){
require_once 'db.php';
$name = $_POST['jmeno'];
$pass = md5($_POST['heslo']);
$query = mysql_query("SELECT * FROM `uzivatele` WHERE `jmeno` = '$name' and `heslo` = '$pass'") or die (mysql_error());

$Vysledek = mysql_fetch_array($query);
if($Vysledek['jmeno'])
$_SESSION['prihlasen'] = 1;
$_SESSION['login'] = $Vysledek['jmeno'];
$_SESSION['UserId'] = $Vysledek['id'];
$_SESSION['UserWeb'] = $Vysledek['web'];
$_SESSION['UserMail'] = $Vysledek['mail'];
$bl="index.php";
header("location: $bl");
exit;
}else{
$bl="index.php?Alert=6";
header("location: $bl");
exit;
// echo "Zadal jsi špatné údaje";
}
mysql_free_result($query);
}else{
echo "Zde nic není.";
}
ob_end_flush();
?>
fopen
Profil *
a v souboru "uživatel nepříhlášen" mas session_start(); ?
Martin011
Profil
no, mám více souborů, ale v hlavním index.php mám:


<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="cs" />
<link rel='stylesheet' type='text/css' href='styl.css' />

<body>

<div id="horni_menu">
<?php

* V přihlašovacím skriptu jsme nastavili $_SESSION['prihlasen']=1, pokud se $_SESSION['prihlasen'] opravdu rovná jedničce, uživatel je přihlášen.

if(isset($_SESSION['prihlasen']) and $_SESSION['prihlasen']==1){
echo "<strong>Přihlášený uživatel</strong>: ".$_SESSION['login'] . " | <a href='logout.php?logout=yes'> Odhlásit se</a>";
}else{
echo "Nejsi přihlášen | <a href='index.php?page=registrace'> Registrace</a> | <a href='index.php?page=login'> Login</a>";
}
?>

</div>

<?php

if (IsSet($_GET['page']))
$soubor=$_GET['page'];
$soubor2= dirname($_SERVER['SCRIPT_FILENAME'])."/".$soubor.".php";
if(file_exists($soubor2))
include $soubor2;

}else{
include "uvod.php";
}


if(isset($_GET['Alert'])){
require "inc/error_msg.php";
$JsAlert=$_GET['Alert'];
echo '<script language="javascript" type="text/javascript">alert("'.$Rvi[$JsAlert].'");</script>';
}
?>
</div>
</div>
</body>
</html>
Martin011
Profil
a v souboru protected.php : ale toten kód je jenom pro registrované,


<?php

if(!isset($_SESSION['prihlasen']) and @$_SESSION['prihlasen']!=1){
echo "<h1>Tato stránka je jen pro registrované</h1>";
exit;
}
?>
Martin011
Profil
potom by chyba mohla být ještě v některých ostatních souborech:

tak mám reg_zpracuj.php :

<?php
ob_start();
if(isset($_POST['sent']))
$jmeno=trim($_POST['jmeno']);
$heslo1=$_POST['heslo'];
$heslo2=$_POST['heslo_znovu'];
$mail=trim($_POST['mail']);
$web=trim($_POST['web']);
if($jmeno=="" or $heslo1=="" or $mail=="")
echo "Nebyly vyplněny všechny povinné údaje!";
}else{
require "db.php";
$PocetStejnych=mysql_result(mysql_query("SELECT COUNT(*) FROM `uzivatele` WHERE `jmeno`='$jmeno' OR `mail`='$mail'"),0);
if($PocetStejnych!=0)
echo "Zadané jméno nebo email je již používán někým jiným!!!";
}elseif($heslo1 != $heslo2)
echo "Zadané hesla se neshodují!!!";
}else{
$heslo=md5($heslo1);
if($web=="http://" or $web=="")
$web="";
}
$VlozData=mysql_query(" INSERT INTO uzivatele (`jmeno`,`heslo`,`mail`,`web`,`prava`)
VALUES
('$jmeno', '$heslo', '$mail', '$web', '0') ") or die (mysql_error());

if($VlozData){
echo "Data byla uložena";
}
}

}
}else{
echo "Nebyl odeslán formulář";
}

echo "<a href='index.php'>index</a>";

header ("Location: index.php");
ob_end_flush();
?>
Martin011
Profil
potom ještě samostatný formulář pro registraci, samostatný formulář pro login a toť vše
Mastodont
Profil
V tom souboru protected.php musíš mít session_start() taky.

Zkusil bych před
header("location: $bl"); 

dát ještě
session_write_close();
Martin011
Profil
takže kód protected.php by vypadal takto?

<?php
session_start();
?>

<?php

if(!isset($_SESSION['prihlasen']) and @$_SESSION['prihlasen']!=1){
echo "<h1>Tato stránka je jen pro registrované</h1>";
exit;
}
?>
Mastodont
Profil
<?php
session_start();

if(!isset($_SESSION['prihlasen']) and @$_SESSION['prihlasen']!=1){
echo "<h1>Tato stránka je jen pro registrované</h1>";
exit;
}
?>
Martin011
Profil
vyzkoušel jsem i dát session_write_close(); před header("location: $bl"); ,ale pořád se nic neděje.
Martin011
Profil
ještě mám tenhle kód: logout.php


<?php
ob_start();
// odhlaseni autora
if(IsSet($_GET['logout']) and $_GET['logout']=="yes") {
Session_Start(); // Pokud chceme pracovat se session, musíme je "nastartovat". I pokud je chceme zničit.
Session_Destroy(); // Zničíme sessions
}
header ("location: index.php?Alert=7"); // přesměrujeme na index
ob_end_flush();
?>
Martin011
Profil
představoval bych si to nějak, jak to je: http://pecan.cz/ukazky/registrace/index.php?page=login, mohl byste mi prosím vás napsat či naznačit, jak byste to udělal vy. Děkuji mockrát
Martin011
Profil
problém je vyřešen
Martin011
Profil
díky moc za pomoc, už to funguje, chyba byla právě v 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: