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