Autor Zpráva
wayne
Profil *
Zkoušel sem toho už opravdu hodně, ale nic nefunguje. Mám login:
<?php
ob_start();

session_start(); 
if(isset($_POST['mail'])){
  require_once 'db.php';
  $mail = $_POST['mail'];
  $pass = $_POST['heslo'];
    $query = mysql_query("SELECT * FROM `uzivatele` WHERE `mail` = '$mail' and `heslo` = '$pass'") or die (mysql_error());
    
      $Vysledek = mysql_fetch_array($query);
        if($Vysledek['mail']){
       
          $_SESSION['prihlasen'] = 1;
          $_SESSION['login'] = $Vysledek['jmeno'];
          $_SESSION['UserId'] = $Vysledek['id'];
          $_SESSION['UserWeb'] = $Vysledek['web'];
          $_SESSION['UserMail'] = $Vysledek['mail'];
          $bl="index3.php";
          header("location: $bl"); 
          exit;
        }else{
          $b2="index.php";
          header("location: $b2"); 
          exit;
          // echo "Zadal jsi špatné údaje";
        }
    mysql_free_result($query);
}else{
  echo "Zde nic není.";
}
ob_end_flush();
?>


a potom na hlavní stránce po prihlášení:
<?php

if(!isset($_SESSION['prihlasen']) and @$_SESSION['prihlasen']!=1){
  echo "<script>
window.location.href=\"index.php\";
</script>";
  exit;
}
?>


A když @$_SESSION['prihlasen']!=1 tak mě to přesměrujte, i když jsem přihlášený. A když 0, tak se nestane vůbec nic, ani pro nepřihlášeného. Nevíte co s tím? Díky moc za odpověď.
wayne
Profil *
Jenom podotýkám, že index.php je místo registrace a loginu. A hlavní stránka je index3.php
Tori
Profil
wayne:
Ad druhý kus kódu: chybí session_start(). Druhá polovina podmínky je zbytečná - pokud v poli SESSION neexistuje klíč 'prihlasen', nemůže se jeho obsah něčemu rovnat nebo nerovnat. Neměl v té podmínce být jiný logický operátor?
wayne
Profil *
SESSION neexistuje klíč 'prihlasen'

Operátory sem zkoušel změnit, ale ani to nepomohlo.
V prvním kusu kódu jsem definoval, že $_SESSION['prihlasen'] = 1;... Atakže by to mělo jet nebo ne? Napsal by si mi, prosím tě, jak by to mělo vypadat? Jsem se úplně zasekl.
Tori
Profil
No a to session_start() tam máte, nebo ne? Bez toho to nepojede.
Zkuste si tu podmínku říct česky: „pokud není definované SESSION[prihlasen] a zároveň uživatel není přihlášen“. Anebo to spíš má být: „pokud není definované SESSION[prihlasen] a/nebo uživatel není přihlášen“?
wayne
Profil *
<?php
 session_start();
if(!isset($_SESSION['prihlasen']) and @$_SESSION['prihlasen']!=1){
  echo "<script>
window.location.href=\"index.php\";
</script>";
  exit;
}
?>


Funguje to tak, že když je někdo nepřihlášený, tak ho to přesměruje. A když je přihlášený tak to vypíše:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /data/web/virtuals/3735/virtual/www/index3.php:57) in /data/web/virtuals/3735/virtual/www/index3.php on line 58
wayne
Profil *
Dal jsem to do komentáře <!-- ... -->, takže to nic nepíše. Snad je to takhle vyřešeno. Díky moc!!
Tori
Profil
wayne:
Dal jsem to do komentáře <!-- ... -->, takže to nic nepíše.
Nevěřím, že by se to tím vyřešilo - tenhle komentář se zpracuje až v prohlížeči, to už je dávno pozdě. Podle chybové hlášky tipuji, že ten kód v [#6] není ze začátku skriptu, ale spíš z prostředka - něco před session_start posílá výstup do prohlížeče: echo, chybová hláška PHP, zalomení řádku,... Session_start musí být na začátku skriptu (ale po ob_start() ), nejlépe před čímkoli, co by mohlo generovat jakékoli chybové hlášky.
wayne
Profil *
Tak to přesměrování funguje asi jenom v Mozzile. V provozu: http://tridni.cz/index3.php V ostatních prohlížečích se mi zobrazí jenom pozadí body.
wayne
Profil *
Oprava: přesměrování funguje všude kromě chrome.
Tori
Profil
No ale ta chybová hláška o výstupu před session_start() zůstává... ukažte, prosím, prvních cca 15-20 řádků z index3.php.
Přesměrování v JavaScriptu nesouvisí se čtením ze $_SESSION v PHP.
wayne
Profil *
Přesměrování funguje jak má, ale hláška zůstává.

kousek kódu:
<html>
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="generator" content="PSPad editor, www.pspad.com">;
<link rel="stylesheet" type="text/css" href="css/css2.css" media="all"> 
<link href="css/favicon.png" rel="icon" type="image/png" /> 
<title>Septima B</title>
</head>

<body> 

<?php
 session_start();
if(!isset($_SESSION['prihlasen']) and @$_SESSION['prihlasen']!=1){
  echo "
    
  
  <script>
window.location.href=\"index.php\";
</script>

"
;
  exit;
}
?>



<script type="text/javascript" src="css/tooltips.js"></script>
<script type="text/javascript" src="jquery.js"></script>

pak to pokracuje
Tori
Profil
session_start() má být ještě před tím kusem html. I kdyby před <?php byl jen prázdný řádek, tak už je to považováno za výstup a znak zalomení řádku se odešle do prohlížeče, takže všechny další volání session_start nebo header si budou stěžovat na "headers already sent".
Takže nejdřív podmínka, jestli je uživatel přihlášen (+přesměrování, pokud není) a až potom html.

Co se týká přesměrování: použila bych buď funkci header v PHP jako máte v prvním bloku kódu v [#1], anebo tag <meta> (pokud chcete před přesměrováním zobrazit nějaké info), než se spoléhat na zapnutý JavaScript.
wayne
Profil *
Vyřešeno. Díky moc!

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: