» »

PHP var problem! Please help!

PHP var problem! Please help!

Jebiveter ::

Ola!
V glavnem, imem problem pri prenosu variablov iz forma v php variable.
No, svar je taka: imam skripto, sestavljeno iz 3h fajlov, ki sama po sebi deluje prav.
V prvem fajlu je form, iz katerega gredo vrednosti v drug fajl. V tem fajlu se vrtednosti spremenijo v variable in se prikazejo (echo...). Nato se iz tega fajla, s pomocjo 'hidden' forma vrednosti variablov prenesejo v tretji fajl, kjer so funkcije, ki zapisejo vrednosti v bazo, ...
Upam, da je do tukaj razumljivo.
Problem se pojavi, ko hocem jest to skripto uporabit kot del spletisca. Tako eni od .php strani (ki ni del spkripte!) dolocim:

< ?
if (!isset($send)) {
include("prijava1.php");
}elseif ($send == "Pošlji"){
include("prijava2.php");
}elseif ($send == "Shrani"){
include("prijava3.php");
}
? >

Kot action v formah, ki so v prijava.php, prijava2.php in prijava3.php, dolocim stran z tem if-else stavkom.
Ko izpolnem polja v formi in zelim naloziti drugo stran (prijava2.php) se stran sicer prikaze z html vsebino, vendar ni ne duha ne sluha o vrednostih, ki sem jih iz prejsnjega fajla postal!

Kaj delam narobe!?:O
Sem z phpjem sicer sele zacel, zato mi sploh ni jasno zakaj posebej deluje, tako pa ne!
Dejte prosim pomagat, ker si tle razbijam glavo ze par urc!
V naprej hvala za vso pomoc! 0:)
Certainty of death. Small chance of success. What are we waiting for?

Ziga Dolhar ::

register_globals = 0

Če imaš tako nastavljeno, se na spremenljivke sklicuješ posredno preko arrayerj $_POST, $_GET in $_REQUEST [združena POST in GET].

Torej: $send = $_POST['send'];
https://dolhar.si/

Jebiveter ::

sicer imam global variables vklopljene, vendar uporabljam nacin, ki si ga napisal. Tako, da to ni problem. V vsakem "prijava*.php" fajlu so posebej definirane spremenljivke na ta nacin.
Totej bi se naj po logiki "include()" funkcije morale tudi te "definicije" upostevat.
Vprasanje je zakaj temu ni tako?

Aja, pa opazu sem, da tudi ce uporabim uzpisa spremenjlivke na nacin $_POST["neki"] se izpise vrednosti! Ali to pomeni, da se vrendosti nekje na poti do ifelse stavka izgubijo?

Kje bi lahko prislo do napake v tem primeru?
A imas se kaksno idejo?
Certainty of death. Small chance of success. What are we waiting for?

Ziga Dolhar ::

Ne razumem te najbolje ...

Kakšen je 'scope' spremenljivk -- local al global? [global $var;]
https://dolhar.si/

Jebiveter ::

hmm, postane spremenljivke so v vsakem fajlu definirane tako da so local. Se pravi:
$neki = $_POST['neki'];
Torej je scope spremenljivk "local", rajt?
Sam ne vem ce je v tem problem...

Ker, ce gre stvar mimo if-else in include potem deluje pravilno! Cim pa hocem to zdruzit v eni strani (tako kakor sm zgoraj napisal) pa se vrednosti spremenljivk izgubijo...:(
Razlikujejo se pa skripte samo v tem, da se form v "samostojnem" nacinu sklicuje na naslednjo prijava*.php, v "includanem" nacinu pa na stran, ki vsebuje if-else stavek.
Hmm, upam, da razumes...:8)
Certainty of death. Small chance of success. What are we waiting for?

Ziga Dolhar ::

uporabi global in poročaj :).
https://dolhar.si/

Jebiveter ::

