Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: przeniesienie kodu do klasy
Forum PHP.pl > Forum > PHP > Object-oriented programming
MitS
Witam!

od 2 dni mecze sie z przeniesieniem pewnej czesci kodu do klasy.
Moja strona:

index.php
http://rafb.net/p/bdcEHo79.html

class.Auth.php
http://rafb.net/p/xEAIMk34.html

i zadaniem tej strony jest rejestracja nowcyh userow do bazy danych...
To elegancko dziala!!

ale ... ten kod z index.php:
  1. <?php
  2. $login = htmlspecialchars(stripslashes(trim($_POST['login'])), ENT_QUOTES);
  3. $haslo = htmlspecialchars(stripslashes(trim($_POST['haslo'])), ENT_QUOTES);
  4. $rehaslo = htmlspecialchars(stripslashes(trim($_POST['rehaslo'])), ENT_QUOTES);
  5. $email = htmlspecialchars(stripslashes(trim($_POST['email'])), ENT_QUOTES);
  6. $imie = htmlspecialchars(stripslashes(trim($_POST['imie'])), ENT_QUOTES);
  7.  
  8. $opcja = trim($_REQUEST['opcja']);
  9. $blad = 0;
  10. if ($opcja == 'register'){
  11. if ((strlen($login)<4) || (strlen($login)>20) || (!eregi('^[a-zA-Z0-9_.]+$',$login))) { 
  12. $blad++;
  13. echo 'Login musi mieć od 4 do 20 znaków bez polskich liter i spacji!<br />';
  14. } 
  15. else {
  16. if ($baza = mysql_connect($db_host, $db_user, $db_password)) {
  17. if (mysql_select_db($db_name)) {
  18. $wynik=mysql_query("SELECT * FROM $d_section WHERE login='$login'");
  19. } 
  20. else 
  21. echo "Nie można połączyć się z bazą";
  22.  mysql_close($baza);
  23. } 
  24. else 
  25. echo "Nie można połączyć się z serwerem MySQL";
  26.  
  27. if (mysql_num_rows($wynik) != 0) { 
  28.  $blad++;
  29.  echo "Login już został przez kogoś użyty!. Zaproponuj inny!<br />";
  30. }
  31. }
  32.  
  33. if ((strlen($haslo)<6) || (strlen($haslo)>20) || (!eregi("^[a-zA-Z0-9]+$",$haslo))) { 
  34. $blad++;
  35. echo "Hasło musi mieć od 6 do 20 znaków bez polskich liter i spacji!<br />";
  36. }
  37.  
  38. if ($haslo != $rehaslo) {
  39. $blad++;
  40. echo 'Złe powtórzone hasło!!!';
  41. }
  42.  
  43. if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+.)+[a-z]{2,4}$", $email)) { 
  44. $blad++;
  45. echo "E-mail nie został podany prawidłowo!<br />";
  46. }
  47. else{
  48. if ($baza = mysql_connect($db_host, $db_user, $db_password)) {
  49. if (mysql_select_db($db_name)) {
  50. $wynik=mysql_query("SELECT * FROM $d_section WHERE email='$email'");
  51. } 
  52. else 
  53. echo "Nie można połączyć się z bazą";
  54.  
  55.  mysql_close($baza);
  56. } 
  57. else 
  58.  echo "Nie można połączyć się z serwerem MySQL";
  59.  
  60. if (mysql_num_rows($wynik) != 0) { 
  61.  $blad++;
  62.  echo "E-mail już został przez kogoś użyty!. Zaproponuj inny!<br />";
  63. }
  64. }
  65. }
  66. ?>


... chcialbym przenieśc do funkcji w klasie Auth
Więc probowalem tak:

