Autor Zpráva
Aloiss
Profil *
Zdravím, začal jsme používat dibi...nicméně nefunguje mi UPDATE dotaz

$id = $_GET['seo'];
$zapis = dibi::query('UPDATE [stranky] SET [text]='.$_POST["text"].' WHERE [seo]=%s', $id);
                    if (!$zapis){
echo "ERROR";
                    } else {
echo "OK";         
       }
Bez použití dibi jsme to měl
$zapis = MySQL_Query("UPDATE stranky SET text = '".$_POST["text"]."' WHERE seo = '$id'");
Lamicz
Profil
Aloiss:
Proč to neuděláte přes parametr stejně jako to seo? Oboje je string.
Tak nějak:
dibi::query('UPDATE [stranky] SET [text]=%s', $_POST["text"], 'WHERE [seo]=%s', $id);
Alphard
Profil
K [#2] je vhodné zdůraznit, že i kdybyste neudělal tu chybu, že jste zapomněl na apostrofy, bylo by to špatně. Dibi by v takto vzniklém řetězci nemohlo rozpoznat vstupy a escapovat je.

Časem se zřejmě dostanete k tomu, že vkládaná data budou v poli key => value a dotaz bude vypadat třeba takto:
dibi::update('stranky', $updateValues)->where('seo = %s', $id);
Kcko
Profil
Alphard:
Doplním, že za příkazem update, stejně jako za insertem či deletem by mělo být execute
Aloiss
Profil *
Zdravím, mám to nyní

$id = $_GET['seo'];
$updateValues = array(
    'text' => $_POST["text"],
);
$zapis = dibi::update('stranky', $updateValues)->where('seo = %s', $id);
                    if (!$zapis){
echo "ERROR";
                    } else {
echo "OK";         
       }

Napíše mi to sice OK, ale žádná úprava se neprovede
Taps
Profil
Aloiss:
zkus si odchytit chybu
dibi::getProfiler()->setFile('log.sql');
Kcko
Profil
Aloiss:
$zapis = dibi::update('stranky', $updateValues)->where('seo = %s', $id)->execute();
Aloiss
Profil *
Kcko:
Aha díky, s execute už to funguje, já myslel, že ot je nepovinné...díky moc


Ještě bych měl jeden dotaz, když vyplním něco jiného v inputu, tak to napíše OK, nicméně, když nic nevyplním(nezměním) tak to napíše ERROR, dá se i toto nějak ošetřit?


Omlouvám se, ne v inputu ale v textarea
<textarea name="text" rows="3" cols="65"><?=$row['text']?></textarea>
David Klouček
Profil
Nevim - nepoužívam Dibi, ale typuju že to vrací počet ovlivněnejch řádků, tak proto.
Aloiss
Profil *
Nejspíš ano, nemáte někdo zkušenosti s dibi, aby příkaz provedl pokáždé?
Alphard
Profil
Kcko:
Díky, někdy tohle, někdy test() pro vypsání dotazu. Zapomněl jsem, že každý dibi nezná :-)

Aloiss:
Vracení ovlivněných záznamů je vlastnost. V případě chyby dibi hodí výjimku. Určitě by ale šlo udělat nad tím obálku, která bude vracet jen true/false.

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: