Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nietypowy problem ze zmienną "globalna"
Forum PHP.pl > Forum > Przedszkole
bladykiel
Witam, otóż spotkalem się właśnie z dziwnym problemem.. Próbowałem na wiele sposobów, jednak bezskutecznie.

  1. //$zmienna=$_POST['koszt'];
  2. $GLOBALS['bla']=$_POST['koszt'];
  3.  
  4.  
  5. if($action==""){
  6.  
  7. $main_content.='jakis text '.$bla;
  8.  
  9. $main_content.= '<br><a href="?subtopic=sprzedaj&action=tak">Tak </a>';
  10. }
  11.  
  12. if($action=="tak")
  13. {
  14. $main_content.='text '.$bla';
  15. }
  16.  
  17. }

Pytanie brzmi, dlaczego w żaden sposób w tym ifie
  1. if($action=="tak")
nie widzi zmiennej $bla ? Próbowałem już na wiele sposobów, czy to przez global, czy normlanymi zmiennymi, to jednak ciąglę nie mogę odwołać się do zmiennej
  1. $_POST['koszt']
Jakieś propozycje ?
Szymciosek
  1. $GLOBALS['bla']='bla bla bla';
  2.  
  3. var_dump($GLOBALS['bla']);


Raczej coś w ten sposób.

http://www.roseindia.net/tutorial/php/php-...les-global.html
http://forum.codecall.net/topic/35041-howt...obal-variables/

Tutaj jeszcze znalazłem jakieś informacje, które mogą Ci się przydać.
bladykiel
Jeśli chodzi o rozwiązania z linków, robiłem już to wcześniej, również nie działa.

Natomiast odnośnie var_dump($GLOBALS['bla']), oczywiście stosując go w pierwszym ifie
  1. if($action=="")
zwraca to co miał zwracać. Natomiast gdy stosuję go w ifie drugim
  1. if($action=="tak")
nie zwraca już niczego.
Szymciosek
Co zwraca $action?
Może po prostu ten warunek nigdy nie zostaje spełniony?
bladykiel
  1. $main_content.= '<br><a href="?subtopic=sprzedaj&action=tak">Tak </a>';
  2.  
  3. }


masz napisane.
jesli klikniesz w TAK ma sie wykonac if z action=="tak".
Co więcej, wykonuje się on, tyle że nie widzi zmiennych.

Co również masz tu napisane:
  1. $main_content.='text '.$bla';

dla uproszczenia $main_content to tak jakby echo. bo wywołaniu się tego ifa, wyświetla "text " i tyle. Zmiennej jakby nie było.
Szymciosek
Hmmm a próbowałeś zamiast
if (...) zrobić elseif (...)?
bladykiel
Owszem, aczkolwiek nie składnia jest problemem, gdyż w innym przypadku, wszystko działa bez zarzutu.
Szymciosek
Zrobiłem wstępnie:
  1. //$zmienna=$_POST['koszt'];
  2. $GLOBALS['bla']=' nowy koszt';
  3. $action = 'tak';
  4.  
  5.  
  6. if($action==""){
  7.  
  8. $main_content.='jakis text '.$bla;
  9.  
  10. $main_content.= '<br><a href="?subtopic=sprzedaj&action=tak">Tak </a>';
  11. }
  12.  
  13. if($action=="tak")
  14. {
  15. $main_content.='text '.$bla;
  16. }
  17.  
  18. echo $main_content;


I muszę Ci powiedzieć, że w obu przypadkach, gdy $action jest puste '' lub 'tak' zwraca coś. Więc jeden i drugi warunek działa.
bladykiel
Jeśli tak to napiszesz to owszem smile.gif

problemem jest gdy bedziemy chcieli zmiennej bla przypisac wartość z formularza.

  1. $GLOBALS['bla']=$_POST['koszt'];


wtedy następuje problem, gdyż w drugim ifie nie widzi owej zmiennej.
Szymciosek
No to zostaje mi tylko postawić na to, że z formularza masz coś nie tak, a tego nie podałeś.

Zawsze powinieneś też sprawdzić co zwraca sama tablica $_POST.
W tym celu:
var_dump($_POST);
bladykiel
Niestety, tu także się mylisz. Gdyby było coś źle napisane, to w pierwszym ifie, odwołując się do zmiennej $bla nie zwróciło by prawidłowej wartości, a jednak ją zwraca.
Szymciosek
Dobra, to pokaż więcej kodu i będziemy sprawdzać co tam masz takiego.

Najlepiej wydziel tylko formularz + php.
bladykiel
Sam formularz w najprostszej psotaci wygląda tak:

  1. <form action="?subtopic=sprzedaj" method="post">
  2. <input name="koszt" value='.$eq['koszt'].' type="hidden" />
  3. <input type="submit" value="sprzedaj"/></form>


Z kolei najprostszy przykład miejsca wysłania formularza miałeś podany w pierwszym poście.

