Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [CodeIgniter]Mysql+ajax zapis na eventy
jacobson
post 23.05.2011, 23:50:54
Post #1





Grupa: Zarejestrowani
Postów: 468
Pomógł: 36
Dołączył: 14.12.2010

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


Witam, chce zrobic zapis na dane eventy. przy nacisnieciu przycisku ma byc wywolywana funkcja ajaxa ktora ma przeslac dane do bazy mysql (w momencie kiedy ktos zapisuje sie na dany event). No i tu pojawia sie problem gdyz z poziomu widoku (gdzie mam skrypt js) musze przeslac dane i wywolac skrypt php ktory polaczy sie z baza i wysle zapytanie... a do tego potrzebuje juz zaladowania modelu. W jaki sposob to zrobic, czy moze moje rozumowanie jest bledne i jest jakis prosty sposob tongue.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
szok
post 24.05.2011, 08:22:27
Post #2





Grupa: Zarejestrowani
Postów: 165
Pomógł: 20
Dołączył: 2.03.2006

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


Ale w czym problem?

Po prostu wywołaj daną metodę kontrolera który obsłuży całe twoje zapytanie.

Dodatkowo możesz sprawdzić czy to zapytanie jest ajaksowe przez:
  1. $this->input->is_ajax_request()

http://codeigniter.com/user_guide/libraries/input.html


--------------------
Go to the top of the page
+Quote Post
jacobson
post 24.05.2011, 08:34:46
Post #3





Grupa: Zarejestrowani
Postów: 468
Pomógł: 36
Dołączył: 14.12.2010

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


ale to w widoku poprostu dac
$this->load->model('blabla');
$this->blabla->metoda();
w skrypcie ajaxa ?
Go to the top of the page
+Quote Post
szok
post 24.05.2011, 14:08:14
Post #4





Grupa: Zarejestrowani
Postów: 165
Pomógł: 20
Dołączył: 2.03.2006

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


Rozumiem że ajaksem chcesz przesłać jakie dane POST tak?
To po prostu wczytujesz ajaksem adres tak samo jak w przeglądarce.
domena.pl/controller/mojaakcja

I w niej wykonujesz wszystko jak w kontrolerze, tylko zwracasz format taki jaki chcesz.
np możesz wysłać czysty kod HTML który jest renderowany przez kontroler i ładujesz go do jakiegoś diva co masz na stronie.


--------------------
Go to the top of the page
+Quote Post
jacobson
post 24.05.2011, 22:25:14
Post #5





Grupa: Zarejestrowani
Postów: 468
Pomógł: 36
Dołączył: 14.12.2010

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


no i wlasnie zrobilem tak ale cos mi nie pyka tongue.gif

moja funkcja w widoku:

  1. function enroll(id){
  2. $.post(
  3. 'http://localhost/index.php/main/ajax_function/'+id
  4. );
  5. }


moj kontroler :

Kod
function ajax_function($id){
        $data = array(
            'userid' => $this->session->userdata('username'),
            'id' => $id
        );
        $this->db->insert('enroll', $data);
    }



no i nie wiem dlaczego to moze nie dzialac, bede mega wdzieczny za pomoc z tym ;p

Ten post edytował jacobson 24.05.2011, 22:29:23
Go to the top of the page
+Quote Post
szok
post 25.05.2011, 07:18:21
Post #6





Grupa: Zarejestrowani
Postów: 165
Pomógł: 20
Dołączył: 2.03.2006

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


Nie post, tylko lepiej użyć load w jquery, rozumiem że to w jquery jest?
Kod
function enroll(id){
    $('#result').load('http://localhost/index.php/main/ajax_function/'+id, function() {
       alert('Load was performed.');
    });
}

I do Diva o ID result wrzuca Ci wynik


--------------------
Go to the top of the page
+Quote Post
jacobson
post 25.05.2011, 08:47:13
Post #7





Grupa: Zarejestrowani
Postów: 468
Pomógł: 36
Dołączył: 14.12.2010

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


nom tylko to ma tak nie dzialac tongue.gif to ma byc powiazane z mysql, po nacisnieciu przycisku (z funkcja onclick), wywoluje sie funkcja enroll(id) ktora ma za zadanie przeslac info do kontrolera ktory za to ma za zadanie skontaktowac sie z mysql i te przekazane wczesenij informacje dodac do bazy danych. Nie chodzi o to zeby do jakiegos diva wrzucalo wynik.
Go to the top of the page
+Quote Post
szok
post 25.05.2011, 09:02:00
Post #8





