Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Nie mogę sobie poradzić z zasięgiem zmiennej
Zielonkawy18
post 9.11.2012, 18:24:56
Post #1





Grupa: Zarejestrowani
Postów: 152
Pomógł: 4
Dołączył: 4.10.2012

Ostrzeżenie: (10%)
X----


Witam

Na początku dokumentu deklaruję zmienną :

  1. $sessionMonth=false


Poniżej mam przycisk ( Calcule ):

  1. if(isset($_POST['calcule']))
  2. {
  3. if($_POST['month']=="styczeń") $month="01";
  4. if($_POST['month']=="luty") $month="02";
  5. if($_POST['month']=="marzec") $month="03";
  6. if($_POST['month']=="kwiecień") $month="04";
  7. if($_POST['month']=="maj") $month="05";
  8. if($_POST['month']=="czerwiec") $month="06";
  9. if($_POST['month']=="lipiec") $month="07";
  10. if($_POST['month']=="sierpień") $month="08";
  11. if($_POST['month']=="wrzesień") $month="09";
  12. if($_POST['month']=='październik') $month="10";
  13. if($_POST['month']=="listopad") $month="11";
  14. if($_POST['month']=="grudzień") $month="12";
  15. if($_POST['year']=="2012") $year="2012";
  16. if($_SERVER['REQUEST_METHOD'] == 'POST')
  17. {
  18. global $session;
  19. $session=true;
  20. $_SESSION['month'] = $_POST['month'];
  21. echo $_SESSION['month'];
  22. }
  23. }


Jeżeli zostanie on wciśnięty globalna zmienna $session, zostanie zmieniona na wartość true. W przeciwnym wypadku raczej tak się nie stanie.

Oto drugi przycisk ( donating )

  1. if(isset($_POST['donating'])):
  2. global $session;
  3. if($session==false)
  4. {
  5. echo "false sesion";
  6. if($_POST['month']=="styczeń") $month="01";
  7. if($_POST['month']=="luty") $month="02";
  8. if($_POST['month']=="marzec") $month="03";
  9. if($_POST['month']=="kwiecień") $month="04";
  10. if($_POST['month']=="maj") $month="05";
  11. if($_POST['month']=="czerwiec") $month="06";
  12. if($_POST['month']=="lipiec") $month="07";
  13. if($_POST['month']=="sierpień") $month="08";
  14. if($_POST['month']=="wrzesień") $month="09";
  15. if($_POST['month']=='październik') $month="10";
  16. if($_POST['month']=="listopad") $month="11";
  17. if($_POST['month']=="grudzień") $month="12";
  18. if($_POST['year']=="2012") $year="2012";
  19. }
  20. else
  21. {
  22. echo $_SESSION['month'];
  23. if($month=="styczeń") $month="01";
  24. if($month=="luty") $month="02";
  25. if($month=="marzec") $mouth="03";
  26. if($month=="kwiecień") $month="04";
  27. if($month=="maj") $month="05";
  28. if($month=="czerwiec") $month="06";
  29. if($month=="lipiec") $month="07";
  30. if($month=="sierpień") $month="08";
  31. if($month=="wrzesień") $month="09";
  32. if($month=='październik') $month="10";
  33. if($mouth=="listopad") $month="11";
  34. if($month=="grudzień") $month="12";
  35. if($year=="2012") $year="2012";
  36. }
  37. }


Tutaj już wiem, że zmienna $session zawsze ( czy wcisne Calcule czy nie ) jest równa wartości false i nie mogę się z tym uporać. Wybaczcie za literówkę (mouth) winno być (month)


--------------------
C/C++/C#/JAVA/SQL ( funkcje, procedury, pakiety ).
Go to the top of the page
+Quote Post
Szymciosek
post 9.11.2012, 18:27:38
Post #2





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Takie coś sprawdzaj, przecież już wcześniej dodajesz coś do sesji

$_SESSION['month'];

