Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Code Igniter - problem z odczytem cookie w inclkudowanym pliku
Testosteron
post
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

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


Witajcie.

Stworzyłem kontroler, który sprawdza, czy została zainicjowana sesja, a jeśli nie to czy istnieje plik cookie. Jeżeli jeden z tych warunków został spełniony, zostaje wyświetlone menu usera, w przeciwnym wypadku zostaje wyświetlona prośba o zalogowanie, bądź rejestrację. Testowałem go na "sucho" i wszystko działa ok, do czasu kiedy includowałem ten skrypt do mojego layoutu (co wiązało się także z koniecznością uruchomienia opcji allow_url_include w php.ini). Otóż, za każdym razem nie można odnaleźć pliku cookie. Stworzyłem więc nowy, uproszczony skrypt dla testu. Efekt jest dokładnie taki sam. Plik ten wygląda następująco
  1. <?php
  2.  
  3. class Nowy extends ci_Controller{
  4. function index(){
  5. if(isset($_COOKIE['log'])){
  6. echo 'Jesteś zalogowany';
  7. } else {
  8. echo 'Jesteś niezalogowany<br /><a href="login">Zaloguj</a>';
  9. }
  10. }
  11.  
  12. }
  13.  
  14. ?>

W widoku mam natomiast:
  1. <?php
  2. $this->load->helper('url');
  3. $a = base_url() . 'nowy';
  4. include($a);
  5. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
memory
post
Post #2





Grupa: Zarejestrowani
Postów: 616
Pomógł: 84
Dołączył: 29.11.2006
Skąd: bełchatów

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


Czemu includujesz controller do widoku ?
Go to the top of the page
+Quote Post
Testosteron
post
Post #3





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

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


Ponieważ chcę, zeby w określonym miejscu layoutu znalazł się ten skrypt. Wiem, ze można dołączyć dane do widoku z kontrolera za pomocą tablicy, ale w tym przypadku chcę, żeby ten skrypt był dołączony do każdego pliku i ten sposób wydawał mi się prostszy.
Go to the top of the page
+Quote Post
memory
post
Post #4





Grupa: Zarejestrowani
Postów: 616
Pomógł: 84
Dołączył: 29.11.2006
Skąd: bełchatów

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


Poczytaj o architekturze MVC, oraz dokumentacje CI. To co teraz tworzysz to czysta herezja, która nie ma prawa zadziałać.

Go to the top of the page
+Quote Post
Testosteron
post
Post #5





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

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


Zaglądałem do manuala CI, ale nie znalazłem tam informacji, które pomogłyby mi w zrealizowaniu tego zadania. O samej architekturze także czytałem i to nie tylko w manualu CI, ale teraz specjalnie sięgnąłem do innych stron, opisujących (ogólnie) tę problematykę. Niestety nie daje mi to praktycznej wiedzy, jak rozwiązać ten problem. Możesz dać mi przynajmniej jakieś wskazówki?

Ten post edytował Testosteron 26.10.2014, 14:27:34
Go to the top of the page
+Quote Post
markonix
post
Post #6





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Jeżeli skrypt ma być wywoływany w wielu miejscach to zrób z niego helper.
Jednak znacznie lepszym pomysłem jest umieszczenie tego skryptu w kontrolerze. Jeżeli skrypt ma być wywoływany w wielu funkcjach (podstronach) to umieść go po prostu w konstruktorze, a jeżeli w całej aplikacji to stwórz MY_Controller.
Go to the top of the page
+Quote Post
Testosteron
post
Post #7





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

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


Właśnie utworzyłem z niego kontroler, tylko nie wiem jak go zgrabnie dołączyć do widoku, tak, żeby stał sie jego częścią.

W tej chwili stworzyłem jeden layout w którym chcę umieścić ten skrypt, a przejściu na kolejne podstrony zmienia się tylko content.

Ten post edytował Testosteron 27.10.2014, 09:38:30
Go to the top of the page
+Quote Post
markonix
post
Post #8





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Cytat(Testosteron @ 26.10.2014, 20:03:37 ) *
Właśnie utworzyłem z niego kontroler, tylko nie wiem jak go zgrabnie dołączyć do widoku, tak, żeby stał sie jego częścią.

Używasz takich sformułowań jakbyś w ogóle nie rozumiał idei MVC.

Z kontrolera masz przekazywać do widoku odpowiednią zmienną, a nie odwrotnie.
Go to the top of the page
+Quote Post
Testosteron
post
Post #9





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

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


