Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX][PHP] Formularz z AJAX - zgodnie z MVC.
Damonsson
post
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
 
Start new topic
Odpowiedzi
Damonsson
post
Post #2





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

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


Chodzi Ci o coś takiego?
  1. public function checkLogin($data) {
  2.  
  3. if (isset($data['login'])) {
  4.  
  5. $check = $this->db->selectOne('SELECT userId FROM user WHERE login = :login', array(
  6.  
  7. ':login' => $data['login']
  8.  
  9. ));
  10.  
  11. if ($check) {
  12. $status = FALSE;
  13. } else {
  14. $status = TRUE;
  15. }
  16.  
  17. }
  18.  
  19. }

Tylko jak mam później to przekazać do skryptu .js w widoku? Muszę to jakoś "wyeksportować" do widoku przecież. A nie mogę, bo nie generuję oddzielnego widoku dla checkLogin, bo i po co, Gubię się z tym AJAXem ;/



Jak mam normalnie np. pobieranie tam wszystkich rekordów to robię tak:

w kontrolerze generuję widok:
  1. public function index() {
  2. $this->view->noteList = $this->model->noteSelectAll();
  3. $this->view->render('note/index');
  4. }


W modelu zwracam:
  1. public function noteSelectAll() {
  2. return $this->db->selectAll("SELECT * FROM note WHERE id = :id", array('id' => $_SESSION['userId']));
  3. }


no i w widoku przykładowo wyświetlam tak
  1. foreach ($this->noteList as $key => $value) {
  2. echo '<tr>';
  3. echo '<td>' . $value['title'] . '</td>';
  4. echo '<td>' . $value['content'] . '</td>';
  5. echo '<td>' . $value['date_add'] . '</td>';
  6. echo '</tr>';
  7. }
  8. ?>

Go to the top of the page
+Quote Post

Posty w temacie


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: 5.10.2025 - 08:43