Autor | Zpráva | ||
---|---|---|---|
Folly Profil |
#1 · Zasláno: 20. 2. 2011, 17:31:35
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; echo $_SESSION['logged']; 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 |
#2 · Zasláno: 20. 2. 2011, 18:21:59 · Upravil/a: Folly
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 |
#3 · Zasláno: 20. 2. 2011, 18:29:09
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 |
#4 · Zasláno: 20. 2. 2011, 18:38:42
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 |
#5 · Zasláno: 20. 2. 2011, 18:41:25 · Upravil/a: panther
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 |
#6 · Zasláno: 20. 2. 2011, 18:53:39
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 |
#7 · Zasláno: 20. 2. 2011, 18:59:07 · Upravil/a: panther
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 |
#8 · Zasláno: 20. 2. 2011, 19:20:26
panther:
Moc Vám děkuji za Vaši ochotu a trpělivost, vše je plně funkční, díky. |
||
Časová prodleva: 13 let
|
0