Autor | Zpráva | ||
---|---|---|---|
Azhrei Profil |
#1 · Zasláno: 13. 9. 2010, 19:38:00 · Upravil/a: Azhrei
Používám přihlašování z FAQ zde na webu a potřebuji načtené username a password použít pro výbě dat z DB.
<?php $path = "/znamky/"; // 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/manual/en/info.configuration.php#ini.magic-quotes-gpc function gpc_addslashes($str) { return get_magic_quotes_gpc() ? $str : mysql_real_escape_string($str); } include("pripojeni_db.php"); // soubor pripojeni_db.php zajistí připojení k databázi a výběr databáze, se kterou pracujeme 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['username']) && 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."prihlasovani_zaci.php", TRUE, 303); exit; } elseif (isset($_SESSION['username'])) { //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[username] <a href=\"http://".$_SERVER['SERVER_NAME'].$path."prihlasovani_zaci.php?logout=1\">odhlásit</a></p>\n"; } else { // uzivatel není přihlášen // pokud odeslal přihlašovací údaje, snaží se přihlásit if (isset($_POST['username'])) { // 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 $username = gpc_addslashes(trim($_POST['username'])); $password = gpc_addslashes(trim($_POST['password'])); // 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/ukladani-hesel.php $result = mysql_query("SELECT COUNT(*) FROM zaci WHERE username = '$username' AND password = '$password'"); if (mysql_result($result, 0)) // 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 { // uložíme potřebné SESSION proměnné $_SESSION['username'] = $username; $_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: .$path."prihlasovani_zaci.php"]http://".$_SERVER['SERVER_NAME'].$path."prihlasovani_zaci.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: .$path."prihlasovani_zaci.php?incorrect_login=1"]http://".$_SERVER['SERVER_NAME'].$path."prihlasovani_zaci.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 "<p style=\"color: #F00\">Zadali jste neplatné uživatelské jméno nebo heslo</p>\n"; // zobrazíme formulář pro přihlášení ?> <form method="post" action="prihlasovani_zaci.php"> Jméno: <input name="username" type="text"><br> Heslo: <input name="password" type="password"><br> <input name="submit" type="submit" value="Přihlásit"> </form> </div> <?php } } ?> toto jeincludovaná část pro <?php include("p_z.php"); echo" <!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN><html><head><title>Untitled</title></head><body>"; ?> <table summary="" border="1"> <tr><td><? if (isset($_SESSION['username'])) { print_r($_POST); $predmet=false; $vysledek=mysql_query("select jmeno, prijmeni FROM znamky JOIN zaci ON znamky.ID_ZACI=zaci.ID_ZACI JOIN predmety on znamky.ID_predmet=predmety.ID_PREDMET JOIN tridy on zaci.ID_TRIDY=tridy.ID_TRIDY WHERE zaci.username='$_POST[username]' and zaci.password='$_POST[password]'"); $zaznam=MySQL_Fetch_Array($vysledek); echo "$zaznam[jmeno] $zaznam[prijmeni]"; $vysledek=mysql_query("select jmeno, prijmeni, znamka, predmet FROM znamky JOIN zaci ON znamky.ID_ZACI=zaci.ID_ZACI JOIN predmety on znamky.ID_predmet=predmety.ID_PREDMET JOIN tridy on zaci.ID_TRIDY=tridy.ID_TRIDY WHERE zaci.username='$_POST[username]' and zaci.password='$_POST[password]' order by predmet"); while ($zaznam=MySQL_Fetch_Array($vysledek)){ if($zaznam[predmet]!=$predmet){echo"<tr><td>$zaznam[predmet]</td></tr>";} SetLocale(LC_ALL, "Czech"); $datum = Date("j. m. Y", $zaznam[datum]); echo "<tr><td>$datum</td>"; if ($zaznam[znamka]==0) {echo "<td>nepsal/a</td></tr>";} else {echo "<td>$zaznam[znamka]</td></tr>";} $predmet=$zaznam[predmet]; } } ?> </td></tr> </table> </body> </html> prosím pomozte, chvátá to. Díky |
||
Alphard Profil |
#2 · Zasláno: 13. 9. 2010, 19:48:06
Nikdy nezakládejte duplicity.
Původní vlákno smažu. $_POST je prázdné, protože se stránka po příhlášení přesměruje. Username je v session, password si tam můžete dát taky, ale nechápu, k čemu by to bylo dobré. |
||
panther Profil |
#3 · Zasláno: 13. 9. 2010, 19:48:21
Azhrei:
kde v těch několika desítkách řádků kódu je chyba? Proč sem dáváš všechno, i to nepodstatné? Ve zkratce: - máš přihlašovací formulář, po jeho odeslání a kontrole s DB si naplníš SESSION - dále pak je POST prázdný/naplněný jinými daty, jméno žáka je v SESSIONě. |
||
Azhrei Profil |
#4 · Zasláno: 13. 9. 2010, 21:45:47
panther:
pomohlo díky |
||
Časová prodleva: 14 let
|
0