Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Problem z rejestracją użytkowników.
Forum PHP.pl > Forum > Przedszkole
maxil
Witam wszystkich mam problem z rejestracją użytkowników.
Napisałem sobie prosty kod rejestracji użytkowników.
Dane są przechowywane w bazie SQL.

A oto kod który napisałem:

  1. $password1 = (isset($_POST['haslo'])) ? $_POST['haslo'] : '';
  2. $password2 = (isset($_POST['hasloreplay'])) ? $_POST['hasloreplay'] : '';
  3. $password = ($password1 && $password1 == $password2) ?
  4. sha1($password1) : '';
  5.  
  6. $captcha = (isset($_POST['captcha']) && strtoupper($_POST['captcha']) == $_SESSION['captcha']);
  7.  
  8. if ($password &&
  9. $captha &&
  10. User::validateUsername($_POST['login']) &&
  11. User::validateEmailAddr($_POST['mail']) &&
  12. $_POST['login'] &&
  13. $_POST['mail'] &&
  14. $_POST['regulamin'] &&
  15. $_POST['dane'])
  16. {
  17. $user = User::getByUsername($_POST['login']);
  18. if ($user->userId)
  19. {
  20. echo '<center><b>Przepraszamy, podana nazwa użytkownika już jest w użyciu.</b><br>
  21. Prosimy podać inną nazwę użytkownika.</center>';
  22. }
  23. else
  24. {
  25. $data_urodzenia = $_POST['dd'].'-'.$_POST['mm'].'-'.$_POST['rrrr'];
  26. $u = new User();
  27. $u->username = $_POST['login'];
  28. $u->haslo = $password;
  29. $u->mail = $_POST['mail'];
  30. $u->imie = $_POST['imie'];
  31. $u->nazwisko = $_POST['nazwisko'];
  32. $u->miejscowosc = $_POST['miejscowosc'];
  33. $u->data_urodzenia = $data_urodzenia;
  34. $u->pseudonim = $_POST['pseudo'];
  35. $u->hide_mail = $_POST['r'];
  36. $u->numer_gg = $_POST['gg'];
  37. $u->skype = $_POST['skype'];
  38. $u->podpis = $_POST['podpis'];
  39. $token = $u->setInactive();
  40. $mail = sendMailRegistred($_POST['mail'], $token);
  41.  
  42. if (!$mail)
  43. {
  44. echo '<center><b>Rejestracja nie została zakończona!.</b><br>
  45. Wystąpił błąd podczas wysyłania e-maila z kodem aktywującym.<br>
  46. Skontaktuj się z administratorem aby uzyskać niezbędne informacje na temat aktywowania swojego konta!</center>';
  47. }
  48. else
  49. {
  50. echo '<center><b>Dziękujemy za zarejestrowanie się w naszym serwisie.</b><br>
  51. Odbierz swoją poczte aby uzyskać informacje na temat aktywacji swojego konta.</center>';
  52. }
  53. }
  54. }
  55. else
  56. {
  57. echo '<center><strong><b>Podano nieprawidłowe dane.</b></strong><br>
  58. Prosimy prawidłowo wypełnić wszystkie pola, abyśmy mogli zarejestrować konto użytkownika.</center>';
  59. }


Mój problem polega na tym, że gdy wypełniam formularz rejestracyjny to zawsze wywali mi że dane są nieprawidłowe.
Męczę się już z tym trochę ale bez żadnych rezultatów.
Mam nadzieję że ktoś mi pomoże rozwiązać mój problem.

