Autor | Zpráva | ||
---|---|---|---|
Michal Sebek Profil |
Mám tady jeden problém s aktivací e-mailu. Když v e-mailu kliknu na odkaz tak by to mělo aktivovat e-mail, ale místo toho to napíše:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/a9295322/public_html/activation.php on line 11 Kód: <?php header('Content-type: text/html;charset=UTF-8'); require_once 'db.php'; if(isset($_GET['login']) AND isset($_GET['code'])){ $login = stripslashes(htmlspecialchars(trim($_GET['login']))); $code = htmlspecialchars(trim($_GET['code'])); $query = mysql_query("SELECT `id` FROM `uzivatele` WHERE `login`='".$login."'"); if(mysql_num_rows($query)!=0) { $result = mysql_fetch_assoc($query); $activation = md5($result['id']).md5($login); if($activation == $code) { $query1 = mysql_query("UPDATE `uzivatele` SET `activation`=1 WHERE `login`='".$login."'"); if(!$query1) { echo mysql_error() . " - " . mysql_errno(); } else { echo "Váš e-mail byl úspěšně potvrzen, teď se můžete <a href=\"index.php?page=login\">přihlásit</a>."; } } else { echo "Váš e-mail nebyl potvrzen <a href=\"index.php\">Hlavní stránka</a>"; } } else { exit("Login a aktivační kód neodpovídají"); } } else { exit("Nemáte co tady dělat."); } ?> |
||
lionel messi Profil |
Michal Sebek:
1. Neescapuješ vstup. $query = mysql_query("SELECT `id` FROM `uzivatele` WHERE `login`='". mysql_real_escape_string($login) ."'"); 2. Chyba „supplied argument is not a valid MySQL result resource“ |
||
Michal Sebek Profil |
#3 · Zasláno: 7. 11. 2014, 23:06:27
lionel messi:
Stále nefunguje :( |
||
lionel messi Profil |
#4 · Zasláno: 7. 11. 2014, 23:08:35
|
||
Michal Sebek Profil |
#5 · Zasláno: 7. 11. 2014, 23:11:46
lionel messi:
No tak mi řekni co mám špatně |
||
juriad_ Profil * |
#6 · Zasláno: 7. 11. 2014, 23:21:44 · Upravil/a: juriad_
Dot
Dotaz na 10. radku selze. Ta funkce vrati FALSE. |
||
lionel messi Profil |
Michal Sebek:
„No tak mi řekni co mám špatně“ Krištáľovú guľu, žiaľ, plánujem až na Vianoce. A teraz vážne: Uprav kód takto: <?php header('Content-type: text/html;charset=UTF-8'); require_once 'db.php'; if(isset($_GET['login']) AND isset($_GET['code'])){ $login = stripslashes(htmlspecialchars(trim($_GET['login']))); $code = htmlspecialchars(trim($_GET['code'])); $query = mysql_query("SELECT `id` FROM `uzivatele` WHERE `login`='".$login."'") or die(mysql_error()); Poznámka: Za bežných okolností je konštrukcia or die(mysql_error()) v ostrom prostredí absolútne nevhodná, patrí na produkčné prostredie (a aj tam je to na zváženie), toto je len pre jednoduchosť.
|
||
Michal Sebek Profil |
#8 · Zasláno: 7. 11. 2014, 23:26:56 · Upravil/a: Michal Sebek
lionel messi:
Napíše to: Unknown column 'login' in 'where clause' Michal Sebek: Aha, už vím, v databázi to neni login ale jmeno... Ale teď to píše že to neodpovídá ty dva kódy |
||
lionel messi Profil |
#9 · Zasláno: 7. 11. 2014, 23:30:30
Michal Sebek:
Asi je to blbosť, ale skús opraviť select takto: $query = mysql_query("SELECT `id`, `login` FROM `uzivatele` WHERE `login`='".$login."'") or die(mysql_error()); |
||
Michal Sebek Profil |
lionel messi:
Nejde, nejspíš to bude tím že se ty akivační kódy lišej, zkusím je vypsat každý zvlášť Bohužel, proměnnou activation to nevypíše, nejspíš není nastavená :( Když to vypíšu a nedám do toho kódu to if($code == $activation){blablabla} tak to vypíše obě hodnoty. Když to tam vrátím, vypíše to pouze tu code
Čím to je? Pomozte |
||
smiesek Profil |
#11 · Zasláno: 8. 11. 2014, 05:50:13
já tedy nejsem odborník a spíše se snažím pochopit php a čtení jednotlivých částí kódů, jsem spíše zelenáč, ale ráda bych se pokusila zapojit do diskuse...
Michal Sebek: píšete, že jakmile to dáte do podmínky if ... nestálo by za úvahu se tedy ještě zaměřit na obsah proměnné $activation, ve které máte $activation = md5($result['id']).md5($login); tedy předpokládám, že proměnná z výše uvedeného $login bude v pořádku, zkuste třeba schválně nepracovat s proměnnou id a jestli bude výsledek pořád stejný, takhle když se na to dívu, bych řekla, že problém bude v zápisu $result['id'], ale taky nemusí, jdu jen podle toho co vidím a netuším, jakou logiku má ten tvar zápisu. buď zkusit jej vypustit a nebo bych zkusila tvar proměnné $activation = md5($result).md5($login); |
||
Michal Sebek Profil |
#12 · Zasláno: 8. 11. 2014, 07:23:23
smiesek:
Ta proměnná result je dotaz do databáze. Takže kdybych dal jen $result , tak by to byl nesmysl. Já bych chtěl vědět proč když tam je ta část kódu, tak to nejde. Když tam není, ty výsledky se shodují (předem vygenerovaný - zaslaný na e-mail a ten právě vygenerovaný, vč. toho $result['id'] ).
|
||
smiesek Profil |
#13 · Zasláno: 8. 11. 2014, 14:39:11
Michal Sebek:
ano, do databáze a právě proto si myslím, že již není nutné tam dávat další id a postačilo by jen result, protože to je viditelné z toho dotazu, že se má id vybrat, ale nechcu přesvědčovat o něčem, co nemohu odzkoušet a co se teprve učím. |
||
Michal Sebek Profil |
#14 · Zasláno: 8. 11. 2014, 14:59:56
smiesek:
Ale s tim ['id'] to funguje, já řeším proč když tam je část kódu tak to nejde, když tam není tak to vypočítá a hodnoty se shodují |
||
smiesek Profil |
#15 · Zasláno: 8. 11. 2014, 15:08:47
Michal Sebek:
a kterou prosím tedy část máte namysli? |
||
mimochodec Profil |
#16 · Zasláno: 8. 11. 2014, 15:10:32
Michal Sebek:
Co se shoduje? Co neproběhne? |
||
Michal Sebek Profil |
#17 · Zasláno: 8. 11. 2014, 16:43:06 · Upravil/a: Michal Sebek
smiesek:
Mám na mysli if($activation == $code) { $query1 = mysql_query("UPDATE `uzivatele` SET `activation`=1 WHERE `jmeno`='".$login."'"); if(!$query1) { echo mysql_error() . " - " . mysql_errno(); } else { echo "Váš e-mail byl úspěšně potvrzen, teď se můžete <a href=\"index.php?page=login\">přihlásit</a>."; } } else { echo "Váš e-mail nebyl potvrzen <a href=\"index.php\">Hlavní stránka</a>"; } mimochodec: Shoduje se předem vygenerovaný kód, který byl zaslán na e-mail s právě vygenerovaným kódem |
||
mimochodec Profil |
#18 · Zasláno: 8. 11. 2014, 16:49:41
Michal Sebek:
„Shoduje se předem vygenerovaný kód, který byl zaslán na e-mail s právě vygenerovaným kódem“ V tom[#17]: shodují se $activation a $code? Zkus if(trim($activation) == trim($code)) |
||
Michal Sebek Profil |
#19 · Zasláno: 8. 11. 2014, 16:58:18 · Upravil/a: Michal Sebek
mimochodec:
Nepomáhá. Problém je v tom že když tam ten kód je tak se $activation jeví jako prázdná :( Když tam ale není, $activation se shoduje s $code (na konci mám <?php echo $code."<br>".$activation; ?> |
||
mimochodec Profil |
#20 · Zasláno: 8. 11. 2014, 20:08:40
Michal Sebek:
Co znamená "jeví jako prázdná?" Proč si vypisuješ ty proměnné někde na konci? Jestli se ten if neprovede, vypiš si je nad ním, ať se něčeho dopátráš. |
||
Michal Sebek Profil |
#21 · Zasláno: 8. 11. 2014, 20:43:59 · Upravil/a: Michal Sebek
Sláva, už to funguje
Aha, tak ne, ale už se to hnulo kousek dál |
||
Časová prodleva: 9 let
|
0