Autor Zpráva
Folly
Profil
Po dlouhé době opět zdravím :). Ale opět sem narazil na zásadní problém. Mam systém na přihlašování a registraci uživatelů. Po zadání správného username i password do přihlašovací formuláře si nastavím do proměnné $_SESSION['logged'] jedničku viz
$_SESSION['logged'] = 1;
. Po kliknutí na tlačítko Potvrdit se mi opravdu do výše zmíněné proměnné nastaví 1, což si kontroluju výpisem její hodnoty viz
echo $_SESSION['logged'];
, po kliknutí na tlačitko Potvrdit se přesměruju na stránku na které kontroluji podmínkou, jestli je proměnná $_SESSION['logged'] vůbec nastavená a jestli je její hodnota v 1. Jenže stránka na kterou jsem přesměrován se tváří jako kdyby proměnná vůbec neexistovala a vypíše mi: Notice: Undefined index: logged in C:\xampp\htdocs\project\rezervace.php on line 62. Přikádám dva kódy: rezervace.php a login.php. Na stránce rezervace kontroluji právě přes proměnnou $_SESSION['logged'] jestli je uživatel přihlášen a když ano tak ve switchi vyhodnotím podle proměnné page, kterou získávám z URL ($_GET['page']), kterou stránku zobrazím. V případě že uživatel není přihlášen - tzn., že proměnná $_SESSION['logged'] není nastavena a není v 1 tak mu vypíše přihlašovací formulář.
Obsah souboru rezervace.php:
<?php
session_start();
  function cesky_mesic($mesic)
  {
    static $nazvy = array(1 => 'leden', 'unor', 'brezen', 'duben', 'kveten', 'cerven', 'cervenec', 'srpen', 'zari', 'rijen', 'listopad', 'prosinec');
    return $nazvy[$mesic];
  }
  
  $akt_mesic = date("n");
?>

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
  <html>
    <head>
      <meta name="GENERATOR" content="Easy Editor 2005">
	    <meta http-equiv="Content-Language" content="cs">
	    <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
	    <link rel="stylesheet" type="text/css" href="style.css">
	    <title>Autoškola Matula Brno - Systém online rezervace jízd</title>
    </head>
 
    <body>

      <div align="center">
        <div id="page">
    
          <!-- zacatek Leftbar -->
	        <div id="leftbar">
		
		        <div id="logo">
		          <img src="images/logo_zel.PNG" width="200" height="89" alt="logo" border="0">
		        </div>
		
		        <div id="logolink">
		          <a href="index.htm">www.autoskola-matula.cz</a>
		        </div>
		
		        <div id="separator">
		          <img src="images/nabidka.PNG" width="200" height="30" alt="nabidka" border"0">
            </div>
		
		        <div id="menu">		
              <ul>
				        <li><a href="index.php">úvodní stránka</a></li>
				        <li><a href="informace.php">informace</a></li>
				        <li><a href="prihlasky.php">poihlášky</a></li>
				        <li><a href="mapa.php">kde nás najdete</a></li>
				        <li><a href="kontakty.php">kontakty</a></li>
				        <li><a href="odkazy.php">odkazy</a></li>
				        <li><a href="rezervace.php?page=cal&month=<?php echo $akt_mesic; ?>">systém online rezervace jízd</a></li>                     
			        </ul>
		        </div>
				
	         </div>
	         <!-- konec Leftbar -->
	
	         <!-- zacatek Rightbar -->
	         <div id="rightbar">
	           <h1>Systém online rezervace jízd</h1>
	
            <?php
              echo $_SESSION['logged'];              
              if (isset($_SESSION['logged']) && $_SESSION['logged'] == 1) 
              {
                switch ($_GET['page'])
                {
                  case "cal":
                  include "kalendar.php";
                  break;
                
                  case "book":
                  include "book.php";
                  break;
        
                  default:
                  echo "Chyba ve switchi nebo v promenne URL - promenna URL nema ani jednu z hodnot nastavenych ve switchi!";
                  break;
                }
              } 
              else 
              {
                include 'login.php';
              }
            ?>                       
  
	         </div>
	         <!-- konec Rightbar -->

        </div>
        <!-- konec Page -->
    
      </div>
      <!-- konec align=center -->	

    </body>
  </html>