index.php
  1. <?php
  2. define('SITE_PATH", 'http://localhost/piaskownica/');
  3. define('MAIL_PATH', 'mail@mail.com');
  4.  
  5. $db_host  = 'localhost';
  6. $db_user  = 'root';
  7. $db_password  = '';
  8. $db_name  = 'piaskownica';
  9. $d_section = 'logowanie';
  10.  
  11. include("class.Auth.php");
  12. echo '
  13. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  14. <html xmlns="http://www.w3.org/1999/xhtml">
  15. <head>
  16. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  17. <script src="./js/scripts.js" type="text/javascript"></script>
  18. <style type="text/css" title="currentStyle" media="screen">
  19. @import "./css/site.css";
  20. </style>
  21. <title>Piaskownica</title>
  22. </head>
  23. <body xml:lang="pl">';
  24. $signin = new Auth($db_host, $db_user, $db_password, $db_name, $d_section, $login, $haslo, $email, $imie, $blad);
  25.  
  26. $authorize = $signin->init();
  27. echo '
  28. <form action="index.php" method="post" autocomplete="OFF">
  29. <input type="hidden" name="opcja" value="register" />
  30. login:*<input type="text" name="login" value="'.$login.'" /><br />
  31. hasło:*<input type="password" name="haslo" value="" /><br />
  32. powtorz hasło:*<input type="password" name="rehaslo" value="" /><br />
  33. e-mail:*<input type="text" name="email" value="'.$email.'" /><br />
  34. imie i nazwisko:<input type="text" name="imie" value="'.$imie.'" /><br />
  35. <input type="submit" value=" OK, rejestruję się!" />
  36. </form>';
  37.  
  38. echo '
  39. </body>
  40. </html>';
  41. ?>


class.Auth.php
http://rafb.net/p/9YczBS71.html

Czemu to co ja robie nie dziala wlasciwie questionmark.gif?
pomozecie mi to poprawnie zrobić (na tyle by dzialalo) questionmark.gif

Pozdrawiam


ps. kurde czemu po edycji topicu wszystkie " " zamieniaja mi sie na \" \" questionmark.gif
Strzałek
Nie, nie, nie, nie i jeszcze raz ... NIE!

Nie o to w tym wszystkim chodzi.
Programowanie strukturalnie, a programowanie obiektowe to dwie różne bajki i nie można w 5 minut przerzucić kodu strukturalnego do klasy. Zrobić z f-cji metody, nazwać to jakoś i siup! Huraaa mamy kod obiektowy! Bo zamiast mojaFunkcja() wywołujemy, $SuperKlasa -> mojaFunkcja();

Programowanie obiektowe (OOP) wymaga innego myślenia i całkowicie innego spojrzenia na programowanie.

Trudno jest to wytłumaczyć (przynajmniej mi). Jednak po pewnym czasie to zrozumiesz. Po przeglądaj klasy, frameworki (wszystkie są pisane obiektowo) i w pewnym momencie rozumiesz. Dla mnie to też kiedyś była czarna magia i w sumie nikt mi tego nie tłumaczył. Samo jakoś wyszło w praniu, o co w tym biega.
MitS
yhy rozumiem ... :/
no spoko... mam nadzieje ze szybko mi wejdzie obiektowe pisanie w krew winksmiley.jpg
DeyV
Taki kod mógłby wyglądać np. tak:
  1. <?php
  2. class DB{
  3.  protected $sLogin ='';
  4.  protected $sHaslo = '';
  5.  
  6.  static function newDb(){
  7. if( empty( self::$Db ) ){
  8.  self::$Db = new DB();
  9.  self::$Db->connect();
  10. }
  11. return self::$Db;
  12.  }
  13.  
  14.  private function connect(){ }
  15.  private function __construct(){ }
  16. }
  17.  
  18. class UserModel{
  19. private $Db;
  20.  
  21. function __construct(){
  22. $this->Db = DB::newDb();
  23. }
  24.  
  25. function register( $sLogin, $sHaslo, $sMail ){
  26. if( empty( $sLogin ) ){
  27. throw new InvalidArgumentException( 'Podaj login' );
  28. }
  29.  
  30. $this->Db->Insert( /*... */);
  31. return true;
  32. }
  33. }
  34. ?>
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.