» »

[Javascript]Dodajanje v URL naslov

[Javascript]Dodajanje v URL naslov

jeryslo ::

Pozdravljeni!

Imam funkcijo, ki doda obstoječemu URL dodaten String:

function izbran(){
	window.location.href+='&temp';
	}

Funkcija se sproži z:
<a onclick="izbran();" onmouseover="this.style.cursor='pointer';" class="izbrani">Temperatura</a>


Zanima me, zakaj se ob dodajanju stran refresha? Namreč jaz nočem refreshanje ob dodajanju, namreč v URL si shranjujem potrebne informacije, iz katerega bom potem izluščil s pomočjo php-ja podatke za ustvarjanje poizvedb po mysql bazi.
  • spremenil: jeryslo ()

AndyS ::

boh pumagi...

Za svoje dobro se spomni drugega načina....

Funkcija, ki jo pa uporabljaš pa naredi točno za kar je namenjena...

MrBrdo ::

shrani si jih v spremenljivko in potem npr. ko se klikne nek gumb (submit?) šele prepiši URL tako kot ga zdaj prepisuješ... če prav razumem kaj hočeš.
tisto za pointer maš pa zelo zelo slabo narejeno... to se dela z cssjem ne z javascriptom:
.izbrani {
  cursor: default;
}
.izbrani:hover {
  cursor: pointer;
}
MrBrdo

Zgodovina sprememb…

  • spremenilo: MrBrdo ()

jeryslo ::

Hvala za odgovor obema!

AndyS je izjavil:


Za svoje dobro se spomni drugega načina....


:DTo verjetno zaradi sql injection, ne?

In ravno tukaj imam še eno vprašanje.

1. Če imam narejeno tako, da uporabnik izbira med ponujenimi možnostmi in bi deval informacije v URL naslov, kakor sem si sprva zamislil, potem bi lahko uporabnik poskusil z recimo DROP tablename, ali pa kaj podobnega, ne?
2. Če naredimo tako kot je MrBrdo predlagal, da shranjujem v spremenljivke možnosti, ki jih uporabnik izbere in potem dobim s pomočjo php-ja vrednosti iz JS spremenljivke(a to sploh gre?), potemtakem sql injection ni možen, ne?

AndyS ::

Shranjuj v spremenljivko in naredi POST naprej.. Če ne znaš/nočeš POST-a, pa daj v GET oz. url (ali če hočeš AJAX - karkoli ti pač prav pride v dani situaciji).

SQL injection pa na preprečuješ na frontendu, ampak v backendu - torej v tvojem primeru s PHPjem za vsak parameter, ki ga daš v poizvedbo.

jeryslo ::

Hvala za odgovor, sem potem naredil s POST. Imam pa še eno vprašanje:8). Namreč sedaj ko sem naredil s post:
<form action="look.php" method="post">


V look.php imam tisto kar je v izbiri.php + odgovor z poizvedbo v bazi podatkov. Da sem ohranil, kar je uporabnik izbral v izbiri.php(zato, da mu ob ponovni poizvedbi ne bo potrebno nastavljati vseega še enkrat) sem v look.php dodal nastavitev za checkbox s pomočjo php-ja:

<input type="checkbox" id="temperatura" name="temperatura"  onclick="EnableDisableButton(this,1);" <?php if(isset($_POST['temperatura'])){echo " CHECKED";} ?> />Temperatura<br />


Toda urejevalnik mi "teži" da v XHTML transitional je prepovedana uporaba
<?php ?>
v
<input>
tag-u. Zato me zanima, če obstaja še kakšen drugi način, kako prepisati nastavitve, ki jih je prej uporabnik nastavil v drugem dokumentu.

AndyS ::

Jah urejevalnik ti teži, ker mešaš html kodo s phpjem in je zmeden, vendar zaradi tega na koncu dokument ne bo not valid ker se php skompajla..

Za silo delaš vredu in je ql način.. Če nočeš mešati html in php, bo treba vpeljati templejte.

Sicer pa podatke lahko POSTaš na isto stran, da ne boš imel kopije iste strani z minimalnimi spremembami in nato le preverjaš ali je POST nastavljen. To je sicer bolj začetniški način, ampak za toliko časa, da spoznaš osnove, bo.