ok, ne razumem prav...
Global v kaksem smislu? Ce prav razumem je oblika "$neki" global, "$neki = $_POST['neki'];" pa local, rajt?
Zakak bi potem global delalo ce local ne?
No, bom probal, pa porocal cez 5 min...
Certainty of death. Small chance of success. What are we waiting for?

Jebiveter ::

torej, ali ne razumem ali ne dela.
Torej, variabli, ki so iz enega fajla postani v drugega BREZ definicije v tem drugem fajlu (torej brez tega: $neki = $_POST['neki']; ) so GLOBAL variabli, rajt? V nasprotenem primeru imamo LOCAL variable, rajt?
Kar sm naredu je, da sm v drugem fajlu (kjer so definirani local variabli) sem te definicije commentiral (/* */) in jih nisem uporabu. Stvar pa se vedno ne deluje... Problem je se v tem, da global variabli ne pridjo v postev, ker se iz drugega fajla preko hidden forma postajo v tretji fajl. In, ce niso definirane local variables, jih ne posta prav. Ali pac?

Prosim, razsvetli me! Ker ocitno res nimam pojma kaj delam...:'(
Certainty of death. Small chance of success. What are we waiting for?

Zgodovina sprememb…

Ziga Dolhar ::

Lokalne spremenljivke živijo v obsegu svoje funkcije.
Globalne spremenljivke živijo v okviru zagona aplikacije.

$_POST ipd so globalne spremenljivke.
$neki = $_POST je lokalna spremenljivka, ki si ji podal vrednost globalne spremenljivke. Vendar je še vedno lokalna!

Če želiš spremenljivko definirat kot globalno oz. dostopat do globalne, se poslužiš ukaza global $neki;.
https://dolhar.si/

Ziga Dolhar ::

Zadjle vidim kaj ti delaš ...

Če spremenljivko $neki vržeš v hidden form, jo preneseš na drug dokument. Vendar je enakovredna vsem ostalim, zato moraš tudi do nje dostopat preko $_POST oz. $_REQUEST arrayev. Kot sem rekel, lokalne spremenljivke živijo v obsegu funkcije, ki pa živi v okviru izvajanja skripte -- torej ko se izvajanje konča [prehod na drugo stran obrazca], umre tudi lokalna spremenljivka $neki.
https://dolhar.si/

Jebiveter ::

Ma problem je v tem, da ni tle problema. To sm ze zastopu, da morm potem spet definirat spremenljivke, ko prenesem z hidden obrazcem v novo 'skripto'. Ni tle frke.

Problem je v tem, da ce prvo stran (vsebuje samo obrazec, brez phpja) includam prek
< ?
if (!isset($send)) {
include("prijava1.php");
}elseif ($send == "Pošlji"){
include("prijava2.php");
}elseif ($send == "Shrani"){
include("prijava3.php");
}
? >
...
se stvar normalno prikaze. Ko stisnem Pošlji, se pravi da $send dobi vrednost 'Pošlji', target pa je ista stran (v kateri je ta if stavek). Logicno bi se moglo izvesti tole:
"ce $send NI dolocen potem "includaj" prijava1.php, ce ima $send vrednost 'Pošlji' potem "includaj" prijava2.php, ce pa ime $send vrednost 'Shrani' "includaj" prijava3.php"

Stvar sicer deluje, kar dokaze da if-else stavek deluje prav. Kje se pa zgubijo spremenljivke oz. vrednosti le-teh, pa je beyond me!

Addum: Ce formu dolocim "get" namesto "post" vrednosti variablov prikazejo direkt v addressu, kar pove, da variabli pridejo naprej, vendar jih iz neznanih razlogov ne "predefinira" v local spremenljivke in jih ne uporabi!
Any ideas?
Namrec zmeraj bolj obupujem :O
Certainty of death. Small chance of success. What are we waiting for?

Jebiveter ::

Bump!