Tutaj masz jeszcze przykłady: http://pl.wikibooks.org/wiki/PHP/Sesje
Go to the top of the page
+Quote Post
b4rt3kk
post 9.11.2012, 20:01:09
Post #3





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Zmienna globalna, to nie to samo co zmienna sesyjna, jeśli masz na myśli, ze przycisk 1 i przycisk 2, to są dwa oddzielne pliki i w jednym zmieniasz wartość zmiennej globalnej, to drugi plik tego nie widzi. Jak wiesz zapewne z innych języków programowania chodzi o jej dostępność. Do przenoszenia zmiennych w obrębie witryny służy sesja, a nie zmienne globalne.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
abort
post 9.11.2012, 20:31:38
Post #4





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

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


1. Ja się ciągle nie umiem nadziwić, dlaczego ludzie sobie tak komplikują życie, i nie dobierają odpowiednich narzędzi do odpowiedniego celu. Jak rozumiem, miesiąc jest WPISYWANY przez usera, tak? No to nie lepiej zrobić
  1. <select name="month">
  2. <option value="1">styczeń</option>
  3. <option value="2">luty</option>
  4. i tak dalej
  5. <option value="12">grudzień</option>

i odczytywać po prostu $_POST['month'] dostając wartość numeryczną miesiąca?

2. Dziwi mnie fragment kodu:
  1. if(isset($_POST['calcule']))
  2. {
  3. // kilka ifów
  4. if($_SERVER['REQUEST_METHOD'] == 'POST')

Drugi jest niepotrzebny - jeśli tablica $_POST istnieje, to request method jest właśnie "POST".
Jeśli już, to warunki powinny być zamienione miejscami.

3. Jak już piszesz w jednym pliku obsługę wielu rzeczy, czyli wyświetlania (GET) i przewarzania (POST), to sugeruję zrobić to na zasadzie:
  1. <?php
  2. // Wspólny blok - jakieś include/require,
  3. // ew. połączenie się do bazy przed odczytem/zapisem
  4. // ---> a w Twoim przypadku operacje na sesjach - sprawdzenie czy istnieje i jest OK
  5. // a jak sesja nie istnieje (lub jest "too old"), to np. redirect do strony logowania się userów.
  6. if ($_SERVER['REQUEST_METHOD'] == 'GET') {
  7. // tu wyświetlamy formatkę (odczyt z bazy/sesji)
  8. }
  9.  
  10. else { // równoważne if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  11. // a tu przetwarzamy (zapis do bazy/sesji)
  12. }
  13.  
  14. // i znów, dla porządku część wspólna - np. zamykanie bazy
  15. // i ewentualne czyszczenie skryptu po sobie (np. pliki tymczasowe)
  16. ?>


4. A, user b4rt3kk zwrócił uwagę na jedną rzecz: powinieneś użyć sesji. Bo to co do tej pory robisz, to wygląda tak, że:
a) idzie żądanie (GET) do wyświetlenia formatki - skrypt wyświetla formatkę i kończy działanie.
cool.gif user wprowadza dane na formularzu
c) idzie żądanie (POST) do przetworzenia formatki (z danymi via $_POST).

Zakładasz, że zmienna będzie istniała taka, jak w poprzednim skrypcie. A to niestety błąd - tamtego skryptu (ze wszelkimi zmiennymi) już dawno nie ma. Zobacz sobie opis z punktu wyżej. Przeanalizuj go. Ratunkiem dla Ciebie będą sesje.

Ten post edytował abort 9.11.2012, 20:42:06
Go to the top of the page
+Quote Post
d3ut3r
post 10.11.2012, 08:43:17
Post #5





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


Cytat
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
// tu wyświetlamy formatkę (odczyt z bazy/sesji)
}

else { // równoważne if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// a tu przetwarzamy (zapis do bazy/sesji)
}


to akurat nie zawsze jest prawda smile.gif Ale ogólnie cenne uwagi kolega Ci dał, nie komplikuj sobie życia ...


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
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: 19.04.2024 - 10:58