Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasa hashująca
Forum PHP.pl > Forum > PHP
Rookie
Witam,
nie dawno zacząłem bawić się programowaniem obiektowym w php.
Wczoraj wieczorem skończyłem prosty skrypt, który hashuje wpisane słowo na dowolny algorytm hashujący, do wyboru do koloru, są wszystkie możliwości.
Ma obsługę błędów, po pozostawieniu któregokolwiek pustego pola, pokazywany jest odpowiedni komunikat. Jest odporny na ataki XSS.
Oczywiście graficznie jest goły ale można go dowolnie ubrać w jakąś skórkę smile.gif
Proszę bardzo może komuś się przyda, najprostszy jaki mógł być, wypociny wypocone z 1-dniowej nauki programowania obiektowego smile.gif :
  1. <?php
  2. $tablica = hash_algos();
  3. $anty_xss_hash = htmlspecialchars(trim($_POST[hash]));
  4. class buduj {
  5. function strona() {
  6. ?>
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  8. <html>
  9. <head>
  10. <title>Hashowanie</title>
  11. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  12. <style type="text/css">body {font-size: 12; font-family: Arial;} .formularz {width: 200px;} .wybor {width: 204px;}</style>
  13. </head>
  14. <body>
  15. <?php
  16. }
  17. function stopka() {
  18. ?>
  19. </body>
  20. </html>
  21. <?php
  22. }
  23. }
  24. class hash {
  25. var $hash;
  26. var $rodzaj;
  27. public $blad='';
  28. public function hashuj($zahashuj) {
  29. $rodzaj = $this->rodzaj;
  30. if(in_array($rodzaj, hash_algos())) {
  31. $zahashuj = $this->hash;
  32. $zahashuj = hash($rodzaj, $zahashuj);
  33. return $zahashuj;
  34. } else {
  35. $this->blad = '<span style="color: red;">Nie ma takiego algorytmu hashującego</span><br>';
  36. echo $this->blad;
  37. }
  38. }
  39. public function czy_jest_wpis($pusto, $pusto2) {
  40. $pusto = $this->hash;
  41. $pusto2 = $this->rodzaj;
  42. if(strlen($pusto) < 1 || strlen($pusto2) < 1) {
  43. $this->blad = '<span style="color: red;">Wypełnij pola</span><br>';
  44. echo $this->blad;
  45. }
  46. }
  47. }
  48. $zbuduj = new buduj();
  49. $zbuduj->strona();
  50. $hashuj = new hash();
  51. $hashuj->hash = $anty_xss_hash;
  52. $hashuj->rodzaj = $_POST[rodzaj];
  53. if (isset($_POST[hashowanie])) {
  54. $hashuj->czy_jest_wpis($anty_xss_hash, $_POST[rodzaj]);
  55. if($hashuj->blad=='') {
  56. echo '<table><tr><td align="right">Wpisana fraza:</td><td><b>';
  57. echo $anty_xss_hash;
  58. echo '</b></td></tr><tr><td>Zahashowane ';
  59. echo $_POST[rodzaj];
  60. echo ':</td><td><b>';
  61. echo $hashuj->hashuj($anty_xss_hash);
  62. echo '</b></td></tr></table>';
  63. }
  64. }
  65. ?>
  66. <form action="klasa_hashujaca.php" method="POST">
  67. <table><tr><td>Wybierz algorytm hashujący:</td>
  68. <td><select name="rodzaj" class="wybor">
  69. <option value="">Wybierz</option>
  70. <?php
  71. foreach ($tablica as $wyswietl){
  72. if ($_POST[rodzaj] == $wyswietl) $zaznaczone = ' selected';
  73. else $zaznaczone = '';
  74. echo "<option$zaznaczone>$wyswietl</option>\r\n";
  75. }
  76. ?>
  77. </select></td></tr><tr><td>Wpisz frazę do zahashowania:</td>
  78. <td><input class="formularz" type="text" name="hash" value=""></td></tr>
  79. <tr><td colspan="2"><input name="hashowanie" type="submit" value="Hashuj"></td></tr>
  80. </form>
  81. <?php $zbuduj->stopka; ?>

