• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

mySQL - błędnie wprowadzone rekordy

Object Storage Arubacloud
0 głosów
357 wizyt
pytanie zadane 9 grudnia 2017 w SQL, bazy danych przez Samwoja Początkujący (270 p.)
mam takie zadanie do wykonania :

"Sprawdź, czy w tabeli <tabela2> nie występują błędnie wprowadzone rekordy"

tabela2:

imie-text NOT NULL

nazwisko -  text NOT NULL,

telefon INT NULL

 pesel int(11) unsigned DEFAULT NULL

miejscowość text

 

Jak takie coś ugryźć? Czy błędnie wprowadzony rekord to pusty rekord? Czy literówki też należy uwzględnić? Jak sprawdzić czy ktoś nie wpisał np 9 cyfr w PESELU (bo takie coś bedzie błędnym rekordem, prawda?)?

Ja to rozumuje w taki sposób, że trzeba by było przejrzeć tabelę, co można zrobić, bo jest mała, ale co jeśli taka tabela ma dziesiątki wpisów. Jak to sprawdzić? jaką kwerendę napisać?

Pragnę podkreślić, że jestem samoukiem i nie wszystko jest mi oczywiste jak widać po tym zapytaniu. Jeśli jest możliwość podania przykładu, to uprzejmie o taki proszę. (nie pracuje z SZBD na co dzień).

2 odpowiedzi

0 głosów
odpowiedź 12 grudnia 2017 przez Ignobiles Obywatel (1,800 p.)

Nie rozumiem co w twoim przypadku oznacza błędnie. Baza danych nie pozwoli na wprowadzenie np napisu do inta. Więc tego nie musisz sprawdzać. Jeśli chcesz wiedzieć czy ktoś dobrze wprowadził pesel to sprawdź to na poziomie PHP

Pozdrawiamwink

0 głosów
odpowiedź 12 grudnia 2017 przez Tomek Sochacki Ekspert (227,510 p.)
  1. IMIĘ, NAZWISKO - typ TEXT daje Ci bezpieczeństwo co do znaków (trzeba tylko zadbać o odpowiednie kodowanie tabeli aby zapewnić dobrą obsługę pełnego zakresu Unicode BMP). NOT NULL chroni Cię przed próbą zapisania pustej wartości. I w praktyce za wiele więcej nie zrobisz. Pytanie jak sprawdzić poprawność imienia i nazwiska? Łatwo - sprawdź czy ciąg zawiera po prostu litery. I tutaj trafiamy na kamień... :) A co z nazwiskami wieloczłonowymi, z myślnikiem, myślnikiem otoczonym spacjami itp. itd. A imiona również mogą być wieloczłonowe... a co ze znakami z innych alfabetów, znakami diaktrycznymi itp. itd. także, imienia i nazwiska bym nie weryfikował, za chwilę napiszę dlaczego...
  2. telefon - czy na pewno INT to dobry wybór typu? Generalnie numer składa się z cyfr i opcjonalnego znaku plusa. Może lepiej byłoby np. dać tu VARCHAR i weryfikację przeprowadzić przed zapisem, np. regexp najpierw usunąć znaki typu myślnik, spacje, plus itp., a następnie sprawdzić, czy ostateczny ciąg zawiera wyłącznie same cyfry. brak NOT NULL oznacza, że brak numeru telefonu uznajesz za wartość poprawną?
  3. pesel - to omówię za chwilę,
  4. miejscowość - patrz pkt. 1

Co do peselu to musi on spełniać dwa kryteria: mieć dokładnie 10 cyfr i przejść walidację tzw. cyfry kontrolnej. Sprawdzenie cyfry kontrolnej polega na pomnożenie każdej cyfry PESEL przez odpowiednią dla niej wagę i zsumowaniu wyników tych działań. Następnie sprawdzeniu, czy reszta z dzielenia otrzymanej sumy przez 10 da w wyniku zero. Wpisz sobie w necie "walidacja pesel" to znajdziesz wiele gotowych algorytmów.

I tutaj powrócę do walidacji imienia i nazwiska. Warto by się zastanowić, jakie jest ryzyko, że ktoś poda błędne imię i błędne nazwisko (np. jakieś zupełnie losowe ciągi znaków itp.) ale jednocześnie poda swój prawdziwy pesel? Wydaje mi się, że znikome, więc walidacja peselu powinna rozwiązać większość problemów. Owszem, zawsze można podać np. zmyślone imię i nazwisko + pesel jakiś znaleziony w necie i wszystko będzie oki. W praktyce jednak nie jesteś w stanie wykryć takich przypadków, a tak na prawdę nie jest to potrzebne. W tabeli proponowałbym więc zmianę pesel na NOT NULL i wymuszenie podania go podczas określania danych personalnych.

Trzeba tylko pamiętać, że w przeszłości zdarzały się pesele wydawane błędnie, które nie przejdą walidacji, ale są uznawane prawnie za poprawne :)

Pytanie tylko na koniec czy tą weryfikację chcesz robić już na danych zapisanych, np. poprzez procedurę składowaną (np. w MySQL) czy przed zapisem, w aplikacji?

Myślę, że najlepiej też gdybyś podała jakieś przykładowe wg Ciebie dane poprawne i błędne, głównie chodzi o te błędne, żeby precyzyjnie dobrać sposób walidacji.

 

Podobne pytania

0 głosów
1 odpowiedź 444 wizyt
pytanie zadane 17 grudnia 2017 w SQL, bazy danych przez seam3 Początkujący (450 p.)
0 głosów
1 odpowiedź 123 wizyt
0 głosów
2 odpowiedzi 405 wizyt
pytanie zadane 30 października 2017 w PHP przez koyoo Początkujący (340 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...