jeryslo ::

AndyS je izjavil:

Sicer pa podatke lahko POSTaš na isto stran, da ne boš imel kopije iste strani z minimalnimi spremembami in nato le preverjaš ali je POST nastavljen.


No tole je pa definitvno boljša rešitev, sem že naredil tako:D. Še eno vprašanje, kateri je najboljši način za vstavljanje v html tag select na podlagi baze podatkov. Namreč najprej sem hotel narediti z php, da bi pač naredil query na bazi ter potem izpisal direkt html kodo s php toda problem je, da uporabnik najprej izbere datum(leto/mesec/dan) šele potem se gre gledati v bazo podatkov vnose za ta dan. Torej bi moral tako speti vnovič nalagati stran, da bi se ta "pogojni" php izvršil in dodal vnose v select, potem bi moral pa še enkrat pomniti vse izbire, ki jih je uporabnik izbral.A bi bilo to mogoče lažje narediti s cookie?

MrBrdo ::

Moraš refreshat stran ali uporabit ajax ali uporabit javascript. Najboljše v tem primeru bi bil ajax. Bolj natančno si boš moral pa malo sam prebrat o tem.

AndyS je izjavil:

ker se php skompajla..

No ja.. ne vem če bo to držalo.
MrBrdo

Tr0n ::

Ajax = javascript. :)

MrBrdo ::

Tr0n: ni res.
MrBrdo

Tr0n ::

Ok, Ajax = asinhron javascript in XML. :)

MrBrdo ::

No saj, gre za drugo rešitev.
Javascript rešitev: v javascriptu narediš npr. polje vseh možnosti za select, glede na vse možne datume ki jih je možno izbirat. Ko uporabnik izbere datum se enostavno preko Javascripta preberejo iz tega polja ustrezne vrednosti.
Ajax rešitev: se pošlje XHR request strežniku ki prebere iz baze možnosti za izbran datum in jih vrne nazaj
MrBrdo

Tr0n ::

Ok, ampak vzadaj je vse javascript. :)

MrBrdo ::

Ne ni, podatki ki se prenašajo načeloma niso Javascript, temveč so npr. XML ali JSON :) Ampak saj to ni več pomembno...
Pač jaz osebno ločim Ajax in Javascript predvsem po tem ali se uporablja XHR, je pa stvar dosti prepuščena interpretaciji.
MrBrdo

Zgodovina sprememb…

  • spremenilo: MrBrdo ()

AndyS ::

MrBrdo je izjavil:


AndyS je izjavil:

ker se php skompajla..

No ja.. ne vem če bo to držalo.


Saj vsi vemo za kaj gre ane (in da sem se naredodno izrazil), in zakaj mu urejevalnik ne validira...

jeryslo ::

MrBrdo je izjavil:

Javascript rešitev: v javascriptu narediš npr. polje vseh možnosti za select, glede na vse možne datume ki jih je možno izbirat. Ko uporabnik izbere datum se enostavno preko Javascripta preberejo iz tega polja ustrezne vrednosti.


To ne bo šlo, ker se bazi podatkov z programom, ki je napisan v Javi vseskozi dodajajo novi vnosi. Imam namreč vremensko postajo in mi beleži na vsakih 5min podatke v datoteko, iz koder jaz potem z programom preberem zadnje vnose in jih dodam v bazo.

MrBrdo je izjavil:


Ajax rešitev: se pošlje XHR request strežniku ki prebere iz baze možnosti za izbran datum in jih vrne nazaj


Tako da bo tale rešitev veliko boljša. Hvala za pomoč!

MrBrdo ::

jeryslo je izjavil:


To ne bo šlo, ker se bazi podatkov z programom, ki je napisan v Javi vseskozi dodajajo novi vnosi. Imam namreč vremensko postajo in mi beleži na vsakih 5min podatke v datoteko, iz koder jaz potem z programom preberem zadnje vnose in jih dodam v bazo.

