Autor Zpráva
Jcas
Profil *
Mám form - zatím jenom 2 pole. Při volbě upravit načte data z DB a vloží je do polí. OK
Změním data a chci, aby se změna uložila do DB.
Výsledek - jedno pole uloží změnu a druhé ne.

<?php if($_GET['stav']=='upravit'&&isset($_GET['id'])&&$_GET['id']==$_GET['kontr']&&$kontrola!=false) {
    $upravit = new Sprava($admin);
    $radek = mysql_fetch_array($upravit->vyber('*', 'vystavy', 'id', $_GET['id']));
    if(isset($data)) {        //$data = pole s hodnotami na přidání $data[sloupec]=hodnota. Naplní se při odeslání formuláře
        foreach ($data as $key => $value) {
            if($data[$key]!=$radek[$key]) {
                $upravit->zmen($_GET['id'], $key, $value);    //parametry-řádek, sloupec, hodnota
                }
            }
        }
    } ?>
Podmínku a pole jsem si otestoval.
foreach ($data as $key => $value) {
            echo $key.'&nbsp;'.$value.'<br />';
            }
            if($data['nadpis']!=$radek['nadpis']) {
                echo $data['nadpis'].' a '.$radek['nadpis'].'nejsou rovny';
                }
                else {'jsou rovny'};
Zajímavé, že jednou to projde a podruhé ne.


výsledek testování:

ZO 66464
datum 281012
jmeno 66464281012
nadpis Výstava
verejna 0
Výstava a Zimní prodejní Výstavanejsou rovny

datum jsem tou částí kodu změnil. text ze zimní výstavy na pouze 'výstava' nezněnil.


    public function zmen($radek, $sloupec, $hodnota) {    #metoda na změnu dat
    $this->vloz('id', $radek);
    $this->vloz('sloupec', $sloupec);
    $this->vloz('hodnota', $hodnota);
    mysql_query($this->sql('zmenit'));
    }

    protected function sql($cinnost) {    #metoda na vytvoření sql dotazu
    switch($cinnost) {
        case 'vybrat':
        $vse = $this->sloupec['co']=='*'?'*':'`'.$this->sloupec['co'].'`';    //pomocná $ kvůly ``
        $sql = "SELECT ".$vse." FROM `".$this->sloupec['odkud']."` WHERE `".$this->sloupec['a']."` = '".$this->sloupec['b']."'";
        break;
        case 'zmenit':
        $sql = "UPDATE `vystavy` SET `".$this->sloupec['sloupec']."` = ".$this->sloupec['hodnota']." WHERE `id` = ".$this->sloupec['id'];
        break;

ps. funkce sql není celá - aby někdo neřešil její ukončení.
mimochodec
Profil
Tomu tvému kódu rozumím jen dost málo, ale jestli sloupec['hodnota'] je text, tak ti v tom druhém bloku kódu kolem něj chybí apostrofy.
Jcas
Profil *
Máš na mysli sql dotaz? Hodnota pro buňku v ``
Zkusím. Má to být univerzál. Co udělá DB, když má mít v buňce číslo, je tak nastavená, a přijde do ní číslo, ovšem díky `` jako text?
mimochodec
Profil
Jcas:
Zkusím. Má to být univerzál.

Jestli "univerzál" znamená "chci nakládat s čísly a řetězci stejně a nechám na databázi, ať si to přebere", tak to děláš špatně. I kdyby ti konkrétně to, na co se teď právě ptáš, fungovalo podle očekávání. Rozlišuj, kdy pracuješ s řetězcem a kdy s číslem.
Jcas
Profil *
Samozřejmě, že se to snažím rozlišovat. Jde o to, že funkce sql('zmenit') Má být univerzální. Zavolá se pro změnu datumu=změní datum. Zavolá se pro změnu textu=změní text.

Takže otestovat co do ní přišlo a dvě varianty sql dotazu?
mimochodec
Profil
Jcas:
Takže otestovat co do ní přišlo a dvě varianty sql dotazu?

Ano. Jen těch variant bude možná víc. Už proto, že jak sám píšeš, může jít i o datum.
Jcas
Profil *
děkuju

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: