Autor Zpráva
Folly
Profil
Zdravím, už delší dobu mám jistý problém, který se mi nedaří vyřešit, tak bych Vás tímto chtěl požádat o pomoc ... třeba na to někdo přijde.
Můj problém je, že na stránkách mám klasické přihlašování uživatelů ... Návštěvník zadá svůj login a heslo a přihlásí se do systému (jedná se o systém pro rezervaci jízd pro jistou autoškolu ... je to můj první projekt s PHP a MySQL, na kterém se tyto dva jazyky snažím už delší dobu naučit ...) Nicméně samotné přihlášení do systému se mi povede, v případě, že zadám login i heslo správně ... ale můj problém je, že si do proměnné v Session uložím několik věcí, jednou z nich je i login uživatele. Ten ukládám do
$_SESSION['username']
, ale když ho chci později na jedné stránce v systému vypsat za pomoci
echo $_SESSION['username'];
, tak se mi nikdy nevypíše a ani za nic nemůžu přijít proč ... Přitom ostatní proměnné, které mám také uložené v Session jako např. jméno a příjmení uživatele nebo příznakovou proměnou "logged" si nastavuju na jedničku v případě, že je uživatel přihlášen, tak všechny tyto ostatní proměnné, které jsou také typu Session, tak ty se vypíší a není s nimi nejmenší problém až na tu proměnnou s uživatelským jménem
$_SESSION['username']
...
Níže uvádím hlavní skript, který obstarává systém a to soubor rezervace.php a skript kalendar.php, na kterém se snažím vypsat jméno uživatele za pomoci
echo $_SESSION['username'];

Obsah casti souboru rezervace.php:
<?php
session_start();
    
  // Odfiltrovani prijatych hodnot
  $username = (isset($_POST['username'])) ? $_POST['username'] : '';
  $password = (isset($_POST['password'])) ? $_POST['password'] : '';
  $redirect = (isset($_REQUEST['redirect'])) ? $_REQUEST['redirect'] : 'rezervace.php?page=cal&month='.$akt_mesic.'';

  if (isset($_POST['submit']) && $_POST['submit'] == 'Potvrdit') 
  {
    $nazev_tabulky = "site_user"; // Spojitost se souborem db_site_user_create.php
    $dotaz = 'SELECT username FROM '.$nazev_tabulky.' WHERE 
      username = "' . mysql_real_escape_string($username, $db) . '" AND 
      password = "' . mysql_real_escape_string($password, $db) . '"';
      $vysledky = mysql_query($dotaz, $db) or die(mysql_error($db));
            
      
    if (mysql_num_rows($vysledky) > 0) 
    {
      $_SESSION['username'] = $username;
      $_SESSION['logged'] = 1;
      
      // Vytahne z tabulky "site_user" cislo uzivatele (promennou "user_id") podle "username"
      $nazev_tabulky = "site_user"; // Spojitost se souborem db_site_user_create.php
      $dotaz = 'SELECT user_id FROM '.$nazev_tabulky.' WHERE      
        username = "' . mysql_real_escape_string($username, $db) . '"';
      $vysledky = mysql_query($dotaz, $db) or die(mysql_error($db));
      // Vypis zvolenych sloupcu z databaze
      $sloupec_user_id = "user_id";
      while ($row = mysql_fetch_assoc($vysledky))
      {
        $_SESSION['user_id'] = $row[$sloupec_user_id];    
      }      
      
      // Vytahne z tabulky "site_user_info" jmeno a prijmeni uzivatele (promenne "first_name" a "last_name") podle "user_id"
      $nazev_tabulky = "site_user_info"; // Spojitost se souborem db_site_user_create.php
      $dotaz = 'SELECT first_name, last_name FROM '.$nazev_tabulky.' WHERE 
        user_id = "'. mysql_real_escape_string($_SESSION['user_id'], $db) .'"';        
      $vysledky = mysql_query($dotaz, $db) or die(mysql_error($db));
      // Vypis zvolenych sloupcu z databaze
      $sloupec_first_name = "first_name";
      $sloupec_last_name = "last_name";
      while ($row = mysql_fetch_assoc($vysledky))
      {
        $_SESSION['first_name'] = $row[$sloupec_first_name];
        $_SESSION['last_name'] = $row[$sloupec_last_name];    
      }
             
      header('Refresh: 0; URL='.$redirect);
      echo '<p>Nyní budete automaticky poesmirováni na stránku online rezervace jízd.</p>';
      echo '<p>Nebudete-li do 5 sekund poesmirováni automaticky,<a class="normal_link" href="'.$redirect.'">kliknite prosím sem</a>.</p>';
      die();
    } 
    else 
    {
    // Tyto hodnoty je treba explicitne nastavit
    $_SESSION['username'] = '';
    $_SESSION['logged'] = 0;
    $_SESSION['error'] = 1;
    header('Refresh: 0; URL='.$redirect);    
    die();
    }
  mysql_free_result($vysledky);
  }

  
