markonix
13.10.2012, 19:53:20
function empty_to_null
($array = array()) {
foreach($array as $value)
$new_array[TUTAJ NAZWA ZMIENNEJ] = $value == '' ? NULL : $value;
return $new_array;
}
extract(empty_to_null
($zmienna1, $zmienna2));
Czy ktoś ma pomysł na działanie takowej funkcji.
Przydałaby mi się ona przed dodawaniem wielu pól numerycznych gdzie nie chce rzutowania na INT czyli zmieniania pustej wartości na 0.
cudny
13.10.2012, 20:25:13
Cytat(markonix @ 13.10.2012, 19:53:20 )

function empty_to_null
($array = array()) {
foreach($array as $value)
$new_array[TUTAJ NAZWA ZMIENNEJ] = $value == '' ? NULL : $value;
return $new_array;
}
extract(empty_to_null
($zmienna1, $zmienna2));
Czy ktoś ma pomysł na działanie takowej funkcji.
Przydałaby mi się ona przed dodawaniem wielu pól numerycznych gdzie nie chce rzutowania na INT czyli zmieniania pustej wartości na 0.
W ogóle nie wiem o czym piszesz, bo funkcja jest gotowa, ja jednak bym to troszki uprościł:
function empty_to_null
($array = array()) { foreach($array as $ind => $value)
if(!$value) $array[$ind] = NULL;
return $array;
}
markonix
13.10.2012, 21:49:54
Uproszczenie zaburza funkcjonalność - ma zmieniać tylko wartości puste typu string na NULL, wartość zero jest już poprawna i nie chce jest NULLować.
Twoja funkcja nie zadziała gdy przekażemy argumenty w takiej postaci jak pokazałem (tylko wartościami), a trzeba przekazać tablicę asocjacyjną, a to już wydaje mi się zbyt czasochłonne i wolę już to obsługiwać wtedy bez funkcji.
darko
13.10.2012, 21:54:40
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
foreach($iterator as $key=>$value) {
echo $key.' -- '.$value.'<br />'; }
http://stackoverflow.com/questions/26007/i...-in-php#2149106
thek
13.10.2012, 22:12:29
A dlaczego przy porównaniu nie sprawdzisz typu? $zmienna == '' i $zmienna === '' to dwie nieco inne rzeczy i warto nieraz z tego rozróżnienia korzystać.
cudny
13.10.2012, 22:22:06
Nie za bardzo nadal rozumiem pytanie i uderzam w ciemno ale mam nadzieję, że pomogę.
Jeśli chodzi o to czy nie puste i nie int 0 to daj prosty warunek
if(!$val && $val !== 0) $array[$index] = NULL;
markonix
13.10.2012, 22:24:24
thek - dzięki za uwagę, faktycznie tutaj jest do dla mnie wręcz obowiązkowe (dam potem pomógł żeby nie oznaczać tematu

)
darko - nie rozumiem zupełnie w czym mi to ma pomóc.
$aa = $aa === '' ? NULL : $aa;
$bb = $bb === '' ? NULL : $bb;
$cc = $cc === '' ? NULL : $cc;
itd..
Chce po prostu ubrać powyższe w jakąś uniwersalną funkcję (helper) bo czuje, że nie raz mi się to jeszcze przyda.
thek
13.10.2012, 23:21:49
Darko podrzucił Ci sposób iteracji przez tablice. Ja ze swojej strony ciutkę bym zmodyfikował formularz. Pamiętaj że w html5 weszło definiowanie typu, które śmiało możesz wykorzystać i tu. W końcu jako osoba, która tworzy/generuje formularz, możesz oprzeć się o wszystko co tam pchniesz. A gdybyś tak zdefiniował typ inputa, to czemu by tego nie wykorzystać? Walisz sobie <input type="number" /> (defaultowo, jeśli przeglądarka nie obsługuje, uznaje nowe typy za zwykły text, więc masz fallback) i przy walidacji możesz użyć ctype_digit, is_int czy inne takie, a wtedy zareagować. Zrób więc helper formularza.
markonix
14.10.2012, 01:06:06
Niestety widoki to nie moja działka tak więc wolałbym serwerowa rozwiązanie

Poza tym firefox nawet numbersów jeszcze nie obsługuje..
thek
14.10.2012, 11:54:08
Ale ja mówię o serwerowej wersji. Widok jest generowany na podstawie tego, co dajesz na wejściu do generatora formularza. A typ można przecież określić jako parametr elementu formularza. Zresztą najczęściej wszelkie generatory wymagają go, by określić z jakim typem pola mamy do czynienia ( input wszak może już teraz przyjąć: hidden, radio, text, checkbox). Dodanie kolejnych to nie problem. Nowe typy jednakże są obsługiwane jedynie client-side i po stronie serwera też muszą być walidowane. Teraz wystarczy jedynie zdefiniować abstrakcyjną klasę bazową Field z paroma własnościami i metodami, z której będziesz dziedziczył tworząc textarea czy input. Jedną z własności abstrakcyjnych będzie zapewne type i metody setType, getType, isValid. To właśnie w tej ostatniej sobie walidację ładnie na podstawie ustalonej dla danego pola formularza własności Type sprawdzisz. Jak? Z requesta bindujesz do zdefiniowanego formularza wartości z $_POST i przeprowadzasz walidację. Jeśli jest Ok, to zapis i forward na jakąś stronę... Jeśli nie, bindujesz form do widoku i wyświetlasz. Zauważ, że tutaj wszystko się dzieje server-side. Nic nie robisz po stronie klienta. A sam formularz to byłby zapewne kolejny obiekt, który trzymałby po prostu obiekty klas dziedziczonych po Field. To co chcesz zrobić, byłoby albo osobnym obiektem, albo związane z obiektem kasy Validation, jeśli taką przewidujesz.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.