Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Operacje bitowe, Jak nadać i sprawdzić wartość danego bitu?
115750
post
Post #1





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 7.06.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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?

Ten post edytował 115750 27.08.2008, 12:19:16
Go to the top of the page
+Quote Post
wlamywacz
post
Post #2





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Może po prostu sesja i czyszczenie jej po wyświetleniu.
Go to the top of the page
+Quote Post
TrevorGryffits
post
Post #3





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 29.07.2007
Skąd: Tarnowskie Góry

Ostrzeżenie: (0%)
-----


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;)
Go to the top of the page
+Quote Post
115750
post
Post #4





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 7.06.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post
LBO
post
Post #5





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
wlamywacz
post
Post #6





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


TrevorGryffits
Chyba raczej switch" title="Zobacz w manualu PHP" target="_manual
Go to the top of the page
+Quote Post
115750
post
Post #7





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 7.06.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 21:05