?>
Folly
Profil
pokračování souboru rezervace.php (nevlezl se celý jeho obsah do jednoho příspěvku):
<?php                         
        if (isset($_SESSION['logged']) && $_SESSION['logged'] == 1) 
        {
          switch ($_GET['page'])
          {
            case "cal":
            include "kalendar.php";
            break;
                
            case "book":
            include "book.php";
            break;
            
            case "new";
            include "register.php";
            break;
            
            case "del";
            include "delete.php";
            break;
        
            default:
            echo "Chyba ve switchi nebo v promenne URL - promenna URL nema ani jednu z hodnot nastavenych ve switchi!";
            break;
          }
        } 
        else 
        {
          if (isset($_SESSION['error'])) 
          {                  
            echo '<p><strong>Bylo zadáno neplatné uživatelské jméno nebo heslo!</strong></p>';
          }
          if (isset($_GET['logout'])) 
          {                  
            echo '<p><strong>Byl jste úspešne odhlášen!</strong></p>';
          }
          
          include 'login.php';
        }
      ?>                       


Obsah souboru kalendar.php:
  <h2>Informace</h2>
  <table width="55%" class="static_table" cellpadding="0" cellspacing="0">
    <tr>
      <td>Přihlášen s loginem:</td>
      <td class="green">
      <?php
        echo $_SESSION['username'];
      ?>
     


Za případnou pomoc či nějaký nápad předem moc díky.

//EDIT: zredukoval sem délky kódu na co nejmenší a vybral jen důležité části z kódů, pro větší přehled ...
laijk
Profil
Folly:
dúfam, že som sa nestratil, ale zdá sa mi, že máš zle toto:


  $vysledky = mysql_query($dotaz, $db) or die(mysql_error($db));
            
      
    if (mysql_num_rows($vysledky) > 0) 
    {
    // tu by si mal dopísať:
    extract($vysledky);
    
      $_SESSION['username'] = $username;
      $_SESSION['logged'] = 1;


-oskúšaj to, je to dosť velký kód, dúfam, že som sa nepomýlil.


EDIT: prepáč, asi to nepôjde, pozrel som si to znova, ešte raz si to pozriem, ale môžeš to oskúšať.
laijk
Profil
Folly:
no takto:
ak chceš do tejto premennej:

$vysledky = mysql_query($dotaz, $db) or die(mysql_error($db));


if (mysql_num_rows($vysledky) > 0)
{
// tu by si mal dopísať:
extract($vysledky);

$_SESSION['username']
= $username;
$_SESSION['logged'] = 1;

priradiť hodnotu z databázi, tak by si tam tú funkciu extract mal dať.
Folly
Profil
laijk:
Zkusil sem, jak si radil přidat ten jeden řádek s funkcí extract a bohužel nepomohlo :(.
laijk
Profil
Folly:
mal by si trocha upraviť obsah sôboru kalendar.php lebo to horné
<?php
tam asi nemá byť, alebo ked áno tak niekde tam môže byť chyba.
Folly
Profil
laijk:
Jj, sry za něj, to tam být samozřejmě nemá, zůstalo mi tam po editaci toho kódů, v reálu to mám v tom souboru kalendar.php správně v něm si myslím, že problém není ... nebo spíš není kde, tam se snažím jen tu proměnou vypsat za pomocí
echo $_SESSION['username'];
spíš ta chyba musí být nebo všechno tomu nasvědčuje někde v tom hlavním skriptu rezervace.php, ale ať se dívám jak se dívám, nemůžu ji najít ...
Folly
Profil
Další poznatek je, že na localhostu mi to funguje normálně ... Ale po uploadu na web, hosting = webzdarma, to nefunguje ... Jinak stránka je umístěna zde.
sacharoza
Profil *
Pokud ostatni se ostatni udaje vypisi, tak zmente jmeno session napr. na $_SESSION['user'].
Folly
Profil
sacharoza:
Moc, moc díky ... Rada pomohla a po přejmenování proměnné na $_SESSION['usern'] vše funguje jak má. Nikdy by mě nenapadlo, že by to mohlo být tímto a nikdy bych nezkusil přejmenovat tu proměnou, takže obrovské díky za spoustu ušetřené práce.

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:

0