Temat: Jak w Zendzie zrzutować 0 na '0' żeby zrobić update ?
Rzutowanie między typami odbywa się w PHP przez tzw.
castingi, czyli gdy np. mamy zmienną typu "integer" o nazwie $varName, "rzutowanie" jej na typ "string" (wspomniany w pytaniu, mocno kolokwialnie, "txt") wyglądałoby następująco:
$varName = (string) $varName;
Uważam jednak, że nie tutaj kod kwiczy. MySQL (zakładam, że z niego korzystasz) sam rzutuje liczby używane w kontekście ciągu znaków na string i odwrotnie (dokładnie nie pamiętam od której wersji). Pozwolę sobie wszystko streścic w punktach:
1. Co znaczy "wpisuję w bazie"? Z terminala lub PhpMyAdmina, z wykorzystaniem wspomnianego kodu w PHP, czy chodzi o bezprośrednie wykonanie zapytania do bazy w PHP w postaci pure SQL'a? Jeżeli PHP - podaj komunikat błędu (Zend musi działać w środowisku deweloperskim wtedy, modyfikowalne w index.php).
2. Czy zanim wartość jest przekazywana do adaptera bazy danych Zenda sprawdzasz czy FAKTYCZNIE checkbox został zaznaczony i czy czasem nie przypisujesz nulla do "is_abc"? (checkboxy NIE zaznaczone NIE są przekazywane do $_POST w momencie wysyłki formularza - oczywiście wszystko zależy od tego jak je pobierasz, rozpatruje najprostszy scenariusz z wykorzystaniem $this->getRequest()->getPost('nazwa-parametru'). Jeżeli checkbox nie jest zaznaczony, wtedy funkcja ta zwrata null).
To tyle w kwestii pobierania danych z POSTa. Załóżmy hipotetycznie, że wszystkie dane są przekazywane prawidłowo do metody obsługującej to zapytanie do bazy. Przejrzałem szybko kod i dokumentację Zenda i rzucają się w oczy pewne błędy (zgodnie z dokumentacją do wersji 1.12, dotyczącej adaptera bazy danych i update'ów, dostępną
tutaj):
1. O ile $varData jest prawidłowo zdefiniowane, to $varWhere wydaje się nie. $varWhere = array('id' => '.$parId.') przypisze do $varWhere literał będacy tablicą asocjacyjną z indeksem 'id' o wartości '.$parId.' - dosłownie '.$parId.', nie zostanie tam podstawiona wartość zmiennej $parId.
2. $varWhere nie jest zdefiniowane poprawnie zgodnie z zamieszczoną na stronie Zend'a dokumentacją.
Rozwiązaniem tego problemu byłby zapis $varWhere w następującej formie:
$varWhere = array('id = ?' => $parId);
Or so I think.
Piotr Jankowski edytował(a) ten post dnia 28.02.13 o godzinie 17:30