Bogusław Bzdyra

Bogusław Bzdyra Oracle Database
Administrator

Temat: Update query w module.

Witam,

Jestem początkujący w pisaniu czegokolwiek pod joomle. Wydaje mi sie ze szukałem juz wszędzie (ale mogę sie mylić), wiec ostatecznie pytam tutaj:)

Napisałem sobie taki moduł:

<?php

defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
global $database;


$query_update = "UPDATE jos_tabela SET date='data',picture='sciezka' WHERE id='1'";
$database->setQuery( $query_update );

echo $query_update;

?>

Moduł ten teoretycznie powinien dokonać update'u w tabeli o nazwie tabela. Niestety tak nie jest.

Dodam, ze wykonanie SELECT w ten sam sposób zwraca dane. Wykonanie update'u bezpośrednio na bazie z użytkownika za pomocą którego joomla łączy sie do mysqla tez działa. Uzytkownik ma nadane prawa insert, update itp do bazy mysql.

W czym tkwi problem ?
Za wszelkie wskazówki z góry dziękuję

i
pozdrawiam :)

konto usunięte

Temat: Update query w module.

ok, zacznijmy od poczatku...

zamieniamy:

global $database


na:

$database = JFactory::getDBO();


ale dlaczego ? otoz JFactory wywoluje aktualnie uzywana klase bazodanowa, nie tworzac nowej i zasmiecajac pamiec serwera... no dobra ale to jest funkcja globalna ? coz... staraj sie unikac wyazenia 'global' jak ognia, niestety tylko $mainframe aktualnie jest globalne w Joomli, i mam nadzieje ze to sie kiedys zmieni.

teraz do meritum:

funkcja setQuery jedynie przygotowuje / parsuje do klasy JDatabase Twoje query, a nie wykonuje je, prawidlowe wywłoanie jest następujące:


$query = 'bla bla bla';
$database->setQuery($query);
$database->query();


jeżeli chcemy sprawdzić czy wszystko poszło ok, wywołujemy:


if (!$database->getErrorMsg()){
echo 'sory gregory';
}


a teraz poczepiam się trochę, Joomla nawet ma klase do cholernego submita czy buttona, wiec tym bardziej ma funkcje do SQL UPDATE lub INSERT, wiec prawidłowym wykonaniem phpowym do UPDATE'a jest:


$databse = JFactory::getDBO();

$object = new JObject();
$object->id = '1';
$object->date = 'date'; // jezeli chcesz aktualna date, wpisujesz: JFactory::getDate()->ToMySQL();
$object->picture = 'sciezka';
// i tu sie zaczyna magia
$databse->updateObject('#__tabela',$object,'id');


oczywiscie ostatnia linia zwraca true lub alse w zaleznosci od tego czy wszystko poszlo ok, insert dziala na tej samej zasadzie co update, po prostu wywolujesz metode:


$databse->insertObject('#__tabela',$object,'id');


no to jeszcze troche poczepiam sie... lepiej nie wpisywac jos_tabela w query tylko #__tabela, gdzie #__ jest zawsze zamieniane na prefix tablei podany podczas instalacji.

to wsio, mam nadzieje ze pomoglem.
Bogusław Bzdyra

Bogusław Bzdyra Oracle Database
Administrator

Temat: Update query w module.

Pomogłeś bardzo, dziękuje.

Biorę sie za czytanie książek w takim razie i jeszcze raz dziękuje.

Pozdrawiam.



Wyślij zaproszenie do