Autor | Zpráva | ||
---|---|---|---|
argonisius Profil * |
Moderátor Alphard: Problém je ve filtru na úrovni databáze, takže přesouvám do vhodnější kategorie.
Mám takovýto php kód. K funkčnímu scriptu jsem přidal kontrolu, zda je e-mail v databázi. Tato kontrola však nefunguje. Nevíte, co jsem napsal špatně? <?php // Načtení konfiguračních informací require_once 'config.php'; // Kontrola a vyhodnocení zaslaných dat if($_POST) { $username = $_POST['username']; $email = $_POST['email']; $password = $_POST['password']; if(trim($username) == '' || trim($password) == '' || trim($email) == '') { $info = '<span class="chybova_hlaska">Musíte vyplnit všechny údaje!</span>'; } else { if(!EregI("^[a-z0-9]+[a-z0-9\._-]*[a-z0-9]+@[a-z0-9]+[a-z0-9\._-]*[a-z0-9]+\.[a-z]{2,6}$", $email) || EregI("\.{2,}", $email) || EregI("_{2,}", $email) || EregI("-{2,}", $email)) { $info = '<span class="chybova_hlaska">Nesprávný formát e-mailu!</span>'; } else { $query = sprintf("SELECT COUNT(id) FROM users WHERE UPPER(username) = UPPER('%s')", mysqli_real_escape_string($dbconnect,$username)); $result = mysqli_query($dbconnect,$query); list($count) = mysqli_fetch_row($result); if($count >= 1) { $info = '<span class="chybova_hlaska">Tento login je již registrován!</span>'; } else { $query = sprintf("SELECT COUNT(email) FROM users WHERE UPPER(email) = UPPER('%s')", mysqli_real_escape_string($dbconnect,$email)); $result = mysqli_query($dbconnect,$query); list($count) = mysqli_fetch_row($result); if($count >= 1) { $info = '<span class="chybova_hlaska">Tento e-mail již byl použit při registraci!</span>'; } else { $validkey = sha1(uniqid()); $query = sprintf("INSERT INTO users(username,password,email,validkey,validated) VALUES ('%s','%s','%s','%s','0');", mysqli_real_escape_string($dbconnect,$username), mysqli_real_escape_string($dbconnect,sha1($password)), mysqli_real_escape_string($dbconnect,$email), mysqli_real_escape_string($dbconnect,$validkey)); mysqli_query($dbconnect,$query) or die ('Při registraci nastaly potíže.'); mail ("$email","$game - Aktivace účtu","Pro aktivaci účtu otevřete tento odkaz: $path/activate.php?id=$username&password=$password&validkey=$validkey") or die ('Nemohu odeslat aktivační e-mail.'); $info = '<span class="oznameni">Děkujeme za registraci. Byl vám zaslán aktivační e-mail.</span>'; } } } } } ?> |
||
Joker Profil |
#2 · Zasláno: 19. 10. 2009, 16:46:59
Odpovězte prosím tyto otázky:
- Co by daný kód měl udělat (co očekáváte, že udělá)? - Jak se skutečné chování liší od očekávaného? Pokud je výsledkem chyba, zkopírujte text chybové hlášky. Ideálně, obsahuje-li hláška číslo řádku, označte v kódu řádek, který chybu vyvolal. Tipy: Pro vložení kódu používejte značku [pre], (tlačítko "<>"). Pro zvýraznění uvnitř kódu můžete použít tučné písmo (tlačítko "B"). |
||
Shulík Profil |
#3 · Zasláno: 19. 10. 2009, 16:52:12
Nemá být v mysqli_query nejdřív SQL kód a teprve potom Resource id připojení (řádek 25)? Nejsem si teď jistej, mysqli používám jen objektově.
|
||
argonisius Profil * |
#4 · Zasláno: 19. 10. 2009, 16:55:30
Má zkontrolovat odeslání dat, správnost e-mailu, ověřit nepřítomnost registrovaného loginu a e-mailu v databázi - ověření e-mailu nefunguje - při zadání registrovaného mailu se registrace nezablokuje.
|
||
Shulík Profil |
#5 · Zasláno: 19. 10. 2009, 16:57:16
Mimochodem, vyzkoušel jsi, kudy kód prochází a kudy ne? (Máš tam plno podmínek, tak tam nějak umně vecpat echa, popřípadě mysqli_error(); atp.
|
||
argonisius Profil * |
#6 · Zasláno: 19. 10. 2009, 17:03:52
Tak v té části, kde to nefunguje kód prochází - mám to řazeno tak, že se vždy něco ověří a pokud to tímto filtrem neprojde, tak se vypíše
hláška. V opačném případě jsou data poslána dál... |
||
argonisius Profil * |
#7 · Zasláno: 20. 10. 2009, 18:36:41
Problém je tam v tom, že u té kontroly e-mailu je "upper" - UPPER(email) = UPPER('%s'). Bez něho to funguje, ale zase potom Neco@neCO.cz není to samé, jako neco@neco.cz ... Co s tím?
|
||
argonisius Profil * |
#8 · Zasláno: 20. 10. 2009, 18:49:59
Kdyby to na to mělo vliv, tak databázová tabulka vypadá takto: (tabulka users)
Sloupec Typ Porovnávání Vlastnosti Nulový Výchozí id int(11) Ne auto_increment username varchar(250) utf8_czech_ci Ano NULL password varchar(50) utf8_czech_ci Ano NULL email varbinary(200) Ne validkey varchar(32) utf8_czech_ci Ne validated binary(1) Ne 0 |
||
argonisius Profil * |
#9 · Zasláno: 21. 10. 2009, 15:47:44
Je nějaká jiná cesta, aby ten script považoval noCO@NEco.cz za to samé jako neco@neco.cz?
|
||
Alphard Profil |
#10 · Zasláno: 21. 10. 2009, 16:20:50
argonisius:
„že u té kontroly e-mailu je "upper" - UPPER(email) = UPPER('%s').“ Jak se projevuje nefunkčnost? Vypisuje se nějaká chyba? Je správně nastavené kódovaní? |
||
argonisius Profil * |
Kódování by mělo být nastaveno dobře. Chyba se projevuje tak, že proměnná count ( viz kód nahoře) která určuje, kolik stejných e-mailů je registrovaných) má hodnotu 0, i když je v databázi takových e-mailů více. Zkoušel jsem zadávat sql dotaz v php my admin bez toho upper, fungovalo to - count =1, ale když tam napíšu jinak velká a malá písmena, tak je count opět 0...
dotaz 1: SELECT COUNT( email ) FROM users WHERE UPPER( email ) = UPPER( 'neco@neco.cz' ) - count = 0 dotaz 2: SELECT COUNT( email ) FROM users WHERE email = 'neco@nec.cz' - count = 16 - mám tam 16x registraci pod tímto mailem |
||
argonisius Profil * |
#12 · Zasláno: 21. 10. 2009, 18:35:34
Nemůže být problém v tom, že e-mail mám uložený jako typ varbinary? Není tem třeba nějaké omezení, že tento typ nemůžu převést na kapitálky? Nebo je problém v tom, že @ není možno převést?
|
||
Alphard Profil |
#13 · Zasláno: 21. 10. 2009, 18:41:02
argonisius:
„Nemůže být problém v tom, že e-mail mám uložený jako typ varbinary?“ Předtím jsem si toho typu nevšiml, ale teď jsem si vzpomněl, že v manuálu je: UPPER() is ineffective when applied to binary strings (BINARY, VARBINARY, BLOB). |
||
argonisius Profil * |
#14 · Zasláno: 21. 10. 2009, 19:34:13
Aha.... a bude vadit, když dám email jako jiný typ? Jaký mám zvolit?
|
||
Alphard Profil |
#15 · Zasláno: 21. 10. 2009, 19:41:26
Viděl bych to na varchar.
|
||
argonisius Profil * |
#16 · Zasláno: 21. 10. 2009, 19:48:14
Díky moc za pomoc.... s databázema nejsem moc zadobře =)
|
||
Časová prodleva: 15 let
|
0