Autor | Zpráva | ||
---|---|---|---|
Monkeys Profil * |
#1 · Zasláno: 22. 6. 2012, 01:24:20
je v tomto riadku niekde chyba ?
$dotaz= mysql_query("UPDATE ".$_GET['stav']." SET cena='".implode(',', $_POST['cena'])."' WHERE id_ledky IN('".implode(',', $_POST['id_ledky'])."')"); Nemozem ju najst! M. |
||
Alphard Profil |
#2 · Zasláno: 22. 6. 2012, 01:34:29
Asi milion chyb v zabezpečení.
Konstrukce jako in ('54,47,85') mají divně apostrofy jen na krajích.
Vypište si mysql_error() a sestavený dotaz. Pak kdyžtak napište znovu. |
||
Tori Profil |
Monkeys:
K čemu je toto: SET cena='".implode(',', $_POST['cena'])."' - chcete naráz updatovat několik řádků a každý jinou hodnotou? To, obávám se, nepůjde*. MySQL neprovádí update podle pořadí v IN(), ale změní (stejným způsobem) všechny řádky, které vyhovují podmínce ve WHERE. Updatujte cyklem v PHP.
* resp. jde to komplikovaným způsobem s CASE WHEN ..., ale přijde mi to zbytečně nepřehledné, zvlášť pokud se předem neví, kolik řádků se bude updatovat. |
||
Kajman Profil |
#4 · Zasláno: 22. 6. 2012, 09:40:09
Tori:
„jde to komplikovaným způsobem s CASE WHEN“ Na vygenerování case when lze použít funkci z http://php.vrana.cz/hromadna-aktualizace-zaznamu.php Také jde vygenerovat něco jako UPDATE (SELECT 1 id, 50.3 cena FROM DUAL UNION ALL SELECT 2 id, 1897 cena FROM DUAL) AS tmp JOIN tabulka t ON t.id=tmp.id SET t.cena = tmp.cena případně UPDATE tabulka t SET t.cena = Elt(Field(t.id, 1, 2), 50.3, 1897) WHERE t.id IN ( 1, 2 ) |
||
Monkeys Profil * |
#5 · Zasláno: 22. 6. 2012, 14:51:08
Tori:
Updatujte cyklem v PHP. Ano mate pravdu to je to spravne riesenie Dakujem |
||
Monkeys Profil * |
#6 · Zasláno: 22. 6. 2012, 20:21:39
No spravil som nieco taketo:
if(isset($_POST['aktualizuj'])){ $mnozstvo = mysql_query('SELECT * FROM '.$_GET['stav'].''); $count = mysql_num_rows($mnozstvo); //echo $count; for($i=0; $i<=$count; $i++){ $dotaz="UPDATE ".$_GET['stav']." SET cena='".implode(",", $_POST['cena'])."', WHERE id_ledky='".implode(",", $_POST['id_ledky'])."'"; //echo $dotaz; } vypise to 7 krat nieco taketo: UPDATE e14_led SET cena='1.60,1.60,1.60,1.60,1.60', WHERE id_ledky='1,2,3,4,5 Data sa neaktualizuju rozmyslam mam to robit zvlast pre kaze jedno ID ? Povodny plan bol robit to hromadne ale neviem ako nato ? Vdaka |
||
pcmanik Profil |
#7 · Zasláno: 22. 6. 2012, 23:16:51
Monkeys:
Kajman ti napisal riesenie. V jednoduchom update dotaze nemozes aktualizovat viac riadkov naraz. |
||
Monkeys Profil * |
#8 · Zasláno: 23. 6. 2012, 21:01:20
Vyriesil som to takto:
if(isset($_POST['aktualizuj'])){ $mnozstvo = mysql_query('SELECT * FROM '.$_GET['stav'].''); $count = mysql_num_rows($mnozstvo); $zobrazit = $_GET['vypis']; for($i=0; $i<=$zobrazit; $i++){ $dotaz=mysql_query("UPDATE e14_led SET cena='".$_POST['cena'][$i]."' WHERE id_ledky=".$_POST['id_ledky'][$i].""); } } |
||
panther Profil |
#9 · Zasláno: 24. 6. 2012, 21:10:33
Monkeys:
„Vyriesil som to takto:“ potěš, jestli budeš někdy potřebovat updatovat více než málo řádků :-) |
||
Monkeys Profil * |
#10 · Zasláno: 25. 6. 2012, 10:15:02
panther:
je to len od 2 do 15 riadkov v tabulke, takze to ide hned. keby ich bolo viac asi by to trvalo dlhsie alebo by sa to zacyklilo. neviem tazko povedat M. |
||
pcmanik Profil |
#11 · Zasláno: 25. 6. 2012, 11:33:09
Monkeys:
Namiesto toho prveho dotazu ti staci jednoduche COUNT(*) priamo v dotaze. Ci pracujes dalej niekde s tymi hodnotami, ked ich odtial vsetky nacitas? |
||
Monkeys Profil * |
#12 · Zasláno: 25. 6. 2012, 12:34:11
pcmanik:
mam to spravene da sa povedat jednoducho: Cez select vyberiem druh tabulky ktoru chcem aktualizovat nacitaju sa mi vsetky zaznamy ktore potrebujem vypisat (niektore tabulky maju len 2 zaznamy ine az 15 zaznamov), po vypise si uz uzivatel upravy co potrebuje napr(cenu, alebo ci je druh ziarovky na sklade Ano/Nie) potom klikne na aktualizovat a tam prebehne hore uvedeny UPDATE zapisu sa nove hodnoty (pokial neake su ) a tym to konci. Hore uvedeny update bol len cvicny pokus aby som zistil zakladnu problematiku teraz to mam upravene ze zapisujem naraz do 2 tabuliek. M. |
||
Časová prodleva: 12 let
|
0