Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Operacje bitowe
Forum PHP.pl > Forum > PHP
115750
Robię obsługę błędów dla formularza. Na początek będą to 3 błędy.
Chciałbym przekazywać (do następnej strony) informację o wszystkich błędach za pomocą tylko jednej liczby.

Wymyśliłem to sobie, że wyglądałoby to podobnie to praw w Linuksie. Błąd danego typu powodowałby ustawienie danego bitu na 1.
Zatem np. dziesiętna liczba 3 (= 00000011 binarnie) oznaczała by wystąpienie błędów typu 1 i 2.

Do tego potrzebuję tylko sposobu na łatwe i szybkie nadawanie i sprawdzanie wartości danego bitu.
Jest na to jakaś doba metoda?
wlamywacz
Może po prostu sesja i czyszczenie jej po wyświetleniu.
TrevorGryffits
Robisz tak: każdy błąd niech ma kod o wartości przybierającej jakąs potęgę liczby 2(poza 0). Np.: zbyt krótkie hasło(np. poniżej 6 znaków) = 2, nieprawidłowe znaki(@, ", ', itd.) = 4, jeszcze jakiś błąd = 8. Potem w trakcie walidacji dodajemy do siebie te kody i przekazujemy do następnej strony. Za pomocą sesji chociażby.
Uznajmy, że podajemy hasło jf@". W trakcie walidacji stwierdzamy, że jest ono zbyt krótkie($zmienna ma wartość teraz 2) i ma złe znaki($zmienna += 4 //=6).
Na drugiej stronie używamy koniunkcji bitowej w taki sposób:
  1. <?php
  2. if($zmienna_z_zewn & 2){
  3.  echo 'Za krotkie';
  4. }
  5. if($zmienna_z_zewn & 4){
  6.  echo 'Złe znaki';
  7. }
  8. if($zmienna_z_zewn & 8){
  9.  echo 'Błąd';
  10. }
  11. ?>

Wyświetli dwa pierwsze błędy.

Haczyk polega na tym, że moim zdaniem nie warto do takiego czegoś używać operacji bitowych. Ale skoro chcesz;)
115750
Cytat(TrevorGryffits @ 27.08.2008, 13:14:44 ) *
Haczyk polega na tym, że moim zdaniem nie warto do takiego czegoś używać operacji bitowych. Ale skoro chcesz;)

Dzięki za odpowiedź, właśnie o to mi chodziło. Jednak skoro nie warto używać operacji bitowych, to co jest lepsze?
Kod błędu chcę przekazywać metodą GET (w adresie).
LBO
Cytat(TrevorGryffits @ 27.08.2008, 13:14:44 ) *
[ciach]
Haczyk polega na tym, że moim zdaniem nie warto do takiego czegoś używać operacji bitowych. Ale skoro chcesz;)


Przykład z flagami bitowymi ma jedna wadę - ilość błędów jakie możesz oznaczyć jest zależna od architektury procesora. Na 32 bitowych oznaczysz w ten sposób ok. 30... nie jest to najlepsze rozwiązanie do takiego problemu.

Najlepiej się sprawdza przy przekazywaniu parametrów do funkcji/metod.

Cytat(115750 @ 27.08.2008, 13:26:28 ) *
Dzięki za odpowiedź, właśnie o to mi chodziło. Jednak skoro nie warto używać operacji bitowych, to co jest lepsze?
Kod błędu chcę przekazywać metodą GET (w adresie).


Najlepiej trzymaj to w sesji. w tablicy z błędami, gdzie klucz to wartość atrybutu name w formularzu.
wlamywacz
TrevorGryffits
Chyba raczej switch" title="Zobacz w manualu PHP" target="_manual
115750
Cytat(wlamywacz @ 27.08.2008, 16:21:12 ) *

Według mnie TrevorGryffits dobrze to napisał. Switcha tu raczej nie można zastosować ze względu na zmienność operatora a nie wyniku.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.