Poziv PHP funkcije preko linka

Pozdrav ekipa!

Zanima me kako mogu pozvati neku php funkciju preko linka?

Konkretno trebao bi kada se klikne na link da se pozove funkcija i onda ispiše rezultat…

pretpostavljam da trebam js za to?

Pogledaj si jQuery .get, jQuery .post i jQuery .ajax to ti treba.

novi sam u ovome pa bi te zamolio za malo više detalja :slight_smile:

recimo da imam
funkcije.php datoteku:

//ovdje je jos switch struktura
function prva() {
echo "prva funkcija";
}

function druga() {
echo "druga funkcija";
}

i želim u index.php datoteci preko linka pozvati funkciju iz funkcije.php datoteke.

Koliko sam skužio to bi išlo ovako nekako? (totalni sam pocetnik tak da lako moguce da sam ovo totalno fulao :neznam:)

 $.ajax({ 
  type: "POST", 
  url: "funkcije.php", 
  data: "akcija=1", 
  success: function(data){ 
  
  } 
}); 

Gledam onu dokumentaciju od jquerya već par sati al djabe :confused:

Edit:

Ok je to, ali lakše je sa $.get().

$.get('?akcija=1', function(data) {
	     $('#output').text(data);
})

Vidi primjer:

to majstore, hvala :wink:

hmm.tvoj primjer mi radi kada je sve u jednom fajlu, no kada sam pozvao funkciju koja se nalazi u drugom fajlu dobijem kao odgovor cijeli kod stranice : /

znaš možda kako da to sredim?

Ovo sa if else blokom u primjru ekea je BS.

Prvo i osnovno takve zahtjeve ne šalji preko GET requesta, prvo sigurnost, a drugo zbog REST(


) pricnipa razvoja aplikacija.

Drugo imaš u PHPu funkciju call_user_func(
http://www.php.net/manual/en/function.call-user-func.php
) i preko nje odradi to što ti treba.

Treće da bi dobio bilo što korisnoga u funkcijama ne koristi echo nego return.

E sad bi bilo ddobro da ti dam i jedan primjer.

e ovo ti ide u index.php datoteku
[HTML]

