Autor | Zpráva | ||
---|---|---|---|
MrMuffin53 Profil * |
#1 · Zasláno: 19. 7. 2014, 11:53:34
Zdravím,
v PHP jsem ještě začátečník, největší problémy mi dělá SQL. Snažím se napsat skritp, který uživateli s ID předaným přes GET vygeneruje náhodně heslo a v MD5 ho uloží do databáze. Aktuální kód vypadá takto : ... $password_hash = MD5( rand(10000,99999) ); mysql_query("INSERT INTO users (`password`) WHERE `id`=`".$_GET['id']."` VALUES(`".$password_hash."`) ") or die(mysql_error()); mysql_close(); ... Prohlížeč mi ale vyhazuje hlášku : 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 'WHERE `id`=`146` VALUES(`7f062e654e2ef93d0f5a8dda92877138`)' at line 1 Proto bych se rád zeptal, kde mám chybu, případně jak ji opravit. Děkuji mnohokrát |
||
David Klouček Profil |
Při vkládání nemůžeš používat WHERE. Nehledáš spíš update?
mysql_query("UPDATE users SET `password`='".$password_hash."' WHERE `id`=".intval($_GET['id'])) or die(mysql_error()); Funkce intval() je tam proti SQL injekci. Jinak mysql_* funkce jsou zastaralý, měl bys používat mysqli_* nebo PDO. Já ale v tom případě už rovnou doporučuju přejít na nějakej DB layer - třeba NotORM. |
||
Radek9 Profil |
#3 · Zasláno: 19. 7. 2014, 11:59:18
MrMuffin53:
Pro SQL stringy se nepoužívají zpětné uvozovky, ale rovné (jednoduché). Tedy tyto: 'řetězec' .
|
||
MrMuffin53 Profil * |
#4 · Zasláno: 19. 7. 2014, 12:06:42
Díky moc, už to pracuje správně.
|
||
juriad Profil |
#5 · Zasláno: 19. 7. 2014, 12:15:01
Radek9:
A string is a sequence of bytes or characters, enclosed within either single quote (“'”) or double quote (“"”) characters. Examples: 'a string' "another string" |
||
Radek9 Profil |
#6 · Zasláno: 19. 7. 2014, 13:52:26
juriad:
Ok, že jdou použít i dvojité, jsem netušil. Každopádně jsem hlavně upozorňoval na ten fakt, že MrMuffin53 použil zpětné, které jsou určené pro názvy. |
||
Jan Tvrdík Profil |
#7 · Zasláno: 19. 7. 2014, 15:00:35
Pro jistotu zmíním pár věcí ohledně bezpečnosti:
1) Funkce rand není kryptograficky bezpečný generátor náhodných čísel, takže je pro generování náhodných hesel velmi nevhodná. Lépe je použít např. openssl_random_pseudo_bytes.
2) Funkce md5 není vhodná pro hashování hesel, viz např. dokumentace. Lépe je použít funkci password_hash .
|
||
Časová prodleva: 10 let
|
0