Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przekazywanie zminnych pomiędzy funkcjami
Forum PHP.pl > Forum > Przedszkole
sztosz
Jak szybko przekazać zmienne?

Używam stworzonej przeze mnie klasy do wyswietlania stron, zmienia sie tylko zawartosc strony. nagłowek menu i stopka pozostaja bez zmian. Dane o nich sa zapisane w plikach *.req (używam takiego rozszerzenia od require). Klasa posiada funkcje do wyswietlania:

[php:1:0b9f477ce5]<?php

class strona
{
// atrybuty klasy

var $zawartosc = '0';

...

// operacje klasy

function ustaw_zawartosc ($nowa_zawartosc) // ustawienie zawartosci strony
{
$this->zawartosc = $nowa_zawartosc;
}
....


// funkacja sluzy do wyswietlania strony:

function wyswietl()
{
echo "<html><head>";
$this->wyswietl_meta();
$this->wyswietl_tytul($this->tytul);
$this->wyswietl_slowa_kluczowe($this->slowa_kluczowe);
$this->wyswietl_style();
echo "</head><body>";
$this->wyswietl_naglowek();
$this->wyswietl_menu();
$this->wyswietl_zawartosc($this->zawartosc);
$this->wyswietl_stopke();
echo "</body></html>";
}

// funkcje wykorzystywane przez wyswietl()

....

// aż do

function wyswietl_zawartosc($zawartosc)
{
if ($zawartosc != '0')
{
require "$zawartosc";
}
else
{
$zawartosc = require ('default/zawartosc.req');
echo $zawartosc;
} //end if
}


}

?>[/php:1:0b9f477ce5]

Strona z formularzem dodaj.php:
przesyła zawartosc do strony dodane.php
[/php]

[php:1:0b9f477ce5]<?php

require ('classes/strona.cls');

$dodaj = new strona();

$zawartosc_strony = 'pages/dodaj.req';

$dodaj -> ustaw_zawartosc ($zawartosc_strony);
$dodaj -> wyswietl();
?>[/php:1:0b9f477ce5]

przesyła zawartosc do strony dodane.php ktura wyglada podobnie.
Plik dodaj.req formularza konczy sie:
[xml:1:0b9f477ce5]
<INPUT TYPE="TEXT" NAME="ilosc_cd" MAXLENGHT="3"><BR>
</TD>
</TR>
<TR>
<TD>
<INPUT TYPE="SUBMIT" VALUE="DODAJ"><BR>
</TD>
</TR>
</TABLE>
</FORM>[/xml:1:0b9f477ce5]

na sronie dodane dodane.req nie działa
[php:1:0b9f477ce5]<?php
$nazwa = $HTTP_POST_VARS['nazwa'];
?>[/php:1:0b9f477ce5]

Ale na stronie dodane.php działa co jest grane?

Jeszcze raz dodam ze dodane.req jest wywoływane przez zagnierzdzone funkcje klasy w dodane.php.

Czy to chodzi o zasieg zmiennych? A jesli tak to czy [php:1:0b9f477ce5]$HTTP_POST_VARS[/php:1:0b9f477ce5]

nie jest zmienna superglobalna? Z góry dziekuje za wskazanie ewentualnych błedów lub rozwiązan.

PS. Znalazłem rozwiązanie poprzez zastosowanie pliku tymczasowego ale nie jest to rozwiazanie ani ładne ani wygodne. Plik jest tworzony przez skrypt w trakcie kilku pierwszych linijek a w polowie juz usuniety, wiec nim dojdzie do konca nie ma po tym tempi sladu. Czy jest to bezpieczne rozwiazanie?
Ace
[php:1:d0bc6e4d85]<?php

class test
{
var
$zmienna; // tu deklarujemy zmienna

function setVar($var)
{
$this->zmienna = $var; // tutaj ja przypisujemy
}
function printVar()
{
echo $this->zmienna; // tutaj odnosimy sie do tej zmiennej
}
}

$test->new test;
$test->setVar("Oto nasz maly tescik");
$test->printVar();
?>[/php:1:d0bc6e4d85]
powinno wydrukowac napis "Oto nasz maly tescik"

w klasach wpierw przypisujesz zmienne $this->NAZWAZMIENNEJ
a pozniej w dowolnym momencie klasy odnosisz sie przez ten sam zwrot czyli $this->NAZWAZMIENNEJ
sztosz
czy dobrze rozumiem?

[php:1:af6e076ed6]<?php
function wyswietl_zawartosc($zawartosc)
{
if ($zawartosc != '0')
{
require "$zawartosc";
}
else
{
$zawartosc = require ('default/zawartosc.req');
echo $zawartosc;
} //end if
}


?>[/php:1:af6e076ed6]

Powinno wyglądac tak:

[php:1:af6e076ed6]<?php
function wyswietl_zawartosc()
{
if ($this->zawartosc != '0')
{
require "$this->zawartosc";
}
else
{
$zawartosc = require ('default/zawartosc.req');
echo $zawartosc;
} //end if
}

?>[/php:1:af6e076ed6]

I wtedy bedzie ok?

Sprawdze jak tylko wroce z pracy.
sztosz
Spróbowałem tak jak mi radzono, ale nie dało to rezultatu, niestety, wszystko ładnie sie wyswietla jest ze sobą połączone ale nadal zmienne nie są przenoszone, niestety. Jedyny sposób jaki znam to albo pliki tymczasowe, albo wywoływanie zmiennych wraz z funkcjami czy jest jakikolwiek inny sposób?

|| Zrozumiałem, Przepraszam.
V
kszychu
Proszę edytować swoje posty i nie pisać jednego pod drugim.
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.