Sej ni nihče rekel, da moraš podatke na roko vpisat... Narediš recimo PHP skripto, ki izpiše javascript recimo
<?php header("Content-type: text/javascript"); ?>
bla bla javascript koda
<?php foreach ($podatki_iz_baze as $idx => $val) { ?>
polje[<?= $idx ?>] = <?= $val ?>;
<?php } ?>
itd

Potem pač v HTMLju napišeš nekaj takega:
<script type="text/javascript" src="generator_podatkov.js.php"></script>

Tukaj lahko uporabiš še en trik, da se skripta slučajno nebi za-cachearala v brskalniku:
<script type="text/javascript" src="generator_podatkov.js.php?<?= time() ?>"></script>


Seveda lahko vključiš vse skupaj tudi kar direktno v script tag na sami strani (le polje, kakšne funkcije ki se izvajajo nad njem pa so lahko v .js fajlu). Torej da se razumeva, npr. v Head bi dodal script tag in noter z pomočjo phpja generiral ustrezne JS prireditvene stavke za polje možnosti...
Moj nasvet: če je teh podatkov sorazmerno malo (recimo do par KB) potem jih lahko kamot vključiš v en script tag in ne uporabiš Ajaxa in je to najboljša rešitev. Stran bo tako bolj odzivna saj bojo se podatki spreminjali instantno, in obremenitev strežnika bo manjša. Če je pa podatkov veliko potem pa je Ajax boljša rešitev.
Ajax ni švicarski nož ;)
No edino še ena prednost ajaxa je tu in sicer da se stran lahko cache-ira, medtem ko če bi vključeval polje v script tagu kar inline, bi morali brskalniki vsakič ponovno nalagat cel HTML, kar bi lahko bil problem recimo če bi mel zelo zelo dolg HTML, kar pa ni zelo verjetno, pa še to lahko rešiš tako kot sem na začetku napisal. Trenutno so latence večji problem kot pasovna širina povezav tako da je veliko bolše če se pošlje samo 1 zahteva (torej samo za HTML brez kakega ajaxa), saj tako uporabnik ne občuti dvojne latence ker se podatki naložijo skupaj s stranjo.

Če še malo primerjam, torej pri Ajaxu se lahko potencialno ustvari več povezav do strežnika, v vsakem primeru pa več requestov, kar posledično pomeni več kontrolnih podatkov, pomeni dodatne latence, in pomeni večjo obremenitev strežnika, ker mora npr. ponovno pognat PHP, ponovno naredit SQL query itd., medtem ko če ne uporabiš ajaxa to pomeni samo izpis malo več podatkov, strežniku pa ni treba 2x iskat izvršne datoteke in tako naprej, tako da je to načeloma veliko hitreje, razen npr. če je teh podatkov res veliko.
Če pa bi imel recimo veliko podatkov in bi pričakoval velik naval na stran, bi lahko celo uporabil neko hibridno rešitev, kjer bi v script naložil recimo le podatke za nekaj zadnjih dni, ker verjetno uporabniki to najbolj pogosto gledajo, če pa potem podatek ne bi obstajal v polju pa bi naredil ajax request. Samo to predvidevam da pri tebi ni potrebno oz. ti nebi prav dosti koristilo. Je pa kar lepa rešitev, sicer najbolj kompleksna.
MrBrdo

Zgodovina sprememb…

  • spremenilo: MrBrdo ()

jeryslo ::

Uf, hvala za izrčpno razlago, se vidi FRI power:). Bom pa šel verjetno z Ajax(XMLHttpRequest) to delat, sej je že zdaj vnosov v bazo čez 50000.

Zgodovina sprememb…

  • spremenil: jeryslo ()


Vredno ogleda ...

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

PHP POST težava

Oddelek: Programiranje
121411 (1277) DeeJay
»

AJAX kratke naloge

Oddelek: Izdelava spletišč
192139 (1606) Yacked2
»

PHP in objektno programiranje (strani: 1 2 )

Oddelek: Programiranje
8511242 (9709) kivi113
»

[php] preverjanje online uporabnikov

Oddelek: Programiranje
261914 (1570) cobrica
»

[php] Knjiga gostov

Oddelek: Izdelava spletišč
293065 (2268) darix

Več podobnih tem