Grupa: Zarejestrowani
Postów: 165
Pomógł: 20
Dołączył: 2.03.2006

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


To po prostu zrób pustego diva gdzieś, display:none; i po kłopocie.


--------------------
Go to the top of the page
+Quote Post
phpion
post 25.05.2011, 09:04:38
Post #9





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(jacobson @ 24.05.2011, 23:25:14 ) *
no i wlasnie zrobilem tak ale cos mi nie pyka tongue.gif

...

no i nie wiem dlaczego to moze nie dzialac, bede mega wdzieczny za pomoc z tym ;p

Napisz czym objawia się owe "nie działanie". Jeśli nie korzystasz to zacznij korzystać z dodatku Firebug do Firefoxa. W sytuacjach pracy z Ajaxem jest naprawdę niezastąpiony. Może żądanie się w ogóle nie wywołuje? Może po drodze wali jakimś błędem? Zobaczysz na jaki adres idzie żądanie, jakie parametry ze sobą niesie oraz co uzyskuje w rezultacie.

Swoją drogą: w kontrolerze widzę $this->db. Na pewno w kontrolerze masz dostęp do bazy danych? Nie powinno to być przypadkiem odwołanie do metody modelu?
Go to the top of the page
+Quote Post
szok
post 25.05.2011, 12:53:10
Post #10





Grupa: Zarejestrowani
Postów: 165
Pomógł: 20
Dołączył: 2.03.2006

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


Cytat(phpion @ 25.05.2011, 09:04:38 ) *
Swoją drogą: w kontrolerze widzę $this->db. Na pewno w kontrolerze masz dostęp do bazy danych? Nie powinno to być przypadkiem odwołanie do metody modelu?


CI na to pozwala, że można bez modeli się obejść. Ale zalecane jest jednak tworzenie modeli aby było zgodne z mvc smile.gif


--------------------
Go to the top of the page
+Quote Post
jacobson
post 25.05.2011, 14:54:09
Post #11





Grupa: Zarejestrowani
Postów: 468
Pomógł: 36
Dołączył: 14.12.2010

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


tak dorobilem model i nie dzialalo podzialalem firebugiem i odkrylem mega glupi blad... chcialem uploadowac do bazy varchar(10) a mialem tam ustalone pole varchar(5) tongue.gif

Dziekuje wszystkim za pomoc

A tak zeby nie tworzyc nowego tematu... to chcialbym zeby eventy na ktore uzytkownik jest zapisany mialy ten button Zapis ustawiony na hidden, ale nie mam zielonego pojecia jak to zrobic. Wiem ze nie korzystac sie z wywolywania modelu z widoku. Za to do kontrolera nie mam jak przeslac id eventu na ktory uzytkownik sie zapisuje ... Czy ktos moze podsunalby jakis "dobry" pomysl smile.gif
Go to the top of the page
+Quote Post
phpion
post 26.05.2011, 06:27:19
Post #12





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Ja bym to zrobił tak:

1. Pobierasz z bazy eventy widoczne na danej podstronie (zakładam, że masz stronicowanie).
2. W pętli pobierasz ich identyfikatory i zapisujesz do tablicy.
3. Pobierasz z bazy z tabeli wiążącej event z użytkownikiem te eventy, na które zapisany jest użytkownik i zapisujesz je do tablicy.
4. Wyświetlając eventy w widoku dla każdego sprawdzasz czy jego id występuje w tablicy eventów, na które jest zapisany użytkownik (np. in_array). Jeśli nie to wyświetlasz mu przycisk, jeśli nie to go nie wyświetlasz.
Go to the top of the page
+Quote Post
jacobson
post 27.05.2011, 16:19:54
Post #13





Grupa: Zarejestrowani
Postów: 468
Pomógł: 36
Dołączył: 14.12.2010

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


hehe dokladnie tak zrobilem... w kontrolerze dalem zmienna $data['is_enrolled'] = array(); i potem do tej zmiennej przypisuje $this->mojmodel->mojafunkcja();

w funkcji pobieram wszystkie id eventow dla uzytkownika (username pobrane z sesji) i zapisuje do tablicy (array_push) i na koniec ja zwracam.

W moim widoku w foreachu dalem dodatkowy warunek in_array dany id eventu w tablicy i jak tak to zeby wyswietlal pusty link a jak nie to zeby wyswietlal link do zapisu i smiga ladnie smile.gif Dziekuje bardzo za pomoc smile.gif
Go to the top of the page
+Quote Post

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: 1.07.2025 - 04:33