Obsah souboru login.php:
<?php

  // Pripojeni se k MySQL
  include 'db.inc.php';
      
  $db = mysql_connect(hostitel, uzivatel, heslo) 
  or die ('Nemohu se pripojit k databazi. Zkontrolujte prosim pripojení k serveru.');

  // Nastavim databazi jako pracovni
  mysql_select_db(nazev_databaze, $db) or die(mysql_error($db));
              
  // Odfiltrovani prijatych hodnot
  $akt_mesic = date("n");
  $username = (isset($_POST['username'])) ? trim($_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'])) 
  {
    $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;
      header('Refresh: 5; URL='. $redirect);
      echo $_SESSION['logged'];
      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;

    $error = '<p><strong>Bylo zadáno neplatné uživatelské jméno nebo heslo!</strong></p>';
    }
  mysql_free_result($vysledky);
  }

  if (isset($error)) 
  {
    echo $error;
    
    die();
  }
?>
  <form action="login.php" method="post">
    <table>
      <tr>
        <td>Uživatelské jméno:</td>
        <td><input type="text" name="username" maxlength="20" size="20" value="<?php echo $username; ?>"/></td>
      </tr>
      <tr>
        <td>Heslo:</td>
        <td><input type="password" name="password" maxlength="20" size="20"/></td>
      </tr>
      <tr>
        <td></td>
        <td><input type="hidden" name="redirect" value="<?php echo $redirect ?>"/>
            <input type="submit" name="submit" value="Potvrdit"/></td>
      </tr>
    </table>
  </form>
<?php
mysql_close($db);
?>
Folly
Profil
Problém je asi s tím kam umístit session_start(). Podle toho, co jsem pochopil z různých materiálů ji stačí uvést jen jednou a musí se uvést před jakýmkoliv výstupem, což splňuji - v souboru rezervace.php ji mám hned na začátku souboru viz kód výše - 2. řádek hned na začátku za značkou php (<?php), za kterou není nic jiného jako například mezera. A soubor login.php je v rezervace.php includnutý až na řádku 82. Jedině jestli není problém v tom, že při přihlášení po kliknutí na tlačítko Potvrdit se znovu přesměruju na stránku rezervace.php tím pádem se znovu přečte session_start(), ale to by snad vadit nemělo ?
panther
Profil
Folly:
zapni si vypisování chybových hlášek. Minimálně na ř. 31 v login.php máš header, který však musí být před veškerým výstupem.

Jinak session_start() se volá v každém souboru, a to jednou. Pokud includuješ soubory do jednoho indexu, stačí ji zavolat v indexu.
Folly
Profil
panther:
Takže funkci session_start() mám umístěnou dobře jen na "indexové stránce" rezervace.php.
A jestli jsem Vás tedy správně pochopil, tak pro funkci header() platí stejné pravidlo jako pro session_start() a to, že musí být uvedeny ještě před jakýmkoliv výstupem. V tom případě potřebuji jinou funkci která mě dokáže přesměrovat na jinou stránku tak jako funkce header(), ale potřebuji, abych ji mohl umístit kamkoliv do kódu. V tom případě bych se Vás chtěl zeptat jestli taková nějaká existuje. V PHP a SQL jsem začátečník a tohle je můj první pokus o projekt. Předem moc děkuji za odpověď.
panther
Profil
Folly:
potřebuji jinou funkci která mě dokáže přesměrovat na jinou stránku tak jako funkce header(), ale potřebuji, abych ji mohl umístit kamkoliv do kódu.
můžeš přesměrovávat buď javascriptem, nebo, a to je běžnější, funkcí header umístěnou na začátku kódu.

Zpracování formuláře vůbec nemusíš mít v login.php, ale klidně hned nahoře v rezervace.php, případně v odděleném souboru, který bude sem nahoru includnutý.

<?php
if (odeslani formulare) {zpracovani; header()}
dalsi PHP kod
?>
nejake html
INCLUDE login.php
nejake html
Folly
Profil
panther:
Omlouvám, ale asi jsem natvrdlý nebo je to tím že u toho od středy až do těd téměř nonstop sedím, ale úplně jsem nepochopil Váš poslední post.
panther
Profil
Folly:
nu dobrá. Upozorňuji, že kód jen kopíruji z tvých útržků - případné chyby v něm nehledám.

rezervace.php
<?php