Anyone?! :O Please, help!:O :'(
Certainty of death. Small chance of success. What are we waiting for?

OwcA ::

Programiranje z register_globals in podobno navlako je velika packarija. Do poslanih spremenljivk dostopaj preko $_POST, globalne pa deklariraj kot elemente polja $GLOBALS in vse bo čudežno začelo delovati neglede na konfiguracijo strežnika na katerem to teče. ;)
Ali je vrednost določena raje preverjaj z !isset() || empty(), ker načeloma se iz obrazca pošlejo vse vrednosti, četudi so prazne.
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

Zzzzzzz ::

Poskusi malce spremeniti if stavek v:


if ($send == "Pošlji")
include("prijava2.php");
elseif ($send == "Shrani")
include("prijava3.php");
else
include("prijava1.php");
? >


Ker mislm, da se dogaja sledeče: ko ti daš spremenljivki $send vrednost $_POST['send'], $send je tako v vsakem primeru definirana dobi vrednost postane spremenljivke. Vendar, kaj pa vrne array $_POST['send'], če ključ "send" ni definiran v arrayu $_POST? Prazen string. Zato potem ne gre skozi funkcijo isset(), ker ta vrne false le, če spremenljivka ne obstaja, ne če je prazna (null string).
Predelaj if stavek, tako kot sem ti napisal, pa poročaj, če dela.

Jebiveter ::

@OwcA: V bistvu so vse spremenljivke lokalne, saj jih takoj pretvorim z $_POST['neki'] v $neki. Torej tukaj ne bi smel bit problem.

@Zvonko: Tako moj kot tvoj if stavek opravi svoje delo prav - se pravi da v obeh primerih dobim ob pravem trenutku includano pravo stran. Sem sprobal...
BTW: z "if (!isset($send))" dosezem isto kakor z "if ($send == "")" torej empty string oz. rezultat je enak. Zato ker, ce url ne 'vsebuje' ?send="neki" potem je isset enak FALSE. V drugem primeru pa spet $send ni deklariran, se pravi je prazen.
Prosim popravi me, ce se motim...

Vidim, da me niste dobro razumeli:8) (vsaj mislim)
Moj problem ni v if stavku. Problem so postane spremenljivke oz. njihove vrednosti, ki pa se nekje med postom (se pravi "submit") in deklaracijo ($neki = $_POST['neki']) izgubijo! Zakaj, ne vem! Ker ce zazenem skripto loceno, ne preko include (seveda z spremenjenim "action" v formu), deluje prav! Cim pa je stvar includana... ne deluje.
Se kaksna ideja? :8)

Najlepsa hvala za pomoc. Upam, da ne boste obupali nad mano :8)
Certainty of death. Small chance of success. What are we waiting for?

Zgodovina sprememb…

njok ::

Kaj pa ce namesto da includas datoteke kar pastas njihove vsebine?

Jebiveter ::

Tega nisem se probal. Vendar to iznici celoten pomen include funkcije! Gre za to, da lahko strani spreminjas neodvisno eno od druge in jih potem tako zdruzis. :\
Bom pa sprobal kako se obnasa v primeru, ce stvari vrzem direkt v isti fajl. TNX!:D
Certainty of death. Small chance of success. What are we waiting for?

njok ::

Ja, saj sem razumel ta bi rad includal, ker se sicer ne bi mucil s tem. Ti samo sprobaj in povej ce dela. Ker ce bo delalo, je bolj verjetno da je fora v scopih spremenljivk kot kaj drugega.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Uporaba spremenjivke iz JavaScript v PHP

Oddelek: Programiranje
171437 (1076) direstrait
»

[PHP] Notice: Undefined variable

Oddelek: Programiranje
91367 (1231) t3hn0
»

php variable scope problem

Oddelek: Izdelava spletišč
81276 (1189) darh
»

oop+php+sessions

Oddelek: Izdelava spletišč
152605 (72) cahahopie

Več podobnih tem