Tak też próbowałem, tj.
  1. $data = array(
  2. 'log' => $this->log_user()
  3. );
  4.  
  5. $this->load->view('themes', $data);


Wynik wykonania jest wyrzucany nad <html>.

Pisałeś też, że mogę stworzyć helper. Musiałbym jednak przebudować kod, ponieważ korzystam w nim z bibliotek.
Go to the top of the page
+Quote Post
rad11
post
Post #10





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

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


To uzyj go w odpowiednim miejscu w widoku.
Go to the top of the page
+Quote Post
Testosteron
post
Post #11





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

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


Użyłem. Jeżeli zamiast metody wrzucę zwykłego stringa to wszystko jest ok.

Ten post edytował Testosteron 29.10.2014, 08:08:56
Go to the top of the page
+Quote Post
Turson
post
Post #12





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Pokaż kod metody log_user
Go to the top of the page
+Quote Post
Testosteron
post
Post #13





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

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


  1. function log_user(){
  2. $this->load->database();
  3. $this->load->library('form_validation');
  4. $this->load->library('code_cookie');
  5. //Jeśli istnieje plik cookie
  6. if(isset($_SESSION['log']) ) {
  7. $login = $this->code_cookie->uncode_id($_COOKIE['log'] );
  8. $pass = $this->code_cookie->uncode_pass($_COOKIE['log'] );
  9. $query = $this->db->query("SELECT login, password FROM register WHERE login='" .$login. "' AND password='" .$pass. "'");
  10. if($query->num_rows == 1){
  11. echo 'Witaj ' . $login . "<br />";
  12. $this->load->view('user_menu');
  13. } else {
  14. setcookie("log", "", 0);
  15. }
  16. } else {
  17. if(isset($_COOKIE['log']) ){
  18. $login = $this->code_cookie->uncode_id($_COOKIE['log'] );
  19. $pass = $this->code_cookie->uncode_pass($_COOKIE['log'] );
  20. $query = $this->db->query("SELECT login, password FROM register WHERE login='" .$login. "' AND password='" .$pass. "'");
  21. if($query->num_rows == 1){
  22. echo 'Witaj ' . $login . "<br />";
  23. $this->load->view('user_menu');
  24. } else {
  25. setcookie("log", "", 0);
  26. }
  27.  
  28.  
  29. } else {
  30. echo 'Witaj <b> Nieznajomy</b><br />';
  31. echo "<a href='register'>Zarejestruj się</a> | <a href='login'>Zaloguj</a><br /><a href='remmember-password'>Nie pamiętam hasła</a>";
  32. }
  33. }
  34. }

Ten sam problem występuje, jeśli stworzę testową klasę, drukującą jakiś komunikat.
Go to the top of the page
+Quote Post
Turson
post
Post #14





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Echo w metodzie? Łamiesz zasady MVC
Go to the top of the page
+Quote Post
Testosteron
post
Post #15





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

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


Wiem, wiem. Na razie chcę stworzyć szkielet, który będzie działał.
Go to the top of the page
+Quote Post
Turson
post
Post #16





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Próbujesz przekazać do widoku metodę, która pluje echo, wyświetla content, ładuje widok i w ogóle. Zacznij wolniej ale poprawnie.
Go to the top of the page
+Quote Post
Testosteron
post
Post #17





Grupa: Zarejestrowani
Postów: 113
Pomógł: 2
Dołączył: 15.09.2011

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


Przeprowadziłem mały test. Stworzyłem nową metodę, która ładuje jakiś tam widom. W widoku tym znajduje się tylko tekst. Efekt jest dokładnie taki sam. Tak jak zaznaczałem wcześniej - to jest moja pierwsza styczność z MVC i ciężko jest na początku wszystko ogarnąć.

Z tego co zauważyłem, jeśli metoda zwraca int, to widok normalnie odbierą taką wartość. W przypadku, gdy wysyłam stringa, zaczynają się problemu. To co? Mam wysyłać int'y, a w widoku zrobić instrukcję warunkową switch? Na razie tylko to przychodzi mi do głowy, chociaż skrypt będzie później trudniejszy w modyfikacji.
Go to the top of the page
+Quote Post
markuz
post
Post #18





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


application/controllers/TestController.php
  1. class TestController extends CI_Controller
  2. {
  3. public function index()
  4. {
  5. $zmienna = "Cześć!";
  6. $this->load->view('test/index', array('zmienna' => $zmienna));
  7. }
  8. }


application/views/test/index.php
  1. <h1><?php echo $zmienna; ?></h1>
Go to the top of the page
+Quote Post

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: 23.08.2025 - 01:51