Ktoś ma jeszcze jakieś sugestie ?
nospor
facepalmxd.gif
Tyle postów w tym prostym temacie...

Przecież o to:
if($action=="tak")
jest odpalane gdy ktoś kliknie na linka
$main_content.= '<br><a href="?subtopic=sprzedaj&action=tak">Tak </a>';

No a przecież klikając na linka nie przesyłacie zadnych danych postem, wiec o to:
$GLOBALS['bla']=$_POST['koszt'];
logiczne ze bedzie mialo pustą wartosc bo POST nie istnieje....


GLOBALS działa w ramach jednego ządania. Jak chcesz dane przekazywać między żadaniami to masz używać sesji.
bladykiel
Dobrze, tylko jest taki problem smile.gif
Zmienna w pierwszym ifie dziala, i pomimo tego, że wartość $_POST['koszt'] została przypisana NORMALNEJ zmiennej, drugi if jej nie widzi.
przykladowo
  1. $zmienna=$_POST['koszt'];
  2.  
  3.  
  4. if(action="")
  5. {
  6. $main_content.=$zmienna; //tu zmienna widzi
  7. $main_content.= '<a href="?subtopic=sprzedaj&action=tak">Tak </a>';
  8. }
  9.  
  10. if(action="tak")
  11. {
  12. $main_content.=$zmienna; //tu juz jej nie widzi
  13. }
nospor
I ze niby oba IFy wykonują się w jednym żądaniu??
!*!
Zacznij od podstaw:
http://pl.wikibooks.org/wiki/PHP
http://pl.wikibooks.org/wiki/PHP/Formularze

Nie rozumiem dlaczego uznałeś że &action jest równie $action. Wypadałoby to ustalić

  1. $action = $_GET['action'];

A pierw sprawdzić czy formularz w ogóle został wysyłany i czy zmienne istnieją przez isset
bladykiel
1. if wykonuje się, gdy wyślemy formularz z innej podstrony. Natomiast drugi, gdy klikniemy na link "TAK".
Jednak, o ile rozumiem dlaczego global moze nie dzialać, nie mogę zrozumieć, dlaczego normalna zmienna
  1. $zmienna=$_POST['koszt'];
nie chce dzialac.

$up, jak już mowiłem, jest to NAJPROSTSZY przykład ilustrujący ten przykład smile.gif Pierwszy raz, spotykam się, aby normalna zmienna, do której była przypisana wartośc _POST nie była widziana w całej podstronie.
nospor
Rany julek.... przecież w pierwszym moim poście w tym temacie właśnie dokładnie to ci wyjaśniłem.... przeczytaj ten post jeszcze raz....

ps: przenosze na przedszkole
!*!
Cytat(bladykiel @ 23.04.2013, 11:32:18 ) *
$up, jak już mowiłem, jest to NAJPROSTSZY przykład ilustrujący ten przykład smile.gif Pierwszy raz, spotykam się, aby normalna zmienna, do której była przypisana wartośc _POST nie była widziana w całej podstronie.


Masło maślane. Przecież robisz jakąś kompletną bzdurę jeśli chodzi o przesył danych.
bladykiel
Owszem, jednak przed jakąkolwiek akcją wartość postu jest przypisana do zmiennej, więc wydaje mi się, że powinna ona mieć tą wartość dopóki się jej nie nadpisze. Nie słyszałem nigdy, aby wartosc do raz przypisanej zmiennej nagle się ulatniała.

tak więc reasumując, nie ma innego sposobu niż zostosowanie sesji ?
nospor
Cytat
Owszem, jednak przed jakąkolwiek akcją wartość postu jest przypisana do zmiennej, więc wydaje mi się, że powinna ona mieć tą wartość dopóki się jej nie nadpisze. Nie słyszałem nigdy, aby wartosc do raz przypisanej zmiennej nagle się ulatniała.
facepalmxd.gif bo jestes początkujący i nie ogarniasz podstaw..... zmienne działają w obrębie jednego żądania. Jeśli ty, masz kilka żądan, a masz, to musisz uzyc sesji by zapamiętać stan zmiennych z poszczególnych żądan. Przyjmij to wkońcu do wiadomości i nie kłóć się w rzeczach, o któych mało wiesz.
!*!
Cytat
Nie słyszałem nigdy, aby wartosc do raz przypisanej zmiennej nagle się ulatniała.

A niby jak działa całe PHP? Nie rozumiem pytania. Pokaż cały kod i napisz co chcesz osiągnąć, bo to co piszesz jest bez sensu.

@nospor - tak teraz widzę, zmyliły mnie te pytania o action wink.gif
nospor
@ !*! a czego tu nie rozumiec? Koles wysyla forma (pierwsze żądaie), potem klika w link (drugie żądanie) i dziwi się, że mu dane z forma już nie są widoczne...
bladykiel
Dobra, sesje zadziałały, tak więc dzięki za pomoc, i temat można zamknąć smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.