Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX][PHP] Formularz z AJAX - zgodnie z MVC.
Damonsson
post 24.10.2012, 18:21:38
Post #1





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Mam taką zagwozdkę: zrobiłem formularz sprawdzający czy dany login już istnieje w bazie danych i wyświetlający informację na bieżąco po wprowadzeniu znaku (keyup).


AJAXem wysyłam posta do kontrolera url: "register/checkLogin",
[JAVASCRIPT] pobierz, plaintext
  1. $(function()
  2. {
  3. $('#username').keyup(function() {
  4. $("#status").html('<img src="public/img/ajax-loader.gif">&nbsp;Sprawdzanie dostępności.');
  5. clearTimeout($.data(this, 'timer'));
  6. var wait = setTimeout(search, 600);
  7. $(this).data('timer', wait);
  8. });
  9.  
  10. function search() {
  11.  
  12. var username = $("#username").val();
  13. var msgbox = $("#status");
  14.  
  15. if(username.length > 4)
  16. {
  17. $("#status").html('Sprawdzanie dostępności.');
  18. $.ajax({
  19. type: "POST",
  20. url: "register/checkLogin",
  21. data: "username="+ username,
  22. success: function(msg){
  23. $("#status").ajaxComplete(function(event, request){
  24. if(msg == 'OK')
  25. {
  26. $("#username").removeClass("red");
  27. $("#username").addClass("green");
  28. msgbox.html('<img src="yes.png"> <font color="Green"> Dostępny</font>');
  29. }
  30. else
  31. {
  32. $("#username").removeClass("green");
  33. $("#username").addClass("red");
  34. msgbox.html(msg);
  35. }
  36. });
  37. }
  38. });
  39.  
  40. }
  41. else
  42. {
  43. $("#username").addClass("red");
  44. $("#status").html('<font color="#cc0000">Za mało znaków</font>');
  45. }
  46. return false;
  47. }
  48. });
[JAVASCRIPT] pobierz, plaintext


W kontrolerze mam funkcję:
  1. public function checkLogin() {
  2. $data = array(
  3. 'login' => $_POST['username']
  4. );
  5. $this->model->checkLogin($data);
  6.  
  7. }


W modelu:
  1. public function checkLogin($data) {
  2. if (isset($data['login'])) {
  3. $sth = $this->db->selectOne('SELECT userId FROM user WHERE login = :login', array(
  4. ':login' => $data['login']
  5. ));
  6. if ($sth) {
  7. echo '<span style="color: #cc0000;"><strong>' . $data['login'] . '</strong> jest już zajęty.</span>';
  8. } else {
  9. echo 'OK';
  10. }
  11. }
  12. }

W modelu wywołując print_r($sth) daje taki efekt dla zajętego loginu: Array ( [userId] => 6 ). Dla wolnego nie zwraca nic.

Nie podoba mi się, że w modelu mam umieszczony ten fragment:
  1. if ($sth) {
  2. echo '<span style="color: #cc0000;"><strong>' . $data['login'] . '</strong> jest już zajęty.</span>';
  3. } else {
  4. echo 'OK';
  5. }


Tylko nie wiem gdzie mam go wrzucić i jak przekazać odpowiednio? Do widoku? Do kontrolera? Czy może, wcale to nie jest złe i powinno być to w modelu?

W widoku mam jedynie
  1. <input id="username" name="username" type="text" /> <span id="status"> </span>


Gdyby mógł ktoś rzucić okiem i fachowo mnie oświecić jak to powinno się zrobić należycie, byłbym niezmiernie wdzięczny.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 16:25