Zadejte hledaný výraz...

Update – existuje nebo ne

Michales
verified
rating uzivatele
(5 hodnocení)
25. 9. 2014 10:13:29
Dobrý den všem.
Chtěl bych s něčím poradit.
Ják mám udělat následující.
Při schválení příspěvku, kouknu do db jestli už existuje hráč v tabulce hodnocení.
Pokud ne, vytvořím ho, pokud ano aktualizuji ho.
Zkouším následující, ale vždy to vytvoří nový řádek.
$points="5";
$exist_hrac = mysql_result(mysql_query("SELECT COUNT(*) FROM hodnoceni WHERE `useres_id`=".$_GET." AND `useres_user`=".$_GET." "), 0);
//neexistuje -> potom ho vytvoříme pomocí insert
if($exist_hrac==0){
$import2="INSERT INTO hodnoceni (`id`, `useres_id`, `useres_user`, `points`) VALUES ('$id', '".$_GET."', '".$_GET."', '$points')";
mysql_query($import2) or die(mysql_error());
}
//existuje -> potom ho aktualizujeme pomocí update
else {
$import="UPDATE `hodnoceni` SET `useres_id`=".$_GET.",`useres_user`=".$_GET.",`points`='+5' WHERE `useres_id`=".$_GET." ";
mysql_query($import) or die(mysql_error());
}
25. 9. 2014 10:13:29
https://webtrh.cz/diskuse/update-existuje-nebo-ne/#reply1056875
Fido123
verified
rating uzivatele
(13 hodnocení)
25. 9. 2014 10:29:08
Celé je to nějaké chaotické. Pokud je v tabulce hodnocení primární klíč useres_id (nemá to být users_id?), pak nechápu, proč máš v tom prvním dotazu ještě
Možná díky tomu ten count(*) je vždycky roven nule. Každopádně někde si alespoň vypiš tu proměnnou $exist_hrac při obou případech (existuje/neexistuje), pomůže ti to lokalizovat problém.
---------- Příspěvek doplněn 25.09.2014 v 10:33 ----------
Anebo ty chceš toho hráče najít podle username? Tak potom je tam možná zbytečné to
25. 9. 2014 10:29:08
https://webtrh.cz/diskuse/update-existuje-nebo-ne/#reply1056874
Michales
verified
rating uzivatele
(5 hodnocení)
25. 9. 2014 10:36:46
Takže nyní to mám takto:
$points="5";
$exist_hrac = mysql_result(mysql_query("SELECT COUNT(*) FROM hodnoceni WHERE `useres_id`=".$_GET." "), 0);
//neexistuje -> potom ho vytvoříme pomocí insert
if($exist_hrac==0){
$import2="INSERT INTO hodnoceni (`id`, `useres_id`, `useres_user`, `points`) VALUES ('$id', '".$_GET."', '".$_GET."', '$points')";
mysql_query($import2) or die(mysql_error());
}
//existuje -> potom ho aktualizujeme pomocí update
else {
$import="UPDATE `hodnoceni` SET `useres_id`=".$_GET.",`useres_user`=".$_GET.",`points`='+5' WHERE `useres_id`=".$_GET." ";
mysql_query($import) or die(mysql_error());
}
Když neexistuje, tak to v pořádku zapíše nového uživatele, když ho po té chci aktualizovat, tak to napíše:
Unknown column 'nick uživatele' in 'field list'
---------- Příspěvek doplněn 25.09.2014 v 10:41 ----------
Chyba u mě, má to být takto:
$import="UPDATE `hodnoceni` SET `points`='+5' WHERE `useres_id`=".$_GET." ";
25. 9. 2014 10:36:46
https://webtrh.cz/diskuse/update-existuje-nebo-ne/#reply1056873
Fido123
verified
rating uzivatele
(13 hodnocení)
25. 9. 2014 10:43:40
Chybí ti v tom UPDATE uvozovky kolem $_GET.
25. 9. 2014 10:43:40
https://webtrh.cz/diskuse/update-existuje-nebo-ne/#reply1056872
Jan Dlouhý
verified
rating uzivatele
25. 9. 2014 10:45:47
Doporučuji ti prohnat ty GETy alespoň funkcí mysql_real_escape_string, protože takhle ti kdokoli může dělat s databází cokoli bude chtít. Třeba ti všechno smaže. A to naprosto jednoduše v adresním řádku.
25. 9. 2014 10:45:47
https://webtrh.cz/diskuse/update-existuje-nebo-ne/#reply1056871
Michales
verified
rating uzivatele
(5 hodnocení)
25. 9. 2014 10:48:41
Nyní je update takto a je funkční:
$import="UPDATE `hodnoceni` SET `points`=points+5 WHERE `useres_id`=".$_GET." ";
A ano ošetřím je.
25. 9. 2014 10:48:41
https://webtrh.cz/diskuse/update-existuje-nebo-ne/#reply1056870
Jan Dlouhý
verified
rating uzivatele
25. 9. 2014 10:51:50
Napsal Michales;1126580
Nyní je update takto a je funkční:
$import="UPDATE `hodnoceni` SET `points`=points+5 WHERE `useres_id`=".$_GET." ";
A ano ošetřím je.
Taková drobnost - pokud $_GET nebude číslo ale řetězec, aplikace ti spadne (kdybys v dotazu přidat kolem proměnné ' tak by to vzalo i řetězec). Místo mysql_real_escape_string tedy použíj třeba intVal.
25. 9. 2014 10:51:50
https://webtrh.cz/diskuse/update-existuje-nebo-ne/#reply1056869
Michales
verified
rating uzivatele
(5 hodnocení)
25. 9. 2014 10:53:22
$_GET bude vždy číslo
25. 9. 2014 10:53:22
https://webtrh.cz/diskuse/update-existuje-nebo-ne/#reply1056868
Jan Dlouhý
verified
rating uzivatele
25. 9. 2014 10:55:20
Napsal Michales;1126582
$_GET bude vždy číslo
GET jde přímo z adresního řádku - kdokoli tam může napsat cokoli. Takové věci si zvykni kontrolovat vždy a všude :)
25. 9. 2014 10:55:20
https://webtrh.cz/diskuse/update-existuje-nebo-ne/#reply1056867
Fido123
verified
rating uzivatele
(13 hodnocení)
25. 9. 2014 10:55:56
Napsal Michales;1126582
$_GET bude vždy číslo
Tak na to bych si nevsadil :)
25. 9. 2014 10:55:56
https://webtrh.cz/diskuse/update-existuje-nebo-ne/#reply1056866
Michales
verified
rating uzivatele
(5 hodnocení)
25. 9. 2014 11:06:24
Použil jsem intval.
Díky
25. 9. 2014 11:06:24
https://webtrh.cz/diskuse/update-existuje-nebo-ne/#reply1056865
V MySQL (a forcích MariaDB, Percona) můžete použít
INSERT ... ON DUPLICATE KEY UPDATE
Musíte mít samozřejmě správně nastavený unikátní nebo primární index.
28. 9. 2014 22:08:32
https://webtrh.cz/diskuse/update-existuje-nebo-ne/#reply1056864
Pro odpověď se přihlašte.
Přihlásit