session_start();
  function cesky_mesic($mesic)
  {
    static $nazvy = array(1 => 'leden', 'unor', 'brezen', 'duben', 'kveten', 'cerven', 'cervenec', 'srpen', 'zari', 'rijen', 'listopad', 'prosinec');
    return $nazvy[$mesic];
  }
  
  $akt_mesic = date("n");

  // Pripojeni se k MySQL
  include 'db.inc.php';
      
  $db = mysql_connect(hostitel, uzivatel, heslo) 
  or die ('Nemohu se pripojit k databazi. Zkontrolujte prosim pripojení k serveru.');

  // Nastavim databazi jako pracovni
  mysql_select_db(nazev_databaze, $db) or die(mysql_error($db));
              
  // Odfiltrovani prijatych hodnot
  $akt_mesic = date("n");
  $username = (isset($_POST['username'])) ? trim($_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'])) 
  {
    $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;
      header('Refresh: 5; URL='. $redirect);
      echo $_SESSION['logged'];
      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;

    $error = '<p><strong>Bylo zadáno neplatné uživatelské jméno nebo heslo!</strong></p>';
    }
  mysql_free_result($vysledky);
  }

  if (isset($error)) 
  {
    echo $error;
    
    die();
  }
?>

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
  <html>
    <head>
      <meta name="GENERATOR" content="Easy Editor 2005">
        <meta http-equiv="Content-Language" content="cs">
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
        <link rel="stylesheet" type="text/css" href="style.css">
        <title>Autoškola Matula Brno - Systém online rezervace jízd</title>
    </head>
 
    <body>

      <div align="center">
        <div id="page">
    
          <!-- zacatek Leftbar -->
            <div id="leftbar">
        
                <div id="logo">
                  <img src="images/logo_zel.PNG" width="200" height="89" alt="logo" border="0">
                </div>
        
                <div id="logolink">
                  <a href="index.htm">www.autoskola-matula.cz</a>
                </div>
        
                <div id="separator">
                  <img src="images/nabidka.PNG" width="200" height="30" alt="nabidka" border"0">
            </div>
        
                <div id="menu">        
              <ul>
                        <li><a href="index.php">úvodní stránka</a></li>
                        <li><a href="informace.php">informace</a></li>
                        <li><a href="prihlasky.php">poihlášky</a></li>
                        <li><a href="mapa.php">kde nás najdete</a></li>
                        <li><a href="kontakty.php">kontakty</a></li>
                        <li><a href="odkazy.php">odkazy</a></li>
                        <li><a href="rezervace.php?page=cal&month=<?php echo $akt_mesic; ?>">systém online rezervace jízd</a></li>                     
                    </ul>
                </div>
                
             </div>
             <!-- konec Leftbar -->
    
             <!-- zacatek Rightbar -->
             <div id="rightbar">
               <h1>Systém online rezervace jízd</h1>
    
            <?php
              echo $_SESSION['logged'];              
              if (isset($_SESSION['logged']) && $_SESSION['logged'] == 1) 
              {
                switch ($_GET['page'])
                {
                  case "cal":
                  include "kalendar.php";
                  break;
                
                  case "book":
                  include "book.php";
                  break;
        
                  default:
                  echo "Chyba ve switchi nebo v promenne URL - promenna URL nema ani jednu z hodnot nastavenych ve switchi!";
                  break;
                }
              } 
              else 
              {
                include 'login.php';
              }
            ?>                       
  
             </div>
             <!-- konec Rightbar -->

        </div>
        <!-- konec Page -->
    
      </div>
      <!-- konec align=center -->    

    </body>
  </html>


login.php
<form action="login.php" method="post">
    <table>
      <tr>
        <td>Uživatelské jméno:</td>
        <td><input type="text" name="username" maxlength="20" size="20" value="<?php echo $username; ?>"/></td>
      </tr>
      <tr>
        <td>Heslo:</td>
        <td><input type="password" name="password" maxlength="20" size="20"/></td>
      </tr>
      <tr>
        <td></td>
        <td><input type="hidden" name="redirect" value="<?php echo $redirect ?>"/>
            <input type="submit" name="submit" value="Potvrdit"/></td>
      </tr>
    </table>
  </form>


Zároveň si všimni, že zbytečně vícekrát deklaruješ třeba proměnnou $akt_mesic.
Folly
Profil
panther:
Moc Vám děkuji za Vaši ochotu a trpělivost, vše je plně funkční, díky.

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