Autor Zpráva
Monkeys
Profil *
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
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
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 *
Tori:

Updatujte cyklem v PHP.

Ano mate pravdu to je to spravne riesenie

Dakujem
Monkeys
Profil *
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
Monkeys:
Kajman ti napisal riesenie. V jednoduchom update dotaze nemozes aktualizovat viac riadkov naraz.
Monkeys
Profil *
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
Monkeys:
Vyriesil som to takto:
potěš, jestli budeš někdy potřebovat updatovat více než málo řádků :-)
Monkeys
Profil *
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
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 *
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0