Z góry dzięki.
darko
Pokaż całą klasę User (zwłaszcza statyczne metody: validateUsername, validateEmailAddr oraz getByUsername) i funkcję sendMailRegistred (po angielsku powinno być sendRegisteredEmail). Kilka uwag:
1. stosuj jednak instrukcje if, jak widać sam się gubisz w ternariuszach
2. nie podobają mi się linie 17. i 18 (bo nie znam implementacji klasy User):
$user = User::getByUsername($_POST['login']);
if ($user->userId)
nigdzie nie tworzysz instancji obiektu User, korzystasz z metod statycznych, a w linii 18. próbujesz pobrać (magicznym getterem?) wartość pola userId (chyba, że nie pokazujesz całego kodu i gdzieś wcześniej jest $user = new User(); questionmark.gif ) chyba, że jeszcze inaczej: metoda getByUsername zwraca instancję anonimowej klasy - stdClass, dlatego proszę podaj kod klasy User, bo trzeba wróżyć z fusów...
3. pokaż jeszcze formularz rejestracyjny, tak dla pewności
maxil
oto moja klasa user:

  1. <?php
  2. include('db.php');
  3. class User
  4. {
  5. private $uid;
  6. private $fields;
  7.  
  8. public function __construct()
  9. {
  10. $this->uid = null;
  11. $this->fields = array('login' => '',
  12. 'haslo' => '',
  13. 'pozycja' => false,
  14. 'mail' => '',
  15. 'imie' => '',
  16. 'nazwisko' => '',
  17. 'miejscowosc' => '',
  18. 'data_urodzenia' => '',
  19. 'pseudonim' => '',
  20. 'hide_mail' => '',
  21. 'numer_gg' => '',
  22. 'skype' => '',
  23. 'podpis' => '',
  24. 'active' => false);
  25. }
  26.  
  27. public function __get($field)
  28. {
  29. if ($field == 'userId')
  30. {
  31. return $this->uid;
  32. }
  33. else
  34. {
  35. return $this->fields[$field];
  36. }
  37. }
  38.  
  39. public function __set($field, $value)
  40. {
  41. if (array_key_exists($field, $this->fields))
  42. {
  43. $this->field[$field] = $value;
  44. }
  45. }
  46.  
  47. public static function validateUsername($username)
  48. {
  49. return preg_match('/^[A-Z0-9]{2,20}$/i', $username);
  50. }
  51.  
  52. public static function validateEmailAddr($email)
  53. {
  54. return filter_var($email, FILTER_VALIDATE_EMAIL);
  55. }
  56.  
  57. public static function getById($uid)
  58. {
  59.  
  60. $u = new User();
  61. $query = sprintf('SELECT * FROM %susers WHERE id = %d', DB_TBL_PREFIX, $uid);
  62. $result = mysql_query($query, $GLOBALS['DB']);
  63.  
  64. if (mysql_num_rows($result))
  65. {
  66. $row = mysql_fetch_array($result);
  67. $u->login = $row['login'];
  68. $u->haslo = $row['haslo'];
  69. $u->pozycja = $row['pozycja'];
  70. $u->mail = $row['mail'];
  71. $u->imie = $row['imie'];
  72. $u->nazwisko = $row['nazwisko'];
  73. $u->miejscowosc = $row['miejscowosc'];
  74. $u->data_ur = $row['data_urodzenia'];
  75. $u->pseudo = $row['pseudonim'];
  76. $u->hide_mail = $row['hide_mail'];
  77. $u->numer_gg = $row['numer_gg'];
  78. $u->skype = $row['skype'];
  79. $u->podpis = $row['podpis'];
  80. $u->act_code = $row['activation_code'];
  81. $u->active = $row['active'];
  82. $u->uid = $uid;
  83. }
  84.  
  85. return $u;
  86. }
  87.  
  88. public static function getByUsername($username)
  89. {
  90. $u = new User();
  91. $query = sprintf('SELECT * FROM %susers WHERE login = "%s"', DB_TBL_PREFIX,
  92. mysql_real_escape_string($username, $GLOBALS['DB']));
  93. $result = mysql_query($query, $GLOBALS['DB']);
  94.  
  95. if (mysql_num_rows($result))
  96. {
  97. $row = mysql_fetch_array($result);
  98. $u->login = $username;
  99. $u->haslo = $row['haslo'];
  100. $u->pozycja = $row['pozycja'];
  101. $u->mail = $row['mail'];
  102. $u->imie = $row['imie'];
  103. $u->nazwisko = $row['nazwisko'];
  104. $u->miejscowosc = $row['miejscowosc'];
  105. $u->data_ur = $row['data_urodzenia'];
  106. $u->pseudo = $row['pseudonim'];
  107. $u->hide_mail = $row['hide_mail'];
  108. $u->numer_gg = $row['numer_gg'];
  109. $u->skype = $row['skype'];
  110. $u->podpis = $row['podpis'];
  111. $u->act_code = $row['activation_code'];
  112. $u->active = $row['active'];
  113. $u->uid = $row['id'];
  114. }
  115.  
  116. return $u;
  117. }


oraz dalsza część:

  1. public function save()
  2. {
  3. if ($this->uid)
  4. {
  5. $query = sprintf('UPDATE strona_user set login = "%s", haslo = "%s", mail = "%s", imie = "%s", nazwisko = "%s", miejscowosc = "%s" ' .
  6. 'data_urodzenia = "%s", pseudonim = "%s", hide_mail = "%s", numer_gg = "%s", skype = "%s", podpis = "%s", active = %d WHERE id = %d',
  7. db_TBL_PREFIX,
  8. mysql_real_escape_string($this->login),
  9. mysql_real_escape_string($this->haslo),
  10. mysql_real_escape_string($this->nazwisko),
  11. mysql_real_escape_string($this->miejscowosc),
  12. mysql_real_escape_string($this->data_urodzenia),
  13. mysql_real_escape_string($this->pseudonim),
  14. mysql_real_escape_string($this->hide_mail),
  15. mysql_real_escape_string($this->numer_gg),
  16. mysql_real_escape_string($this->skype),
  17. mysql_real_escape_string($this->podpis),
  18. $this->isActive, $this->userId);
  19. mysql_query($query, $GLOBALS['DB']);
  20. }
  21. else
  22. {
  23. $query = sprintf('INSERT INTO %susers (login, haslo, pozycja, mail, imie, nazwisko, miejscowosc, data_urodzenia, pseudonim, ' .
  24. 'hide_mail, numer_gg, skype, podpis, active) VALUES ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", %d)',
  25. DB_TBL_PREFIX,
  26. mysql_real_escape_string($this->login),
  27. mysql_real_escape_string($this->haslo),
  28. mysql_real_escape_string($this->pozycja),
  29. mysql_real_escape_string($this->nazwisko),
  30. mysql_real_escape_string($this->miejscowosc),
  31. mysql_real_escape_string($this->data_urodzenia),
  32. mysql_real_escape_string($this->pseudonim),
  33. mysql_real_escape_string($this->hide_mail),
  34. mysql_real_escape_string($this->numer_gg),
  35. mysql_real_escape_string($this->skype),
  36. mysql_real_escape_string($this->podpis),
  37. $this->isActive);
  38.  
  39. mysql_query($query, $GLOBALS['DB']);
  40.  
  41. $this->uid = mysql_insert_id($GLOBALS['DB']);
  42. }
  43. }
  44.  
  45. public function byMaxil($uid)
  46. {
  47. if ($this->isActive)
  48. {
  49. $query = sprintf('UPDATE %susers SET active = "1" WHERE id = %d', DB_TBL_PREFIX, $uid);
  50. mysql_query($query, $GLOBALS['DB']);
  51. }
  52. }
  53.  
  54. public function setInactive()
  55. {
  56. $this->isActive = false;
  57. $this->save();
  58.  
  59. $token = random_text(30);
  60. $query = sprintf('INSERT INTO %spending (user_id, token) ' .
  61. 'VALUES ($d, "$s")', DB_TBL_PREFIX, $this->uid, $token);
  62. mysql_query($query, $GLOBALS['DB']);
  63.  
  64. return $token;
  65. }
  66.  
  67. public function setActive($token)
  68. {
  69. $query = sprintf('SELECT token FROM %spending WHERE user_id = %d ' .
  70. 'AND token = "%s"', DB_TBL_PREFIX,
  71. $this->uid,
  72. $result = mysql_query($query, $GLOBALS['DB']);
  73.  
  74. if (!mysql_num_rows($result))
  75. {
  76. return false;
  77. }
  78. else
  79. {
  80. $query = sprintf('DELETE FROM %Spending WHERE user_id = %d ' .
  81. 'AND token = "%s"', DB_TBL_PREFIX,
  82. $this->uid,
  83. mysql_query($query, $GLOBALS['DB']);
  84.  
  85. $this->isActive = true;
  86. $this->byMaxil($thid->uid);
  87. return true;
  88. }
  89. }
  90. }
  91. ?>


a to formularz rejestracyjny:

  1. echo '<form method="post">Aby zarejestrować się w naszym serwisie należy wypełnić pola poniżej!</center><br><br>
  2. <table align="center">
  3. <tr>
  4. <td align="right">Login: <font color="red">*</font></td><td><input type="text" name="login" value="'.$_SESSION['a'].'" class="input"></td>
  5. </tr>
  6. <tr>
  7. <td align="right">Hasło: <font color="red">*</font></td><td><input type="password" name="haslo" class="input"></td>
  8. </tr>
  9. <tr>
  10. <td align="right">Powtórz Hasło: <font color="red">*</font></td><td><input type="password" name="hasloreplay" class="input"></td>
  11. </tr>
  12. <tr>
  13. <td align="right">Adres e-mail: <font color="red">*</font></td><td><input type="text" name="mail" value="'.$_SESSION['b'].'" class="input"></td>
  14. </tr>
  15. </table>
  16. <hr width="100%">
  17. <table align="center">
  18. <tr>
  19. <td align="right">Imie:</td><td><input type="text" name="imie" value="'.$_SESSION['c'].'" class="input"></td>
  20. </tr>
  21. <tr>
  22. <td align="right">Nazwisko:</td><td><input type="text" name="nazwisko" value="'.$_SESSION['d'].'" class="input"></td>
  23. </tr>
  24. <tr>
  25. <td align="right">Miejscowość:</td><td><input type="text" name="adres" value="'.$_SESSION['n'].'" class="input"></td>
  26. </tr>
  27. </table><center>
  28. Data urodzenia: <select name="dzien">';
  29. for ($i=0; $i<31; $i++) {
  30. $id = $i + 1;
  31. echo '<option value="'.$id.'"'; if($_SESSION['e'] == $id) {echo ' selected="selected"';} echo '>'.$id.'</option>';
  32. }
  33. echo '</select>-<select name="mc">';
  34. for ($i=0; $i<12; $i++) {
  35. $im = $i + 1;
  36. echo '<option value="'.$im.'"'; if($_SESSION['f'] == $im) {echo ' selected="selected"';} echo '>'.$im.'</option>';
  37. }
  38. echo '</select>-<select name="rok">';
  39. $s = date("Y") - 9;
  40. for ($i=1960; $i<$s; $i++) {
  41. echo '<option value="'.$i.'"'; if($_SESSION['g'] == $i) {echo ' selected="selected"';} echo '>'.$i.'</option>';
  42. }
  43. echo '</select> (dd-mm-rrrr)</center>
  44. <table align="center">
  45. <tr>
  46. <td align="right">Pseudonim:</td><td><input type="text" name="pseudo" value="'.$_SESSION['h'].'" class="input"></td>
  47. </tr>
  48. <tr>
  49. <td align="right">Ukryć E-Mail?:</td><td><input type="radio" name="r" value="Tak"'; if ($_SESSION['i'] == "Tak") {echo 'checked="checked"';} echo '>Tak
  50. <input type="radio" name="r" value="Nie"'; if ($_SESSION['i'] == "Nie") {echo 'checked="checked"';} else if (empty($_SESSION['i'])) {echo 'checked="checked"';} echo '>Nie</td>
  51. </tr>
  52. <tr>
  53. <td align="right">Numer GG:</td><td><input type="text" name="gg" value="'.$_SESSION['j'].'" class="input"></td>
  54. </tr>
  55. <tr>
  56. <td align="right">Skype:</td><td><input type="text" name="skype" value="'.$_SESSION['k'].'" class="input"></td>
  57. </tr>
  58. </table>
  59. <center>Podpis:<br>
  60. <textarea name="podpis" cols="30" rows="5">'.$_SESSION['m'].'</textarea><br>
  61. <hr width="100%">
  62. Przepisz kod widoczny na obrazku
  63. <table align="center">
  64. <tr>
  65. <td><img src="images/captcha.php" id="cap"></td><td><input type="text" name="captcha" class="input"> <font color="red">*</font>
  66. <input type="hidden" name="register" value="1"></td>
  67. </tr>
  68. </table>
  69. <hr width="100%">
  70. <table align="center">
  71. <tr>
  72. <td><input type="checkbox" name="regulamin" value="akceptuje"></td><td><small>Zapoznałem(am) się z <a href="?uid=regulamin">regulaminem</a> i akceptuję jego postanowienia.</small></td>
  73. </tr>
  74. <tr>
  75. <td><input type="checkbox" name="dane" value="wyrazam"></td><td><small>Wyrażam zgode na przetwarzanie moich danych osobowych<sup>1</sup>.</td>
  76. </tr>
  77. </table>
  78. <hr width="100%">
  79. <br>
  80. <input type="image" name="submit" src="images/button_wyslij.jpg">
  81. </form>';
nospor
No trochę własnej inwencji...

Cytat
to zawsze wywali mi że dane są nieprawidłowe.
Skoro ci wyswietla ten blad, znaczy ze ten warunek:
if ($password &&
$captha &&
User::validateUsername($_POST['login']) &&
User::validateEmailAddr($_POST['mail']) &&
$_POST['login'] &&
$_POST['mail'] &&
$_POST['regulamin'] &&
$_POST['dane'])
Nie jest spełniony.
Usiądź sobie teraz wygodnie i sprawdź każdą z tych składowych a dowiesz się która z nich jest nie prawdziwa. Jak już będziesz wiedział która z nich nawala, to będziesz wiedział gdzie masz szukać błedu. Trudne?
maxil
i jeszcze funkcja wysyłająca email:

  1. function sendMailRegistred($mail, $token)
  2. {
  3. $to = $mail;
  4. $subject = 'Aktywacja konta na ******.pl';
  5. $message = 'Dziękujemy za rejestracje w naszym serwisie.
  6.  
  7. Jeśli nie rejestrowałeś się w naszym serwisie po prostu zignoruj tą wiadomość!
  8.  
  9. Twoje konto nie jest jeszcze w pełni aktywne, aby je aktywować kliknij na link poniżej:
  10.  
  11. ___________________________________________
  12. <a href="http://www.*******.pl/index.php?uid=verify&method=automatic&code='.$token.'" target="_blank">http://www.*******.pl/index.php?uid=verify...036;token.'</a>
  13. ___________________________________________
  14.  
  15. Jeśli powyższy link nie działa możesz aktywacji dokonać ręcznie wchodząc na stronę:
  16.  
  17. ___________________________________________
  18. <a href="http://www.*******.pl/index.php?uid=verify&method=manual" target="_blank">http://www.*******.pl/index.php?uid=verify&method=manual</a>
  19. ___________________________________________
  20.  
  21. A następnie w pole wpisać ten kod:
  22.  
  23. ___________________________________________
  24. '.$token.'
  25. ___________________________________________
  26.  
  27. Pozdrawiamy';
  28. $from = '*********.pl';
  29.  
  30. $naglowki = "From: $from".PHP_EOL."Reply-To: $to".PHP_EOL."Content-type: text/plain; charset=iso-8859-2";
  31.  
  32. $submit = mail($mail, $subject, $message, $naglowki);
  33.  
  34. if (!$submit)
  35. {
  36. return false;
  37. }
  38. else
  39. {
  40. return true;
  41. }
  42. }
darko
Czy nie jest tak, że w metodach getByUsername oraz getById pomyliłeś mysql_fetch_array z mysql_fetch_object ? Mam wątpliwości czy w metodzie validateUsername jest poprawne wyrażanie regularne. Linia 6. - jesteś pewien, że wcześniej zapisałeś cokolwiek do $_SESSION['captcha'] ?
maxil
dobra problem z niespełnionym warunkiem if rozwiązany.
a teraz jeszcze jeden problem.
dlaczego podczas rejestracji funkcja save() w klasie nic nie dodaje do bazy znaczy dodaje jest nowy rekord ale jest pusty żadnych danych w nim nie ma.
dlaczego?
powiem wam że pierwszy raz używam klasy i nie znam tej metody za bardzo.
darko
$this->isActive to boolean, nie wiem czy jak sformatujesz go %d dla sprintf to automatycznie zostanie skonwertowany na 1 lub 0 ?
W którym miejscu był wcześniej błąd w warunku ? Dlaczego raz korzystasz z DB_TBL_PREFIX,, a raz z db_TBL_PREFIX = czy to na pewno ma się znaleźć w zapytaniu?
maxil
przedtem problem tkwił w captcha.
dokładnie w pliku generującym go, nie tworzył sesji w której miał być zapisywany aktualny kod z obrazka.

a tym db_TBL_PREFIX
to akurat mój błąd.
niedociśnięty shift
widzę że dokładnie przeanalizowałeś mój kod. za to na pewno poleci +
darko
Chyba wiem, dodaje puste wartości dlatego, że
$this->login
$this->haslo
i cała reszta nie istnieje, zobacz mój post kilka "pięter" wyżej - wyciągasz dane za pomocą mysql_fetch_array, a przypisujesz je jakbyś korzystał z mysql_fetch_object (i stdClass). Zmień to albo dodaj odpowiednie pola do klasy User albo zamiast $this->login stosuj $this->fields['login'] (w zapisie i odczycie danych).
Kruq
Cytat(maxil @ 21.12.2009, 12:28:08 ) *
dobra problem z niespełnionym warunkiem if rozwiązany.


to napisz rozwiązanie , wiesz .. zawsze jakaś pomoc dla potomnych ...
nospor
Cytat
to napisz rozwiązanie , wiesz .. zawsze jakaś pomoc dla potomnych ...
Nawet jak napisze to znajdzie sie taki ktos jak ty i nie będzie potrafił tego przeczytać tongue.gif

ps: jak nie zrozumiales aluzji: rozwiązanie przecież juz podał.
maxil
no to czyli jak? mam utworzyć te zmienne przez:
var $login;
var $haslo;
[...]
darko
var $login to kilka lat temu, raczej protected $login; itd. Wszystko opisałem już w poście wyżej.
maxil
pokażcie mi na przykładzie jak ro zrobić, bo siedzę nad tym od rana i nic mi nie wychodzi ;/

może mi to nie działać poprawnie z powodu że mam zainstalowany na serwerze PHP5?
darko
1.
2.
3.
Zwłaszcza numer 2. winksmiley.jpg
maxil
Cytat(darko @ 21.12.2009, 21:49:31 ) *
1.
2.
3.
Zwłaszcza numer 2. winksmiley.jpg


ale po co mam używać mysql_fetch_object jak mysql_fetch_array działa jak należy
darko
sciana.gif angrysmiley.gif
Nie potrafisz korzystać z mysql_fetch_array, dowód ? Metoda getByUsername linia 98. Dane należy w tym wypadku wyciągać za pomocą pętli while, zajrzyj chociaż do manuala.
Wytłumacz mi co oznacza ten zapis (linia 99) $u->login = $username; ? Do czego przypisujesz tutaj wartość parametru $username ? Masz gdzieś pole login w klasie User? Nie widzę. Jaka jest różnica pomiędzy $u->username a $u->fields['username'] ? Albo $this->username a $this->fields['username'] ? Jaka jest różnica pomiędzy mysql_fetch_object a mysql_fetch_array ? Zajrzałeś przynajmniej do przykładów w tych linkach, które podałem ? Tak na prawdę ja juz Ci odpowiedziałem na wszystkie pytania w poście #10
maxil
Cytat(darko @ 22.12.2009, 02:11:59 ) *
sciana.gif angrysmiley.gif
Nie potrafisz korzystać z mysql_fetch_array, dowód ? Metoda getByUsername linia 98. Dane należy w tym wypadku wyciągać za pomocą pętli while, zajrzyj chociaż do manuala.
Wytłumacz mi co oznacza ten zapis (linia 99) $u->login = $username; ? Do czego przypisujesz tutaj wartość parametru $username ? Masz gdzieś pole login w klasie User? Nie widzę. Jaka jest różnica pomiędzy $u->username a $u->fields['username'] ? Albo $this->username a $this->fields['username'] ? Jaka jest różnica pomiędzy mysql_fetch_object a mysql_fetch_array ? Zajrzałeś przynajmniej do przykładów w tych linkach, które podałem ? Tak na prawdę ja juz Ci odpowiedziałem na wszystkie pytania w poście #10


a może jednak potrafię dowód? funkcja getByUsername działa bez zarzutu wyciąga wszystkie wymagane dane. mówisz pętla while tak? ale po co ona jak ja wyciągam dane tylko jednego użytkownika a nie wszystkich więc pętla jest w tym wypadku zbędna

chcesz wiedzieć co oznacza linia 99 już mówię
do $u->login jest zapisywany nick użytkownika na podstawie którego jest wyciągane wszystko z bazy dowód?

public static function getByUsername($username)
darko
Luz, jakoś nie zauważyłem magicznego settera i gettera. Szukamy dalej. Mój błąd smile.gif
Masz spie#@&ony setter, zabrakło s w $this->field[$field] = $value;
Powinno być:
  1. public function __set($field, $value)
  2. {
  3. if (array_key_exists($field, $this->fields))
  4. {
  5. $this->fields[$field] = $value;
  6. }
  7. }

Powinno śmigać
maxil
problem jest tylko z funkcją save() nie wiem dlaczego ona dodaje puste rekordy reszta działa bez zarzutu
darko
poprawiłeś ten setter jak pisałem w ostatnim poście?
maxil
setter poprawiłem tak jak pisałeś ale nadal nic sciana.gif
darko
Sprawdziłem ten kod, u mnie po odpowiednich modyfikacjach i poprawieniu settera generuje prawie poprawne składniowo zapytanie sql, brakuje tylko wartości pola login. Pokaż zapytanie, jakie generuje metoda save (i strukturę tabeli). Spróbuj może uprościć generowanie tego zapytania, zrezygnowałbym ze stosowania printf dla przejrzystości:

  1. public function save()
  2. {
  3. // (...)
  4. $query = "INSERT INTO ".DB_TBL_PREFIX.".users (login, haslo, pozycja, mail, imie, nazwisko, miejscowosc, data_urodzenia, pseudonim, " .
  5. "hide_mail, numer_gg, skype, podpis, active) VALUES ('".
  6. mysql_real_escape_string($this->username)."','".
  7. mysql_real_escape_string($this->haslo)."','".
  8. mysql_real_escape_string($this->pozycja)."','".
  9. mysql_real_escape_string($this->mail)."','".
  10. mysql_real_escape_string($this->imie)."','".
  11. mysql_real_escape_string($this->nazwisko)."','".
  12. mysql_real_escape_string($this->miejscowosc)."','".
  13. mysql_real_escape_string($this->data_urodzenia)."','".
  14. mysql_real_escape_string($this->pseudonim)."','".
  15. mysql_real_escape_string($this->hide_mail)."','".
  16. mysql_real_escape_string($this->numer_gg)."','".
  17. mysql_real_escape_string($this->skype)."','".
  18. mysql_real_escape_string($this->podpis)."'";
  19. if($this->isActive) {
  20. $query.=",'1'";
  21. }
  22. else {
  23. $query.=",'0'";
  24. }
  25. $query.=")";
  26. // (...)
  27. }
  28. // (...)
  29. // i wywołanie:
  30. $u = new User();
  31. $u->username = "login";
  32. $u->haslo = "pwd";
  33. $u->mail = 'mail';
  34. $u->imie = 'imie';
  35. $u->nazwisko = 'nazwisko';
  36. $u->miejscowosc = 'miejscowosc';
  37. $u->data_urodzenia = "43.23.1234";
  38. $u->pseudonim = 'pseudo';
  39. $u->hide_mail = 'r';
  40. $u->numer_gg = 'gg';
  41. $u->skype = 'skype';
  42. $u->podpis = 'podpis';
  43. $u->pozycja = 'programista php';
  44. $token = $u->setInactive();
  45. //
  46. // wywala:
  47. INSERT INTO DB_TBL_PREFIX.users (login, haslo, pozycja, mail, imie, nazwisko, miejscowosc, data_urodzenia, pseudonim, hide_mail, numer_gg, skype, podpis, active) VALUES ('','pwd','programista php','mail','imie','nazwisko','miejscowosc','43.23.1234','pseudo','r','gg','skype','podpis','0')
maxil
no nareszcie działa laugh.gif

darko dla ciebie 3 plusiki
1 - za dokładną analizę mojego kodu
2 - za zaangażowanie
3 - za pomoc

mam jeszcze jedno małe pytanko.
Dlaczego dołączenie takiego kodu sprawia że strona nie jest wyświetlana (biała strona)

kod:

  1. <?php
  2. define('IS_ENV_PRODUCTION', true);
  3.  
  4. error_reporting(E_ALL | E_STRICT);
  5. ini_set('display_errors', !IS_ENV_PRODUCTION);
  6. ini_set('error_log', 'log/phperror.txt');
  7.  
  8. date_default_timezone_set('Europe/Warsaw');
  9.  
  10. {
  11. function _stripslashes_rcurs($variable, $top = true)
  12. {
  13. $clean_data = array();
  14.  
  15. foreach ($variable as $key => $value)
  16. {
  17. $key = ($top) ? $key : stripslashes($key);
  18. $clean_data[$key] = (is_array($value)) ?
  19. stripslashes_rcurs($value, false) : stripslashes($value);
  20. }
  21. return $clean_data;
  22. }
  23. $_GET = stripslashes_rcurs($_GET);
  24. $_POST = stripslashes_rcurs($_POST);
  25. $_REQUEST = stripslashes_rcurs($_REQUEST);
  26. $_COOKIE = stripslashes_rcurs($_COOKIE);
  27. }
  28. ?>
darko
wyłączone magic_quotes w konfiguracji ? Wywołania funkcji stripslashes_rcurs zamiast _stripslashes_rcurs ?
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.