Nefunguje správně $_SESSION - výpis proměnných z databáze – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nefunguje správně $_SESSION - výpis proměnných z databáze – PHP – Fórum – Programujte.comNefunguje správně $_SESSION - výpis proměnných z databáze – PHP – Fórum – Programujte.com

 

6. 4. 2014   #1
-
-1
-
Mimo téma
Kit -

Zdravím,

Již jsem se s touhle problematikou zabýval zde:
http://diskuse.jakpsatweb.cz/?action=vthread&forum=9&topic=156115 
Zde tedy ještě uvedu kód:

<?php
$path = "/login/";  // máte-li stránky v rootu, nechte bezezměny, pokud je provozujete v nějakém podadresáři, zadejte jeho jméno
              // např. stránky mám na moje-domena.cz/adresar/, tak zadám $path = "/adresar/";
 
// funkce pro ošetření vstupních dat od uživatele
// viz http://cz.php.net/…guration.php#…
function db_escape($str) 
{ 
    return mysql_real_escape_string(@get_magic_quotes_gpc() ? stripslashes($str) : $str);
} 
 
 
$link = mysql_connect("localhost", "uz.jmeno", "heslo");
mysql_select_db("database", $link);
session_start();  // tohle je nezbytné a je nutné uvést tuto funkci na všech stránkách, kam se přihlášený uživatel dostane
                  // možnost nastavit automatické spouštění session_start() nechávám stranou
 
// zjistíme, co chce uživatel dělat
if (isset($_SESSION['nick']) && isset($_GET['logout']))
{
    // uživatel je přihlášen a chce se odhlásit, takže smažeme údaje o přihlášení
    $_SESSION = array();
    if (isset($_COOKIE[session_name()]))
    {
        setcookie(session_name(), '', time()-42000, '/');
    }
    session_unset();
    session_destroy();
    // a přesměrujeme na index.php
    header("location:http://".$_SERVER['SERVER_NAME'].$path."index.php", TRUE, 303);
    exit;
}
elseif (isset($_SESSION['nick']))
{

    //session_regenerate_id(); // ochrana před session fixation, lze vynechat
    // uživatel je přihlášen a nechce se odhlásit, zde zobrazíme obsah pro registrované
    // můžeme využit include apod.
 
    // tohle informuje uživatele, že je přihlášen a vypíše odkaz pro odhlášení
    // můžeme to ale přemístit do includovaného souboru (kam se nám hodí)
    echo "<p>Přihlášen: $_SESSION[nick] <a href=\"http://".$_SERVER['SERVER_NAME'].$path."index.php?logout=1\">odhlásit</a></p>\n";
    echo "Email: $result[email]";


}  

else
{
    // uzivatel není přihlášen
    // pokud odeslal přihlašovací údaje, snaží se přihlásit
    if (isset($_POST['nick']) && isset($_POST['heslo']))
    {
        // ošetříme vstupní údaje od uživatele
        // funkce trim() má význam hlavně u hesla, ořeže bílé znaky (např. mezery) na začátku a konci řetězce
        $nick = db_escape(trim($_POST['nick']));
        $heslo = db_escape(trim($_POST['heslo']));
 
        // zjistíme, jestli je v databázi daný uživatel a jestli se prokazuje platným heslem
        // více o ukládání hesel, např. o tzv. solení, najdete na http://php.vrana.cz/…ni-hesel.php
         
        $result = mysql_query("SELECT * FROM uzivatele WHERE nick = '$nick' AND heslo = sha1('$heslo')", $link);
        
        if (mysql_num_rows($result))  // předpokládáme, že dotaz proběhl úspěšně, pokud ne, bude stejně vráceno false
                                       // true (a splnění podmínky) nastane pouze tehdy, když v databázi existuje správná kombinace uživatelského jména a hesla   
        
        {     
        
    $row = mysql_fetch_assoc($result);
    echo $row["nick"];
    echo $row['email'];
    echo $row["heslo"];

            // uložíme potřebné SESSION proměnné
            $_SESSION['nick'] = $nick;
            $_SESSION['heslo'] = $row['heslo'];
            $_SESSION['email'] = $result['email'];
            $_SESSION['cas_prihlaseni'] = time(); // čas, kdy se uživatel přihlásil, pozor, nejedná se o čas poslední akce, nevím, jestli ho využijete, může být smazán      
            
            // po přihlášení uživatele přesměrujeme na index.php
            header ("location:http://".$_SERVER['SERVER_NAME'].$path."index.php", TRUE, 303);
            exit;  // aby bylo pravidlům učiněno zadost, zde stejně končí podmínka a jiná nemůže být splněna            
        }  
        else
        {
            // uživatel zadal neplatné přihlašovací údaje
            // přesměrujeme ho na index.php a zobrazíme chybovou hlášku
            header ("location:http://".$_SERVER['SERVER_NAME'].$path."index.php?incorrect_login=1", TRUE, 303);
            exit;
        }
    }
    else
    {
      // uživatel není přihlášen a ani neodeslal přihlašovací formulář, tak mu ho zobrazíme
      echo "<div>";
      if (isset($_GET['incorrect_login']))
      {
          echo "<center><p style=\"color: #F00\">Zadali jste neplatné uživatelské jméno nebo heslo</center></p>\n";
      }
      // zobrazíme formulář pro přihlášení
      ?>
      <center><div class='container2'>
      <form action="index.php" method="post">
      <div class="box">
        Jméno:  <input name="nick" class="input_text"  type="text"><br>
        Heslo: <input name="heslo"  class="input_text" type="password"><br>
        <input name="submit" type="submit" class="button"  value="Přihlásit">
      </form>
      </div>
      
      
      <?php
    }
}
?>

$_SESSION['nick'] se normálně vypíše a po přihlášení to napíše: Přihlášen: Fastmancz
Bohužel u $_SESSION['email'] to nic nevypíše (přitom v tabulce email existuje). 

Nevíte kde by mohla být chyba? Doufám, že aspoň vy budete vědět.
Děkuji za odpověď.

*Cílem je, aby se po přihlášení uživateli (např. Fastmancz) vypsali veškeré informace z jeho tabulky z databáze (email a další) ty si bude moc dál editovat a ukládat.

Nahlásit jako SPAM
IP: 90.180.68.–
Kit+15
Guru
6. 4. 2014   #2
-
0
-

#1 Fastmancz
Nauč se zalamovat řádky, tohle se nedá číst.

Proč vlastně do $_SESSION ukládáš tolik zbytečností? Stačí user_id a prípadně nějaká závislost na použitém browseru.

Kdyby sis zapnul warningy, tak bys určitě zjistil, že proměnná $result['email'] neexistuje a že bys měl raději použít $row['email']. Jenom bys to neměl ukládat do session, protože to tam jednoduše nepatří.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
7. 4. 2014   #3
-
0
-

#1 Fastmancz
To je drzost. Našel jsem ti chybu v programu a ty jsi mi za to dal mínus.

Nahlásit jako SPAM
IP: 37.48.35.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý