Autor | Zpráva | ||
---|---|---|---|
turtle Profil * |
#1 · Zasláno: 30. 6. 2015, 11:17:53
Ahoj
Potřeboal bych pomoct s měněním hodnot v databazi. Když se mi na webu registruje nějaký uživatel tak po něm vyžduji aktivaci pře email a tady mi nastává chyba. Když se klikne na potvrzujici odkaz tak pokud účet aktivuje po více jak hodině tak se místo aktivace má účet smazat a vyhodit to hlášku. Problémje v tom že hláške se vyhodí vždy a účet to z databáze nesmaže. skript: $query2 = mysql_query("SELECT * FROM `users` WHERE `id`=$uid AND `activation`='0' AND UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 3600"); if(mysql_num_rows($query2)==1){ $query3 = mysql_query("DELETE * FROM `users` WHERE `id`=$uid AND `activation`=0"); echo"uplynulo více jak 1 hodina opakujte registraci"; }else{ $query1 = mysql_query("UPDATE `users` SET `activation`=1 WHERE `id`='".$uid."'"); if(!$query1) { echo mysql_error() . " - " . mysql_errno(); } else { echo "Váš e-mail byl úspěšně potvrzen, teď se můžete <a href=\"index.php\">přihlásit</a>."; }} |
||
Keeehi Profil |
#2 · Zasláno: 30. 6. 2015, 11:39:51
Zpětné apostrofy kolem date v prvním dotazu?
|
||
turtle Profil * |
#3 · Zasláno: 30. 6. 2015, 11:57:45
přidal jsem za všechny mysql query - or die(mysql_error()); a nyní mi to hlasi error :
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 '* FROM `users` WHERE `id`=37 AND `activation`=0' at line 1 |
||
Monkeys Profil * |
#4 · Zasláno: 30. 6. 2015, 12:03:02
turtle:
Premenne v dotazoch sa mozu / davaju do spicatych zatvoriek. napr. $query2 = mysql_query("SELECT * FROM users WHERE id={$uid} ....."); M. |
||
turtle Profil * |
#5 · Zasláno: 30. 6. 2015, 12:15:46
Monkeys:
bohužel nepomohlo |
||
Alphard Profil |
#6 · Zasláno: 30. 6. 2015, 12:22:09
Monkeys [#4]:
Smysl těchto závorek je např. tam, kde mají bezprostředně za názvem proměnné pokračovat alfanumerické znaky. Bez zárovek by interpret nepoznal, co je název proměnné a co už je součástí řetězce. Pokud po názvu proměnné následuje (nejen) bílý znak, není k tomu důvod. turtle [#3]: Do syntaxe delete nepatří * (není k tomu důvod, vždy se maže celý záznam).
|
||
lionel messi Profil |
Najväčším problémom je chybná syntax DELETE dotazu.
Správna verzia: $query3 = mysql_query("DELETE FROM `users` WHERE `id`=$uid AND `activation`=0"); //skutočne bez hviezdičky! Pardon, Alphard bol o 11 sekúnd rýchlejší a dodal i vysvetlenie. |
||
turtle Profil * |
#8 · Zasláno: 30. 6. 2015, 12:37:55
neco jse tam pozmenil a nyni error vypada takto:
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 '`='37' AND `activation`='0' AND UNIX_TIMESTAMP() - UNIX_TIMESTAMP(`date`) > 3600' at line 1 |
||
Keeehi Profil |
#9 · Zasláno: 30. 6. 2015, 13:12:14
Že jsi něco pozměnil je hezké ale bylo by ještě hezčí, kdybys nám to tu i ukázal. Chyba bude nejspíše před tím co se objevilo v chybové hlášce.
|
||
turtle Profil * |
#10 · Zasláno: 30. 6. 2015, 13:25:56
současná podoba skriptu:
$z="0"; $o="1"; $query2 = mysql_query("SELECT * FROM `users` WHERE id`='".$uid."' AND `activation`='".$z."' AND UNIX_TIMESTAMP() - UNIX_TIMESTAMP(`date`) > 3600")or die(mysql_error()); if(mysql_num_rows($query2)==1){ $query3 = mysql_query("DELETE FROM `users` WHERE id`='".$uid."' AND `activation`='".$z."'")or die(mysql_error()); echo"uplynulo více jak 1 hodina opakujte registraci"; }else{ $query1 = mysql_query("UPDATE $DB.users SET `activation`='".$o."' WHERE `id`='".$uid."'"); if(!$query1) { echo mysql_error() . " - " . mysql_errno(); } else { echo "Váš e-mail byl úspěšně potvrzen, teď se můžete <a href=\"index.php\">přihlásit</a>."; }} |
||
lionel messi Profil |
#11 · Zasláno: 30. 6. 2015, 13:30:16
turtle:
$query2 = mysql_query("SELECT * FROM `users` WHERE `id`='".$uid."' AND `activation`='".$z."' AND UNIX_TIMESTAMP() - UNIX_TIMESTAMP(`date`) > 3600")or die(mysql_error()); Presne ako predpokladal Keeehi. Pred názvom stĺpca ti chýba spätný apostrof. |
||
turtle Profil * |
#12 · Zasláno: 30. 6. 2015, 13:47:13
tak error konecne zmizel a pri vyskoceni hlasky se zaznam z databaze vymaze ale porad se mi deje to ze hlaska vyskakuje nehlede na to ze provadim aktivaci behem nekolika vterin
|
||
Keeehi Profil |
turtle:
A ve sloupci date máš co? Nebo jakého je vlastně typu? INT, DATE, DATETIME, TIMESTAMP? Když už pracuješ s časovými značkami nebylo by vhodné mít k tomu i odpovídající datový typ? Možná nefunguje správně ten rozdíl. S funkcemi UNIX_TIMESTAMP() jsem nikdy nepracoval a zkoušet se mi to nechce. Co se ti vlastně vrátí když si nad databází spustíš SELECT `date`, UNIX_TIMESTAMP() as now, UNIX_TIMESTAMP(`date`) as past, UNIX_TIMESTAMP() - UNIX_TIMESTAMP(`date`) as difference FROM `users` WHERE `activation`= 0 LIMIT 5; A nebo na slepo zkus. Mělo by to dělat to stejné jen je to jinak zapsané. TIMESTAMPDIFF(SECOND, `date`, NOW()) > 3600 |
||
Časová prodleva: 10 let
|
0