Autor | Zpráva | ||
---|---|---|---|
one Profil |
#1 · Zasláno: 28. 4. 2007, 11:34:45
Zdravim,
Zase uz resim jeden trivialni problem a nemuzu s nim hnout. Potřebuju při odhlášení uživatele v databázi nastavit online na 0 (při přihlášení se úspěšně nastaví na 1) pokus 1) function Logout($user) { global $db; $online = $db->sql_query("UPDATE account SET online='0' WHERE id='$userid'"); unset($user); setcookie("user", false); $user = ""; header("Location: users.php"); } pokus 2) $online = $db->sql_query("UPDATE account SET online='0' WHERE id='$userid'"); function Logout($user) { if($db->sql_numrows($online) == 1){ global $db; $online = Mysql_Query("UPDATE account SET online='0' WHERE id='$userid'"); unset($user); setcookie("user", false); $user = ""; header("Location: users.php"); } } kvuli memu zoufalstvi uz jsem zkousel opravdu vsechno, ale bohuzel, muzete mi prosim pomoct? diky ;) |
||
Alphard Profil |
#2 · Zasláno: 28. 4. 2007, 11:57:55
jaký datový typ má sloupec obline a id? je to určitě řetězac?
vypiš si mysql_error() |
||
Mika Profil |
#3 · Zasláno: 28. 4. 2007, 11:59:54
one
1. pokud ukladas neco do sloupce typu integer (číslo) - jako že by to tak mělo být, tak tam necpi apostrofy.
2. funkci předáváš proměnnou $user, ale v databázi měníš hodnotu tam, kde se id= $userid, tu proměnnou ($userid) bereš odkud? |
||
one Profil |
#4 · Zasláno: 28. 4. 2007, 13:17:47 · Upravil/a: one
1. nepomohlo
2. ta promenna $userid se bere z cookie: $cookie_read = explode("|", base64_decode($user)); $userid = $cookie_read[0]; .... |
||
Mika Profil |
#5 · Zasláno: 28. 4. 2007, 13:39:19 · Upravil/a: Mika
one
Zkus teda te funkci predat 2 parametry
a pri volani funkce musis vlozit oba parametry, $user i $userid EDIT: hlavne si pohlídej to, aby sloupce id a online byli v databazi definovany jako int (ciselná hodnota)! |
||
one Profil |
#6 · Zasláno: 28. 4. 2007, 13:46:18
:(
zkusil jsem to presne jak jsi napsal, a nefunguje to, uz opravdu nevim cim to muze byt, jinak v db mam online a id jako int |
||
nightfish Profil |
#7 · Zasláno: 28. 4. 2007, 14:38:38
one
$online = $db->sql_query("UPDATE account SET online=0 WHERE id=".$userid); nahraď za $online = $db->sql_query($q="UPDATE account SET online=0 WHERE id=".$userid); echo $q; a podívej se, jestli se do toho dotazu doplňuje správná hodnota $userid a pro jistotu ještě error_reporting(E_ALL), aby ti to vypisovalo hlášení v případě přístupu k nedefinované proměnné apod. |
||
one Profil |
#8 · Zasláno: 28. 4. 2007, 14:51:15
tohle uz jsem prave zkousel, to take nejde, zacinam uvazovat o tom ze chyba bude nekde jinde
|
||
nightfish Profil |
#9 · Zasláno: 28. 4. 2007, 14:55:21
tohle uz jsem prave zkousel, to take nejde
co jsi zkoušel a jak se projevuje to, že to nejde? co to píše? sorry, ale se svým přístupem se asi jen tak k řešení nedostaneš... |
||
one Profil |
#10 · Zasláno: 28. 4. 2007, 14:58:07
no jelikoz se s tim uz trapim skoro 2dny tak jsem se obratil na tuhle diskusi...
Prave ze to nedela nic, proste se to normalne odhlasi ale v databazi se nenastavi tomu uzivateli online na hodnotu 0 jinak zadne chybove hlasky to nepise |
||
nightfish Profil |
#11 · Zasláno: 28. 4. 2007, 15:01:38 · Upravil/a: nightfish
tak mě napadá, že tenhle kus kódu (z původního pokusu 2) asi nebude úplně fungovat
$online = $db->sql_query("UPDATE account SET online='0' WHERE id='$userid'"); protože v té podmínce není proměnná $db definovaná... prostě když máš podmínku, u které si nejsi jistý, zda-li projde nebo ne, dej si do ní třeba echo "test"; a jakmile se ti to vypíše, tak víš, že podmínka byla splněna EDIT: kdyžtak sem vlož aktuální kód, který nefunguje |
||
one Profil |
#12 · Zasláno: 28. 4. 2007, 15:47:24
takže pro test jsem to takto upravil:
function Logout($user) { global $db; $online = $db->sql_query("UPDATE account SET online=0 WHERE id=".$userid); if($db->sql_numrows($online) == 1){ echo "funguje to!"; }else{ echo "nefunguje to!"; exit(); } } ale stale to pise ze to nefunguje, zatim budu jeste neco zkouset |
||
nightfish Profil |
#13 · Zasláno: 28. 4. 2007, 17:28:14
zkus to takhle:
function Logout($user) { co to vypíše? |
||
one Profil |
#14 · Zasláno: 28. 4. 2007, 17:40:43
UPDATE account SET online=0 WHERE id=
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 '' at line 1 Pocet ovlivnenych radku: -1 nefunguje to! |
||
nightfish Profil |
one
hmm, takže celý problém spočívá v tom, že proměnná $userid nemá hodnotu, kterou by mít měla... takže je potřeba to pošéfovat tak, aby se $userid nastavilo správně... mohla by pomoct část kódu z tvého příspěvku z 13:17 |
||
one Profil |
#16 · Zasláno: 28. 4. 2007, 18:12:01
v tom bych problem nevidel, protoze promennou $userid pouzivam skoro v kazdem dotazu a zatim bez problemu az na tento pripad, tady dam pro priklad kus kodu prihlaseni:
..... $sql = $db->sql_query("SELECT * FROM account WHERE username='$username' AND password='$md5_pass' and banned='0'"); $login_check = $db->sql_numrows($sql); ////////////////////////////////////////////////////////////////////// / //jestliže jsou zadané informace v pořádku, hráč se přihlásí a nastaví se cookies if($login_check > 0){ while($row = $db->sql_fetchrow($sql)){ $userid = $row['id']; $username = $row['username']; $password = $row['password']; $ipaddress = $row['last_ip']; $lastlogin = explode(" ", $row['lastlogin']); $lastlogin_date = $lastlogin[0]; $lastlogin_time = $lastlogin[1]; $info = base64_encode("$userid|$username|$password|$ipaddress|$lastlogin_date| $lastlogin_time"); if (isset($remember)){ setcookie("user","$info",time()+1209600); }else{ setcookie("user","$info",0); } $db->sql_query("UPDATE account SET last_ip='$REMOTE_ADDR', last_login=NOW(), failed_logins='0' online='1' WHERE id='$userid'"); .... |
||
nightfish Profil |
#17 · Zasláno: 28. 4. 2007, 18:17:33 · Upravil/a: nightfish
v tom bych problem nevidel
je mrzuté, že v tom problém nevidíš, i když tam opravdu je pokud to správně chápu, mohlo by stačit do té funkce logOut přidat řádky $cookie_read = explode("|", base64_decode($user)); $userid = $cookie_read[0]; (za předpokladu, že parametr $user obsahuje base64-enkódovaný obsah té cookie) EDIT: nastuduj si něco o rozsahu platnosti proměnných (variable scope) - lokální, globální, superglobální - není to v tomto případě na škodu a pomůže ti to pochopit podstatu chyby |
||
one Profil |
#18 · Zasláno: 30. 4. 2007, 12:34:52
Dobry, uz jsem to konecne vyresil podle jineho identifikatoru, protoze nevim proc nefungovalo to userid
ted to delam podle ip a uz to funguje, mozna na to casem prijdu, kde byla chyba ;) |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0