| 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: 15 let
|
|||
0