Mam nadzieję, że komuś się przyda.
Pozdrawiam.
adrian.p
To nie ma nic wspolnego z OOP.
nospor
Cytat
Jest odporny na ataki XSS.
Szkoda ze nie jest odporny na masę bledow ktore generujesz...
Włacz sobie wyswietlanie wszystkich bledow
http://nospor.pl/php-faq-n29.html#faq-2
a zrozumiesz o czym mowie.

Jak już uzywasz php5 to uzywaj php5 a nie walisz jakies kwiatki w stylu:
var $zmienna

O klasie buduj już nawet nie będę sie wypowiadał

ps: przenosze. To nie nadaje się do dzialu Gotowe rozwiązania. Nie wspomnę już o tym, że ten dział wogóle służy czemu innemu.
Crozin
Eee... OOP do czegoś takiego?
  1. <? if(in_array($_POST['algo'], hash_algos())){
  2. $hash = hash($_POST['algo'], $_POST['src']);
  3. }
Programowanie obiektowe ma służyć Tobie, a nie Ty mu... jak nie robi nic poza utrudnianiem życia to jest niewarte stosowania.
Rookie
Nie wiedziałem, że są jakieś błędy, mi działa wszystko normalnie, adrian.n, właśnie na tym polega programowanie obiektowe, na klasach...
nospor, wyrozumiałości, mówiłem, że to po jednym dniu nauki, korzystam z bardzo wychwalanej przez ludzi książki PHP i MySQL Vademecum profesjonalisty i tam od razu pokazują var $zmienna, jeśli ową posiadasz, przeczytaj rozdział "obiektowy php". A zaraz zobaczę to wyświetlanie wszystkich błędów
nospor
Cytat
korzystam z bardzo wychwalanej przez ludzi książki PHP i MySQL Vademecum profesjonalisty i tam od razu pokazują var $zmienna
Być moze mowią tam oni o obiektowce w php4. W php5 var $zmienna jest już deprecated.
Poza tym skoro mówią var $zmienna to czemu innym razem piszesz public $zmienna? winksmiley.jpg

Cytat
adrian.n, właśnie na tym polega programowanie obiektowe, na klasach...
No wlasnie nie do konca. To ze uzyles klas, nie znaczy ze uzyles OOP
Rookie
Piszę public $blad, żeby potem poza klasą mógł sprawdzić czy jest pusty czy nie.
To w takim razie kiedy wg ciebie użył bym OOP ?
Dopiero co się zacząłem tego uczyć w wyżej wymienionej książce tylko tak mam wyjaśnione, zamówiłem już inną ale jest w drodze ;p
i przy okazji jak już jesteśmy przy temacie, to czego użyć zamiast var $zmienna, nic? po prostu $zmienna?, a może czegoś innego.
I wreszcie może podpowiesz jak usunąć tą masę błędów?:
Cytat
Notice: Use of undefined constant hash - assumed 'hash' in C:\Documents and Settings\\Moje dokumenty\HTML\Witryna\klasa_hashujaca.php on line 5

Notice: Undefined index: hash in C:\Documents and Settings\\Moje dokumenty\HTML\Witryna\klasa_hashujaca.php on line 5

Notice: Use of undefined constant rodzaj - assumed 'rodzaj' in C:\Documents and Settings\\Moje dokumenty\HTML\Witryna\klasa_hashujaca.php on line 54

Notice: Undefined index: rodzaj in C:\Documents and Settings\\Moje dokumenty\HTML\Witryna\klasa_hashujaca.php on line 54

Notice: Use of undefined constant hashowanie - assumed 'hashowanie' in C:\Documents and Settings\\Moje dokumenty\HTML\Witryna\klasa_hashujaca.php on line 55

Notice: Undefined property: buduj::$stopka in C:\Documents and Settings\\Moje dokumenty\HTML\Witryna\klasa_hashujaca.php on line 83
nospor
Cytat
Piszę public $blad, żeby potem poza klasą sprawdzić czy jest pusty czy nie.
a var $zmienna wg. ciebie nie pozwoli na to? Sprawdź winksmiley.jpg