Creatif Code studio *, html { margin: 0; padding: 0; line-height: 0.8; } body { background: #f9f9f9; padding-top: 20px; } div { font-family: Lucida Grande, Lucida Sans, Arial, sans-serif; color: #333; font-weight: normal; font-size: 14px; }
		h1 { font-size: 36px; font-weight: 900; }
		a { color: #444; margin-top: 30px; display: block; text-decoration: underline; }
		.wrapper { width: 940px; margin: 0 auto; padding: 0 10px; }
		.response { margin-top: 30px; color: #0a0; }

	</style>

	<script>
		$(document).ready(function() {
			$('#call_php').click(function() {
				$.post(
					'info.php',
					{ 'func_name': 'test' },
					function(returned) {
						$('.response').text("This is response returned from called function: \" "  + returned + " \"");
					}
				);

				return false;
			});
		});
	</script>
</head>
<body>
	<div class="wrapper">
		<div class="header-wrap">
			<header>
				<h1>PHP i AJAX test</h1>
			</header>
		</div>
		
		<a href="#" id="call_php">Pozovi PHP funkciju</a>
		
		<div class="response"></div>
	</div>

</body>
[/HTML]

a ovo ubaci u info.php datoteku

primjeti da sam dolje stavio echo, ali sam radi jednostavnosti primjera. Uživaj

Puno hvala za ovaj primjer samo zanima me kako bi toj funkciji mogao prosljediti neki argument? Probao sam u onu varijablu func_name dodati argumente ali izgleda da tak ne radi : /

Kao što sam već rekao totalni sam početnik, tako da je svaki savjet i više nego dobrodošao :slight_smile:

btw pozdrav iz orahovice :stuck_out_tongue:

da naravno da ne radi, onda bi trebao malo promijeniti i cijelu stvar, uglavnom vidim da ova tema postaje malo opširnija pa ću to sve skupa uobličiti u jedan blog post - večeras.

Sada na brzinu da ti odgovorim, u one vitičaste zagrade dodaj i drugi argument, npr.

{ ‘func_name’:‘test’, ‘arg1’ : ‘neki tekst’ }

i onda u info.php datoteci koristi

call_user_func_array( $post['func_name], array($post[‘arg1’]) );

Normalno moraš promijeniti i

$post = (isset ( $_POST[‘func_name’] ) ) ? $_POST[‘func_name’] : null;

u

$post = (isset ( $_POST ) ) ? $_POST : null

http://www.php.net/manual/en/function.call-user-func-array.php

[quote=“thouhoto”]hmm.tvoj primjer mi radi kada je sve u jednom fajlu, no kada sam pozvao funkciju koja se nalazi u drugom fajlu dobijem kao odgovor cijeli kod stranice : /

znaš možda kako da to sredim?[/quote]

Trebaš paziti da skripta koja odgovara ispiše samo tekst (HTML, JSON, XML…) koji ti treba, a ne i cijelu stranicu.

Hajde da još malo naučim od tebe:

Po čemu je get sigurniji od posta u situacijama kada dohvaćaš jednostavna string?

Da li zaista REST brani GET kod prikaza podataka? Ne koristi li Google search GET kod proslijeđivanja parametara?

A što ako ne želim ljudima otkrivati naziv svoje funkcije? Po čemu bi call_user_func() bio nonBS rješenje od običnog if/else ili switch/case pogotovo u situacijama kada postoje kompleksniji zahtjevi?

Volio bih vidjeti tvoju verziju primjera gdje koristiš samo return.

Hvala!

Kad već spominješ sigurnost, mislim da je veći propust to što dozvoljavaš krajnjem korisniku da pozove funkciju koju god zaželi.
Što misliš da se kao “func_name” pošalje “unlink” s argumentom “index.php” (to se da jednostavno napraviti u operi), šta bi se dogodilo ? :slight_smile:

Moja preporuka je da funkcije koje želiš koristiti staviš u niz i provjeravaš da li je funkcija u tom nizu, ako je, tek onda pozoveš funkciju.

[quote=“antelaca”]Kad već spominješ sigurnost, mislim da je veći propust to što dozvoljavaš krajnjem korisniku da pozove funkciju koju god zaželi.
Što misliš da se kao “func_name” pošalje “unlink” s argumentom “index.php” (to se da jednostavno napraviti u operi), šta bi se dogodilo ? :)[/quote]
Veliko sranje. :slight_smile:

Svjestan sam toga i moja pogreška je što nisam napomenuo sigurnosni dio i kako je ovaj primjer ilustracija nečega što bi trebalo doraditi kako bi se dobilo što sigurnije okruženje, te da ovaj primjer nije dobro uputno na live stranici. Ispričavam se.

Ovo je dobra preporuka i slažem se s tobom.

[quote=“eke777”]Hajde da još malo naučim od tebe:
Po čemu je get sigurniji od posta u situacijama kada dohvaćaš jednostavna string?
[/quote]

http://www.cs.tut.fi/~jkorpela/forms/methods.html

Imaš odgovor zašto je to tako u gornja tri linka. A i koja mi je to usporedba Google koristi, pa što? Ako čujemo da se u Googlu može pišati na sred ureda hoćemo li i mi pištai na sred svog ureda jer je to kao cool, fuck the Google.

Pa upravo kod kompleksnijih zahtjeva dolazi do izražaja čistoća i brzina izvođenja koda sa call_user_func nego sa petljanjem if/else i switch/case, ne znam čemu kompliciranje kad ti je programski jezik sam od sebe dao jednostavnu mogučnost pozivanja ugrađene funkcije. Osim toga ne znam na koji način ti otkrivaš naziv svoje funkcije, kada varijabla ‘func-name’ može biti što god ti želiš, dakle može biti i naziva ‘nezanima_te_što_je_ovo’, a može jednostavno biti i ‘arg1’. I osim toga korisnik uopće ne zna na što se ta funkcija odnosi jer ako ode na stranicu info.php ti možeš tamo staviti npr.

[quote=“eke777”]Volio bih vidjeti tvoju verziju primjera gdje koristiš samo return.
Hvala![/quote]

Ne ide totalno bez echo-a, malo sam se krivo izrazio, ali

zamjeni s ovim

i dobit ćeš ono o čemu sam pričao.

[SIZE=“3”]Napominjem još jednom da su ovo tehnike i primjeri kako bi se zadani problem mogao riješiti, ali ne sadrže detaljne provjera bilo kakvih sigurnosnih rupa i nisu nikako za uporabu na live stranicama[/size]

Ne, ponovo se govori o slanju forme i prosljeđivanju povjerljivih podataka. AKo je riječ o dohvatu običnog stringa REST koncept i sigurnost ne rade razlike između post i get.

Poštujem tvoje mišljenje i eventualno klanjanje standardima, ali ako postoji servis koji koriste milijuni ljudi, i stvar dobro radi, smatram to kao dobru praksu bez obzira na standarde i koncepte.

Naprotiv, kod kompleksnih pravila, provjera i različitog broja i tipova parametara koje se trebaju proslijediti funkciji još uvijek je jednostavnije i preglednije koristiti switch/case nego pozvati funkciju no mater what.

Svejedno sa sigurnosne strane je loša praksa.

Naravno.

Živio druže!

[quote=“CreatifCode”]
Ne ide totalno bez echo-a[/quote]

[quote=“eke777”]
Naravno.[/quote]

Zašto ne? :slight_smile:

ili skracena verzija

Hvala na zgodnom, ali ne baš praktičnom primjeru :slight_smile:

Naravno, pod “echo” smo u konverzaciji podrazumijevali bilo koji način ispisa teksta u browseru (echo , print, ob_flush, die…). Postoji još niz manje uobičajenih načina komunikacije između severa, ali kada je ajax u pitanju, običan echo će biti sasvim u redu.


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja