Przejdź do treści

Centrum Kształcenia Zawodowego i Ustawicznego w Mrągowie

Kontrola poprawności danych

środa,

Kontrola poprawności danych

Kontrola poprawności danych to ważne i bardzo szerokie zagadnienie. Materiał stanowi jedynie wprowadzenie w ten temat, jednak zawiera wiele nowych informacji.

Prezentowany skrypt umożliwia policzenie objętości prostopadłościanu. Zastosowano standardowy formularz z trzema polami służącymi do wprowadzenia wymiarów. Ich nazwy otrzymały indeksy numeryczne, ułatwi to dalsze przetwarzanie danych. Indeksy określono jawnie (nadając konkretne liczby), co pozwoli sprawnie oznaczyć elementy w ewentualnych komunikatach o błędach.

<form action="" method="get">
  <h3>Obliczanie objętości prostopadłościanu</h3>
  <p>Wprowadź liczby całkowite:</p>
  <input type="text" name="wymiary[1]" placeholder="długość">
  <input type="text" name="wymiary[2]" placeholder="szerokość">
  <input type="text" name="wymiary[3]" placeholder="wysokość">
  <input type="submit" name="t" value="Oblicz">
</form>
<pre>

Zanim zostaną wykonane obliczenia, skrypt przeprowadza kontrolę poprawności danych. W przypadku wymiarów prostopadłościanu można przyjąć następujące założenia odnośnie do wartości będącej wymiarem:

  • nie jest „pusta”;
  • jest liczbą;
  • jest liczbą nieujemną;
  • jest liczbą różną od zera.

Stwierdzenia te można uprościć do zwrotu, że prawidłowy wymiar jest liczbą dodatnią, jednak warunki wyszczególnione w nieco rozwlekły sposób, pozwolą łatwo przełożyć założenia na kod PHP. Dodatkowo w prezentowanym przykładzie przyjęto, że wymiar ma być liczbą całkowitą, czyli w efekcie liczbą naturalną.

if(count($_GET)) {
  $obj = 1;
  $error = ['pusta wartość','błędna wartość','wartość ujemna','wartość równa zero'];
  $e = [];
  foreach($_GET['wymiary'] as $key => $x) {
  	$x = trim($x);
  	if($x=='') $e[] = "Parametr $key: $error[0]";
  	else if(!ctype_digit($x)) $e[] = "Parametr $key: $error[1]";
  	else if($x<0) $e[] = "Parametr $key: $error[2]";
  	else if($x==0) $e[] = "Parametr $key: $error[3]";

  	$obj *= $x;
  }
  if(isset($e[0])) {
    echo implode('
', $e); } else { echo "Objętość prostopadłościanu wynosi " . $obj; } }

Zmienna $obj zadeklarowana na początku przetwarzania danych służy do sprawnego obliczenia iloczynu, przyjęta wartość jeden jest dla tego działania obojętna. Kontrola poprawności danych realizowana jest w pętli, przy tej okazji w zwięzły sposób obliczono objętość prostopadłościanu wykonując operację $obj *= $x. Zapis ten to zwięzła forma wyrażenia $obj = $obj *$x, gdzie $x to kolejny element przetwarzany w pętli.

Przed dokonaniem kontroli poprawności dane zostają poddane działaniu funkcji trim(), która usuwa tzw. białe znaki z początki i końca przyjętego argumentu. Pozwoli to zignorować niechcący wstawione przez użytkownika spacje. Dalej została przeprowadzona założona weryfikacja:

  • nie jest „pusta”, czyli $x=='' oznacza błąd;
  • jest liczbą całkowitą - funkcja ctype_digit() sprawdza, czy przekazany do niej argument zawiera same cyfry, zaprzeczenie jej wyniku (!ctype_digit($x)) oznacza błąd;
  • jest liczbą nieujemną, czyli $x, czyli $x<0 oznacza błąd;
  • jest liczbą różną od zera, czyli $x==0 oznacza błąd.

Wszystkie przekazane w formularzu wymiary przechodzą identyczną weryfikację. Użytkownik powinien otrzymać dokładną informację o popełnionych błędach, tak aby mógł je poprawić. W tym celu zadeklarowano tablicę zawierającą informację, jakiego typu zaszedł błąd. Żeby automatycznie wskazać, którego elementu dotyczy komunikat, wykorzystano indeks elementu i konstrukcję „Parametr $key”, np. w przypadku parametru oznaczonego indeksem dwa da to „Parametr 2”. Oczywiście możliwe jest stworzenie kolejnej tablicy z nazwami wymiarów (długość, szerokość, wysokość) i odwoływanie się do niej poprzez wyrażenie $nazwy[$key] i w efekcie otrzymywanie w komunikacie konkretnej nazwy wymiaru, jednak zrezygnowano z tego, aby uprościć przykład.

Komunikaty o błędach umieszczane są w tablicy nazwanej jako e. Po sprawdzeniu, czy zawiera ona pierwszy element (isset($e[0])), co oznacza, że był jakiś błąd, w zależności od wyniku kontroli wyświetlane są komunikaty o błędach lub wynik działania.

Proszę zwrócić uwagę, że zaprezentowany mechanizm kontroli bez żadnych modyfikacji może weryfikować większą liczbę elementów.

Artykuł: Szkoła Rycerska

Szkoła Rycerska

Ślubowanie kadetów Oddziału Przygotowania Wojskowego

Kawaleria polska

Słynne szarże polskiej kawalerii

Artykuł: Szarża pod Somosierrą

Szarża pod Somosierrą

Nasze technikum

Technik informatyk

Szkoły dla dorosłych

Nasza szkoła

Pełna oferta edukacyjna

Oferta szkoły