Cytat
i przy okazji jak już jesteśmy przy temacie, to czego użyć zamiast var $zmienna, nic? po prostu $zmienna?, a może czegoś innego.

public $zmienna - gdy zmienna ma byc publiczna
private $zmienna - gdy zmienna ma byc prywatna
protected $zmienna - gdy zmienna ma byc prywatna, ale dostepna w klasa dziedziczących
$zmienna - gdy chcesz otrzymac ladny PARSE ERROR smile.gif

jesli takich rzeczy nie piszą w Twojej książce to zmień na bardziej aktualną.

Cytat
I wreszcie może podpowiesz jak usunąć tą masę błędów?
No przeciez napisali: uzywasz stalej ktorej nie masz...
nie $_POST[zmienna] a $_POST['zmienna']

Cytat
Notice: Undefined property: buduj::$stopka in C:\Documents and Settings\\Moje dokumenty\HTML\Witryna\klasa_hashujaca.php on line 83
stopka to funkcja wiec nie: $zbuduj->stopka
a: $zbuduj->stopka()

Rookie
Tak, zauważyłem, ze stopką, a co do publicznej przeczytaj dokładnie co napisałem
Cytat
Piszę public $blad, żeby potem poza klasą mógł sprawdzić czy jest pusty czy nie.

A co do różnic pomiędzy $_POST[zmienna] a $_POST['zmienna] to nie wiedziałem, myślałem, że to to samo
nospor
Cytat
Tak, zauważyłem, ze stopką, a co do publicznej przeczytaj dokładnie co napisałem
Przeciez wiem co napisales. To ty przeczytaj dokladnie co ja ci odpisalem tongue.gif
Rookie
No też zrozumiałem i wiem, że var $zmienna na to nie pozwoli, ale ja chcę odczytać tylko zmienną błąd więc tylko ona była public, resztę zmienię z var na private i już, zburzę klasę buduj ;p, skoro ci nie odpowiada, ale napisz dlaczego, dlatego, że nie ma w niej żadnych operacji oprócz wyświetlania? Tylko taki minus mi do głowy wpada ;p
EDIT: A jednak nie, nie mogą być protected ani private bo z zewnątrz nadaję im wartości, ustawiłęm wszystkie na public
nospor
Cytat
No też zrozumiałem i wiem, że var $zmienna na to nie pozwoli,
Miales sprawdzic...jakbys sprawdzil to bys sie dowiedzial ze jednak pozwoli. var $zmienna domyslnie traktowane jest jak public $zmienna.
Jak o coś proszę to rób to, bo się pogniewamy biggrin.gif

poza tym spojrzałem twoje tematy i widze że już ten problem przerabiano z tobą. Nie poto się ludzie tu na forum męczą byś ty przy kolejnych edycjach swojej klasy miał ich porady w czterech literach.

Cytat
zburzę klasę buduj ;p, skoro ci nie odpowiada, ale napisz dlaczego, dlatego
A to juz niech ci wyjasni ktos inny.
Rookie
Wtedy kiedy tamten temat napisałem, to nie zabardzo wszystko kumałem, do wszystkiego dochodzi się powoli, małymi krokami smile.gif
Nie sprawdziłem co do var ale myślałęm, że nie wpuści, sorka ;p.
Skoro już przy temacie jesteśmy to jednak nalegam o wyjaśnienie nowicjuszowi, bo chcę zaraz udostępnić klasę hashującą v2 bez błędów biggrin.gif
Crozin
Cytat
A co do różnic pomiędzy $_POST[zmienna] a $_POST['zmienna] to nie wiedziałem, myślałem, że to to samo
W tym momencie (chociaż i tak wiem, że na 99% zrobisz błąd i nie posłuchasz) powinieneś sobie na kilka dni odpuścić OOP i zająć się postawami PHP, bo ich Ci brakuje.

A żeby nie było, że nie pomagam...
1) Weź sobie inny przykład, bo "klasa hashująca"... nie. Napisz sobie klasę do obsługi wysyłki maili czy pagera (tak mi przyszło do głowy patrząc na sygnaturkę nospora).
2) hash bije Twój kod o głowę
Rookie
Crozin, podstaw mi nie brakuje, poza tą jedną, której już też nie.
A do obsługi maili nie za bardzo bo szperałem po internecie, nawet identyczny problem na tym forum był i nie mogę ustawić serwera pod wysyłkę maili.
Pewnie bym mógł jakbym ściągnął jakiegoś mailera (podawano linki) ale nie chcę tego ściągać dopóki naprawdę maile mi nie będą potrzebne.
Wróciłem na chwilę do domu, zaraz znowu wyjeżdżam, ale tylko szybko przedstawię swój skrypt hashujący. Mam nadzieję, że zajrzy tutaj np. nospor ;p
Mój skrypt nie wyświetla teraz żadnego błędu, sprawdziłęm i wyrzuciłem linijki odpowiadające za wyświetlanie wszystkiego, ale jak ktoś chce sprawdzić mojże je wpisać si się przekonać:
  1. <?php
  2. class hash {
  3. public $hash;
  4. public $rodzaj;
  5. public $blad='';
  6. public function hashuj($zahashuj) {
  7. $rodzaj = $this->rodzaj;
  8. if(in_array($rodzaj, hash_algos())) {
  9. $zahashuj = $this->hash;
  10. $zahashuj = hash($rodzaj, $zahashuj);
  11. return $zahashuj;
  12. } else {
  13. $this->blad = '<span style="color: red;">Nie ma takiego algorytmu hashującego</span><br>';
  14. echo $this->blad;
  15. }
  16. }
  17. public function czy_jest_wpis($pusto, $pusto2) {
  18. $pusto = $this->hash;
  19. $pusto2 = $this->rodzaj;
  20. if(strlen($pusto) < 1 || strlen($pusto2) < 1) {
  21. $this->blad = '<span style="color: red;">Wypełnij pola</span><br>';
  22. echo $this->blad;
  23. }
  24. }
  25. }
  26. $tablica = hash_algos();
  27. ?>
  28. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  29. <html>
  30. <head>
  31. <title>Hashowanie</title>
  32. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
  33. <style type="text/css">body {font-size: 12; font-family: Arial;} .formularz {width: 200px;} .wybor {width: 204px;}</style>
  34. </head>
  35. <body>
  36. <?php
  37. if (isset($_POST['hashowanie'])) {
  38. $anty_xss_hash = htmlspecialchars(trim($_POST['hash']));
  39. $hashuj = new hash();
  40. $hashuj->hash = $anty_xss_hash;
  41. $hashuj->rodzaj = $_POST['rodzaj'];
  42. $hashuj->czy_jest_wpis($anty_xss_hash, $_POST['rodzaj']);
  43. if($hashuj->blad=='') {
  44. echo '<table><tr><td align="right">Wpisana fraza:</td><td><b>';
  45. echo $anty_xss_hash;
  46. echo '</b></td></tr><tr><td>Zahashowane ';
  47. echo $_POST['rodzaj'];
  48. echo ':</td><td><b>';
  49. echo $hashuj->hashuj($anty_xss_hash);
  50. echo '</b></td></tr></table>';
  51. }
  52. }
  53. ?>
  54. <form action="klasa_hashujaca.php" method="POST">
  55. <table><tr><td>Wybierz algorytm hashujący:</td>
  56. <td><select name="rodzaj" class="wybor">
  57. <option value="">Wybierz</option>
  58. <?php
  59. foreach ($tablica as $wyswietl){
  60. if (isset($_POST['rodzaj'])) $zaznaczone = ($_POST['rodzaj'] == $wyswietl) ? ' selected' : '';
  61. else $zaznaczone = '';
  62. echo "<option$zaznaczone>$wyswietl</option>\r\n";
  63. }
  64. ?>
  65. </select></td></tr><tr><td>Wpisz frazę do zahashowania:</td>
  66. <td><input class="formularz" type="text" name="hash" value=""></td></tr>
  67. <tr><td colspan="2"><input name="hashowanie" type="submit" value="Hashuj"></td></tr>
  68. </form>
  69. </body>
  70. </html>
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.