Autor | Zpráva | ||
---|---|---|---|
TheAzer Profil |
#1 · Zasláno: 31. 3. 2013, 13:46:42
Zdravím .. Včera se mi podařila vytvořit do MySQL tabulka "registrace". Tabulka v pohodě funguje a uživatel se do tabulky zapíše. Ale teď potřebuju formulář, kterej se nějak zpracuje a zkontroluje tu tabulku "registrace" a uživatele přihlásí a pak přidávání komentářů jen registrovaným uživatelům . Prostě jednoduše ten "login" se nějak zpracuje s tou "registrací" , ale prostě nevím jak by se ty dvě tabulky mohly domluvit, moc stím skušenosti nemám ,ale hodilo by se mi to ..
|
||
Alphard Profil |
#2 · Zasláno: 31. 3. 2013, 13:51:47
Zkuste se podívat na Nejčastější potíže s PHP (FAQ) » Registrace uživatelů
|
||
TheAzer Profil |
#3 · Zasláno: 31. 3. 2013, 13:54:14 · Upravil/a: TheAzer
Jo, stím by se dalo něco dělat .. :-)
No takže mám už kód, ale ještě to nějak přeci musím spojit s tou databází ne ? <?php $path = "/"; // 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 db_escape($str) { return mysql_real_escape_string(@get_magic_quotes_gpc() ? stripslashes($str) : $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:.$path."index.php]http://".$_SERVER['SERVER_NAME'].$path."index.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=\".$path."index.php?logout=1\">odhlásit</a></p>\n]http://".$_SERVER['SERVER_NAME'].$path."index.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']) && isset($_POST['password'])) { // 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 = db_escape(trim($_POST['username'])); $password = db_escape(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 users WHERE username = '$username' AND password = sha1('$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."index.php]http://".$_SERVER['SERVER_NAME'].$path."index.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."index.php?incorrect_login=1]http://".$_SERVER['SERVER_NAME'].$path."index.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 action="index.php" method="post"> 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 } } ?> Zpět, zpet, zpět, už jsem pochopil princip ,ale pořád mi to píše, že jsem zadal špatné jméno, nebo heslo, co mám dělat ? |
||
Kajman Profil |
#4 · Zasláno: 31. 3. 2013, 15:22:29
TheAzer:
„ještě to nějak přeci musím spojit s tou databází ne ?“ Viz. řádek 13 |
||
TheAzer Profil |
#5 · Zasláno: 31. 3. 2013, 15:27:03 · Upravil/a: TheAzer
Já už to propojený mám ,ale píše mi to, že je špatný jméno, nebo heslo, ale já to v datábázi normálně mám .
Pořád mi to píše : "Zadali jste neplatné uživatelské jméno nebo heslo" |
||
Kajman Profil |
#6 · Zasláno: 31. 3. 2013, 16:10:44
TheAzer:
„ale já to v datábázi normálně mám“ Máte tam heslo normálně čitelné, nebo prohnané použitou hashovací funkcí sha1? |
||
TheAzer Profil |
#7 · Zasláno: 31. 3. 2013, 16:28:35
V kolonce "password" je napsáno e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4
|
||
Alphard Profil |
#8 · Zasláno: 31. 3. 2013, 17:20:14
Nejlépe vypsat si dotaz na 55. řádku a porovnat skutečné vstupy s databází.
|
||
TheAzer Profil |
#9 · Zasláno: 31. 3. 2013, 17:25:25
Nerozumím !
|
||
Alphard Profil |
#10 · Zasláno: 31. 3. 2013, 17:37:19
$result = mysql_query($q="SELECT COUNT(*) FROM users WHERE username = '$username' AND password = sha1('$password')"); echo htmlspecialchars($q, ENT_QUOTES); echo sha1($password); |
||
TheAzer Profil |
#11 · Zasláno: 31. 3. 2013, 17:41:30
A jak to mám jako porovnat ?
|
||
pcmanik Profil |
#12 · Zasláno: 31. 3. 2013, 17:59:48
TheAzer:
Otvor si databázu cez phpMyAdmin a spusti tam ten dotaz. |
||
TheAzer Profil |
#13 · Zasláno: 31. 3. 2013, 18:09:19
Není to jedno ? To neexistuje nějakej hotovej příklad ?
Vždyť přece potřebuju jen jedinou věc abych napsal někoho mezi uživatele a on se pak v loginu přihlásil a mohl vkládat komentáře . To je vše ! |
||
pcmanik Profil |
TheAzer:
Odpoveď si dostal už v [#2] príspevku, neviem aký iný príklad si ty predstavuješ. Porovnal si tie dáta s databázou? Je to práca na kratšie ako čo ti trvalo napísať svoj posledný príspevok. A keď si bol o niečo požiadaný, tak to asi neni jedno. |
||
TheAzer Profil |
#15 · Zasláno: 31. 3. 2013, 18:44:17 · Upravil/a: TheAzer
Dobře, vyzkouším to znovu .
Tam to jsem hodil do SQL dotazu : " MySQL hlásí: Dokumentace #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$result = mysql_query($q="SELECT COUNT(*) FROM users WHERE username = '$username' at line 2 Chyba SQL-dotaz: Dokumentace $result = mysql_query( $q = "SELECT COUNT(*) FROM users WHERE username = '$username' AND password = sha1('$password')" ); MySQL hlásí: Dokumentace #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$result = mysql_query($q="SELECT COUNT(*) FROM users WHERE username = '$username' at line 1 |
||
Alphard Profil |
#16 · Zasláno: 31. 3. 2013, 19:50:12
Kód vypadá přesně jako v [#3]? V textu SQL chyby by vůbec nemělo být nějaké
$result = ... . Hledal jsem, jestli někde není chybně ukončený řetězec, ale nic nevidím.
|
||
pcmanik Profil |
#17 · Zasláno: 31. 3. 2013, 20:04:13
TheAzer:
Čo si vlastne spustil na tom servery? Lebo takto to vyzera že ty si v databáže spustil ten jeden riadok ($result = ...), namiesto samotného sql dotazu. |
||
TheAzer Profil |
#18 · Zasláno: 31. 3. 2013, 20:06:04 · Upravil/a: TheAzer
Tak co mám teda dělat ? Nešlo by manuálně vytvořit uživatele
INSERT INTO users (id, username, password) VALUES ( NULL, 'nick', ('heslo') ); A pak ho skusit přihlásit ? Spustil jsem tohle : $result = mysql_query("SELECT COUNT(*) FROM users WHERE username = '$username' AND password = sha1('$password')"); Už mi to napsalo tohle "#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$result = mysql_query("SELECT COUNT(*) FROM users WHERE username = '$username' A' at line 1" |
||
TheAzer Profil |
#19 · Zasláno: 1. 4. 2013, 01:12:21
!!!!!!!!!! VYŘEŠENO FUNGUJE !!!!!!!!!!!!!!!!!!!!
|
||
Časová prodleva: 11 let
|
0