PDA

Zobacz pełną wersję : Dodawanie pustych pól do bazy danych



Robster
10-05-2012, 13:45
Cześć,

Mam kolejny "problem" na tablicy. Zapisuję sobie do bazy danych wypełniony formularz:

function save(){
global $mainframe;
$row =& JTable::getInstance('Matronic', 'Table');
if(!$row->bind(JRequest::get('post'))) {
JError::raiseError(500, $row->getError() );
}

$row->Nazwa_kategorii = JRequest::getVar( 'nazwa_kategorii', '','post', 'string', JREQUEST_ALLOWRAW );
$row->Opis_kategorii = JRequest::getVar( 'opis_kategorii', '','post', 'string', JREQUEST_ALLOWRAW );

if(!$row->store(false)){
JError::raiseError(500, $row->getError() );
}

$mainframe->redirect('index.php?option=com_matronic', 'Message Saved'); }

I wszystko ładnie śmiga. Problem jest jednak z pustymi polami. Chcę by wpis do bazy mógł być dodany, tylko w przypadku uzupełnienia wszystkich pól. Wiem, że mogę to zrobić w tradycyjny sposób, jak to w formularzach ma miejsce, ale z tego co czytałem powinna to za mnie zrobić funkcja store().
Nawet specjalnie wpisałem jej parametr false, co powinno spowodować jej niewykonanie w przypadku natrafienia na pusty rekord, a tu kapa, bo pole jest dodawane.

Dodam jeszcze plik tabeli:

class TableMatronic extends JTable {
var $Id_kategorii = null;
var $Nazwa_kategorii = null;
var $Opis_kategorii = null;
function __construct(&$db) {
parent::__construct('#__kategorie','id', $db);
}
}

Id_kategorii, jest oczywiście uzupełniane automatyczne.
Jednym słowem, coś jest źle zrobiłem, czy ta funkcja działa prawidłowo?

moje
10-05-2012, 15:19
Zakładając, że z formularza pobierasz 3 informacje, to reszte (tą brakującą) np 4 informacji dodajesz sam w zapytaniu sql. Jak np tutaj:

$sql_query="data1='".$data1."', data2='".$data2."', data3='".$data3."', data4='', data5='', data6='', data7='' ";
Pamiętaj, że masz większy wpływ na to co dodajesz recznie niż na jakieś, funkccje, które nie wiadomo czy działają.

Robster
10-05-2012, 17:23
@moje nie bardzo rozumiem co napisałeś :)
Ja się zastanawiałem, jak mam zrobić, żeby ta funkcja śmigała, bo skoro jest ona dostępna, to chyba powinno się jej używać :)

Jeśli nie da rady zrobić tego na tym store(), to zwyczajnie dodam pętlę warunkową sprawdzającą czy coś przesłane przez post jest puste. Tyle, że to dość upierdliwa metoda, w przypadku większych formularzy.

moje
10-05-2012, 22:43
Jesli chcesz, żeby wszystkie pola były wypełnione, to mozesz to zrobić js'em, żeby nie pozwalał na wysłanie formularza, jak są puste pola lub albo jednym if'em w php.
Najpierw zczytujesz wszystko getVar'em.

$code_type=JRequest::getVar('data1','','GET / POST');
$code_type=JRequest::getVar('data2','','GET / POST');
. . .
$code_type=JRequest::getVar('dataN','','GET / POST');
Potem jednym if'em.

if ( empty(data1) or empty(data2) or . . . or empty(dataN) ) {
// kod, który zwraca info, że trzeba wypełnić wszystkie pola formularza
} else {
// kod dodania treści do bazy danych
}

palyga007
11-05-2012, 16:56
Wydaje mi się, że funkcja store() spełnia trochę inne zadanie niż myślisz.
http://docs.joomla.org/API16:JTableUser/store

Tutaj jest mowa o wpisywaniu nowego lub aktualizacji rekordu w zależności od wartości klucza

Robster
12-05-2012, 13:39
@moje, ale ja to wiem :D Chciałem, się tylko dowiedzieć, czy ta funkcja potrafi to automatycznie zrobić.

@palyga007 (http://forum.joomla.pl/member.php?26755-palyga007) dokładnie tak :) Trochę trwało zanim to podłapałem ^^