![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 12.01.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam mały problem. W bazie danych , nazwy kolumn poprzedziłem "typem" int_klucz ... int_kategoria ... int_podkategoria ... var_imie ... var_nazwa ... itd Chcę dane odbierane z , i wysyłane do bazy sprawdzać czy mają poprawny format , na podstawie przedrostka dołączonego do nazwy zmiennej z tablicy. Dane z formularzy trzymam w 1 tablicy , dane odebrane z mysql w kolejnej , chcę stworzyć funkcję , której wrzucam taką tablicę , ona sobie iteruje wyciągając ów przedrostek na podstawie którego odpalany jest odpowiedni "filtr". Tyle że zablokowałem się i nie mam pojęcia jak mam wyciągnąć nazwę zmiennej z tablicy ![]() Widziałem gdzieś to na forum , ale nie mogę teraz znaleźć. Byłbym wdzięczny za pomoc! |
|
|
![]()
Post
#2
|
|
![]() Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 657 Pomógł: 125 Dołączył: 29.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
chodzi o to żeby np. z int_klucz zrobić $klucz i przekonwertować stamtąd dane do danego typu (np. int) ?
Jeśli tak, to przyda ci się funkcja substr, np:
Pisane z palca, więc nie wiem czy zadziała. Jeśli nie o to chodzi to wytłumacz dokładniej, bo coś nie do końca rozumiem ![]() BTW. Co oznacza var_? int no to integer, ale var to variable - zmienna ogólnie. Chodziło o string? -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 508 Pomógł: 75 Dołączył: 2.11.2005 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
chodzi o to żeby np. z int_klucz zrobić $klucz i przekonwertować stamtąd dane do danego typu (np. int) ? Jeśli tak, to przyda ci się funkcja substr, np:
Pisane z palca, więc nie wiem czy zadziała. Jeśli nie o to chodzi to wytłumacz dokładniej, bo coś nie do końca rozumiem ![]() BTW. Co oznacza var_? int no to integer, ale var to variable - zmienna ogólnie. Chodziło o string? Var = VARCHAR ![]() Ale dla varchar nie mozna ustawic przez PHP typu, gdyz taki w PHP nie istnieje... Lepiej chyba tam dac STR
Nie wiem czy o to chodzilo, ale pewnie o cos podobnego... ![]() ![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 657 Pomógł: 125 Dołączył: 29.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
Można zastosować przy rzutowaniu wartość ze zmiennej?
-------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 12.01.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Witam !
Dzięki za tak szybką odpowiedź! hehe no cięzko wytłumaczyć co mi sie uroiło w głowie ![]() więc podam przykład : 1) kolumny w MySQL nazwałem sobie wg schematu : TYP_DLUGOSC_NAZWAKOLUMNY 2) w odpowiedzi na zapytanie otrzymuje tablicę , w których mam powiązane nazwy kolumn z wartościami : var_030_imie = wartość var_030_nazwisko= wartość var_030_miasto= wartość... inf_002_klucz = wartość 3) przed wyświetleniem/zapisaniem , chcę sprawdzić wartość zmiennej na podstawie jej nazwy czyli : - wrzucam zmienną do funkcji $this-testPoprawnosci($tablica) - lecę sobie po tablicy wyciągając $nazwa = wartość i chce nazwę rozbić za pomoca np explode() o łacznik " _ " aby otrzymać TYP oraz DLUGOSC , i na podstawie tego dobrać odpowiednią funkcję sprawdzającą co do TYPÓW , var , int ... oczywiście bedą inne ![]() jest to wykonalne?? Po co mi to ![]() zmianiając nazwę kolumny w MySQL , dane będa wrzucane w inne funkcje sprawdzające w czym problem?? niemam pojęcia jak Nazwę zmiennej wyciągnąć , lub jak na niej operować?? np w wyniku z mysql mam tablice z 3 zmiennymi : nip_020_numernip , typ to nip , więc w case wskakuje $this->testNip() mail_060_email , typ = mail , wskakuje $this->testMail() txt_060_imie , typ = mail , wskakuje $this->samTxt() rozbijam ją np za pomocą $w = mysql_fetch_array( $p[mysql] ); i mam tablice $w[nazwa_kolumny] = wartość i jak na tym etapie moge operować nazwą kolumny , tak jak stringiem?? |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Wprost tego nie zrobisz - musisz pokombinować, ale dobrym punktem wyjścia jest array_keys" title="Zobacz w manualu PHP" target="_manual, która zwraca nazwy wszstkich kluczy w tablicy. Możesz też jak ktoś wyżej napisał skorzystać z
Pozdrawiam -------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 12.01.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
O !
wtedy można by zrobić :
Co myślicie ![]() Ten post edytował zyraf_pl 11.09.2007, 09:59:42 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
zdecydowanie lepiej będzie jak zrobisz tak jak poniżej, nie będzie wtedy tego wielokropka ;D:P (jednak trzeba zrobić zabezpieczenia co do wywoływanej funkcji):
moim zdaniem pomysł trochę chybiony, myślę właśnie jak robić dynamiczną weryfikację danych, ale podany przez Ciebie sposób będzie jak podejrzewam mało wygodny Ten post edytował zimi 11.09.2007, 10:07:07 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 12.01.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
moim zdaniem pomysł trochę chybiony, myślę właśnie jak robić dynamiczną weryfikację danych, ale podany przez Ciebie sposób będzie jak podejrzewam mało wygodny Czemu ![]() Zmiana nazwy kolumny (czy nazwy zmiennej) automatycznie pociąga za soba zmianę operacji jaka będzie wykonywana na zmiennej (tu funkcji sprawdzającej) , bez ingerencji w kod klasy... dodaję kolumne w mysql i automatycznie będzie ona filtrowana... Jeśli masz (lub ktoś ma) jakieś propozycje to chętnie wysłucham hmmm żeby nie okazało się ![]() ![]() Sposób z $this->{$x[0]} jest ładniejszy , ale ktoś zwykłą tablicą , może wywołac funkcję której nie chcę , plus podac jej dane. case zajmie trochę miejsca , ale tak jak z includowaniem plików z $_GET , jest chyba pewniejszy ![]() Jak uważasz ![]() Ten post edytował zyraf_pl 11.09.2007, 11:22:04 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Czemu?
Moim zdaniem: 1. mało wygodne będzie pisanie zapytań do bazy Twoje zapytanie do bazy jak rozumiem będzie wyglądać mniej więcej Kod SELECT int_002_klucz, var_030_imie, var_030_nazwisko FROM uzytkownicy WHERE int_002_klucz = 3 a więc będziesz musiał pamiętać typ, co raczej nie będzie trudne, ale również długość, co może być uciążliwe, i wszędzie to wpisywać 2. spróbuj połączyć swój skrypt z jakimś innym, na przykład wspólna baza użytkowników z PHPBB zostaniesz przy swojej strukturze tabeli i pozmieniasz cały PHPBB czy przejmiesz tabelę z PHPBB i będzie ona potrzebowała oddzielnej weryfikacji? 3. ponadto masz jedynie dane odnośnie długości maksymalnej, a powiedzmy że będziesz chciał aby była również długość minimalna (raczej nie ma na przykład dwuliterowych imion w języku polskim) to gdzie to wpiszesz? po kolejnym "_"? natomiast w NIP-ie Ci długość raczej nie potrzebna bo raczej się nie zmienia ![]() a zatem jak widać rozwiązanie mało przenośne 4. Twoja klasa przyjmuje znamiona "klasy boskiej", czyli antywzorca projektowego, innymi słowy klasa (moim zdaniem) chce robić za dużo, będzie sprawdzała od poprawności wartości TRUE/FALSE (powiedzmy w checkbox-ach) do skomplikowanych informacji, jak PESEL-e, NIP-y, REGON-y i inne często prawdodopodobnie bardziej złożone struktury informacji, na przykład ściągane od klienta pliki (których całych prawdopodobnie do bazy nie wrzucisz, ale ich nazwy może już tak, a wielkość plików lub typ plików i tak będziesz musiał sprawdzić) Twój sposób nie przyjmuję w ogóle możliwości weryfikacji pliku więc mimo klasy sprawdzającej będziesz musiał i tak sprawdzać a jak będziesz musiał zedytować kod metody nip to wśród dziesiątek innych metod się zgubisz... edycja długich kodów nigdy nie jest przyjemna(, jednak jak kod się rozbije to w sumie w wielu klasach każda w osobnym pliku też można się pogubić) no ale każdy programista ma własne zdanie... jeśli takie rozwiązanie Ci wystarczy, nie będzie Ci przeszkadzać no to nie widzę problemu wg mnie informacje odnośnie danych jak na przykład długość powinny być zawarte raczej w pliku konfiguracyjnym albo jemu podobnym Cytat bez ingerencji w kod klasy... jeżeli piszesz zgodnie z zasadą DRY (Don't repeat yourself) to zmiana jednej liczby z na przykład 30 na 20 wręcz trudno nazwać "ingerencją" ![]() Cytat hmmm żeby nie okazało się że wynajduje koło na nowo co do tego że wynajdujesz koło na nowo nie mam wątpliwości bo ktoś taką weryfikację na pewno już zrobił ![]() zbyt przydatne żeby tego nie było, jednak nie mam namiarów ![]() Cytat Jeśli masz (lub ktoś ma) jakieś propozycje to chętnie wysłucham ja myślę o sposobie w którym każdy typ danych ma swój odpowiednik w klasie więc miałbym klasę na przykład NIP, wszystkie te klasy mają metodę isCorrect i wszystkie obiekty mają swoje obiekty informacyjne, przykładowo dla obiektu Integer mam w klasie informacyjnej pola: $info->min, $info->max no i metoda isCorrect będzie sprawdzać czy jakaś wartość jest liczbą i czy mieści się w przedziale, poza tym metodę isCorrect wywołuję w setterze, więc jeśli jakąś informację mam w obiekcie znaczy że jest poprawna, podobnie jak w językach programowania gdzie trzeba dokonywać inicjalizacji zmiennych, jeśli zastrzeżesz że zmienna ma być typu integer to próba przypisania wartości innego typu spowoduję błąd obiekty typu info dają swobodę, najpierw myślałem żeby po prostu podawać kilka wartości w konstruktorze które są warunkami, czyli tworzenie obiektu miałoby postać
ale wtedy musisz pamiętać co musi być na którym miejscu w konstruktorze i nie możesz korzystać za bardzo z polimorfizmu, a tak zawsze wpisujesz do konstruktora obiekt $info i będzie tak zawsze i wszędzie... a parametrów odnoszących się do poprawności danego typu danych może być dowolna liczba Cytat ale ktoś zwykłą tablicą , może wywołac funkcję której nie chcę , plus podac jej dane pisałem że po prostu trzeba dorobić zabezpieczenie najprostszym by było poprzedzenie metod sprawdzających przedrostkiem zwykłego podkreślnika, bądź 'check', a więc: $this->{'_'.$x[0]} i wcześniejsze sprawdzenie czy taka metoda w ogóle istnieje, naturalnie inne metody klasy wtedy nie mogą mieć tego przedrostka, ja include-ów raczej nie stosuje do takiego zadania jak włączanie zawartości strony, jednak raczej podejścia z case-m bym nie kultywował jednak nie można powiedzieć aby case był bezpieczniejszy, wszystko zależy od kodu... no dobra napisałem referat starczy już chyba na dziś ![]() moje "rozwiązanie" jest jedynie w połowie zapisane i niekoniecznie jest prawidłowe lub do końca przemyślane... |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 12.01.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Dzięki!!
Trafne spostrzeżenia ![]() Cytat 1. mało wygodne będzie pisanie zapytań do bazy To fakt , też się nad tym zastanawiałem. Jednak metody setCośtam() i getCośtam() zmienia się rzadko i uznałem , że to bedzie jednorazowo kilka minut wiecej ... Cytat 2. spróbuj połączyć swój skrypt z jakimś innym, na przykład wspólna baza użytkowników z PHPBB To jest rozwiązanie tylko dla mnie i moich stronek ... więc problem zgodności odpada Cytat 3. ponadto masz jedynie dane odnośnie długości maksymalnej (...) W przypadku $this->nip , $this->godnosc , $this->email nie będzie problemu . Fakt - brak minimalnej w pozostałych może być uciążliwy , ale ogólnie zastanawiam się czy MAX jest potrzebny (Baza to limituje). 1 - Ogólnie funkcja ma odbierać dane z mysql i tylko tyle. 2 - Będzie bazowała na innych klasach , wiec nie będzie więcej kodu ( nip() regon() ... ) 3 - case -> deflaut : i tu podstawowe minimum usuwającej kod html , php , skrypty , podlinkowania do skryptów itd bo to idzie inną drogą Filtrowaniem <form> i danych od klienta zajmuje się inna klasa , ta funkcja ma być dodatkowym zabezpieczeniem gdyby udało sie zapisać coś do bazy. Staram się oczyścić dane przychodzace ale ... lepiej przed przekazaniem danych do skryptu i wyświetleniem , dodatkowo sprawdzić. Strona gotowa , jest cachowana , więc nie będzie odczuwalnej różnicy wydajności. Dzięki!! Jeszcze to przemyślę |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 9 Dołączył: 3.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Cytat To jest rozwiązanie tylko dla mnie i moich stronek ... więc problem zgodności odpada to że to są tylko Twoje stronki nie znaczy, że kiedyś nie uznasz, że jakiś napisany skrypt ogólnie dostępny będzie spełniał Twoje potrzeby, a pisanie tego samego samemu zajmie Ci kupę czasu i wtedy trzebaby się zastanowić nad adaptacją... Cytat Baza to limituje IMO to bardzo brzydka próba rozwiązania tego problemu, szczególnie że operacje IO (a wysłanie zapytania do bazy takimi są) zajmują największą część czasu przy wykonywaniu skryptu..., zresztą u mnie min i max mają się odnosić do różnych typów danych których baza już limitować nie będzie, przykładowo Integer, (W którym roku się urodziłeś? $this->min = 1900; $this->max = 2004; => trzylatki umiejące czytać to już i tak czysty hardcore ![]() Cytat Filtrowaniem <form> i danych od klienta zajmuje się inna klasa jesteś pewien że po drodze nie zagubiłeś gdzieś idei DRY? jeśli mowa już o wprowadzeniu danych do bazy to naszła mnie kolejna myśl... jak będziesz te dane weryfikował? najpierw będziesz wykonywał zapytanie żeby się dowiedzieć jakie są nazwy kolejnych kolumn i aby wyciągnać stamtąd typ danych i dopuszczalną długość? potem będziesz dane weryfikował a potem dane zapisywał? Cytat ta funkcja ma być dodatkowym zabezpieczeniem gdyby udało sie zapisać coś do bazy jeśli dobrze dane sprawdzasz po nadejściu ich z formularza, to tylko bezpośrednie operacje na bazie coś mogą popsuć... zresztą nie widzę powodu rozdzielania tych klas, a jeśli nazwy kolumn mają być wykorzystywane tylko przy wybieraniu danych z bazy to jest w tym jeszcze mniejszy sens niż widziałem na początku bo jeśli jakieś dane gdzieś składujesz to raczej w jednym miejscu... inaczej przy zmianach zaczyna się znowu przepisywanie (naturalnie to moje zdanie...) zauważ, że zmiany będziesz już teraz (nie wiem jak rozwiązałeś weryfikację z formularzy) dokonywać w 2 miejscach. W bazie i w funkcjach (zwróć uwagę na liczbę mnogą) w których wybierasz z MySQL konkretne kolumny |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 12.01.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
OK - czyli pomysł głupi
![]() Limit bazy - miałem na mysli długość pola `klucz` , 2 , czyli max to 99 `imie` , 40 , czyli nie więcej jak 40 znaków "W którym roku się urodziłeś?" - tego typu dane przy zapisie sprawdzam ![]() setUrodziny() { // jesli poprawny dodaje do kolejki pytań sql } DRY - no może trochę zgubiłem ![]() Dane przy zapisie sprawdzam , chciałem napisane już funcje , wykorzystań do powtórnego sprawdzenia danych odbieranych z bazy Dzięki za opinie Pozdrawiam! |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 1 657 Pomógł: 125 Dołączył: 29.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
zimi - no właśnie też mi się wydaje że tylko za pomocą eval...
-------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.05.2025 - 11:05 |