Pozivanje php funkcije pomoću <a href>

Na stranici prikazujem redove s podacima u ovom formatu:

:arrow_left: 1. neki podaci :arrow_right:
:arrow_left: 2. neki podaci :arrow_right:
:arrow_left: 3. neki podaci :arrow_right:

Klik na jednu od strelica treba napraviti dvije akcije:

  1. upis u bazu
  2. brisanje reda teksta

Ovako nekako:
<a href='<?php upis(); ?>' onclick='document.getElementById("dname<?php echo $ii ?>").style.display = "none";'><img src='arrow-right.svg'></a>

Brisanje reda je ok, ali pozivanje funkcije preko href='<?php upis(); ?> ne radi. Da li se to može tako nekako riješiti ili postoji drugi način? Napominjem da mi ne treba URL, nego samo funkcija koja bi odradila malu promjenu u bazi.

Daj kod koji ne radi tj. upis() i kod vezan za tu funkciju.

Ma nisam ni došao do koda za upis(), nego mi ne poziva bilo koju funkciju na ovaj način. Da li je ovo ispravna sintaksa?

Daj još malo mesa (koda) nemoj nam samo kosti u jagmu bacati. :stuck_out_tongue:

  • Da l’ si odlučio da ideš AJAX-om il’ običnim HTTP request-om?
  • Je l’ to forma u pitanju (tj. više njih za svaku porudžbinu)?
  • Jesi li u razmišljanju da naknadno dodaješ proizvode u narudžbu (?cijenim da jesi jer si ostavio/planiraš mogućnost editovanja narudžbe)

Za sve od ovog treba ti kod. Tj. nama treba da bi znali kako da ti pomognemo.
Isto tako, ako ti je ovo u nastajanju, razmisli o PHP framework-u. Usporiće te za 10-20 dana dok ne savladaš na nivo kojim prikazuješ PHP sad al’ će onda da ti bude puno lakše. Ovo je moja procjena (u slučaju da baš zapneš s učenjem), a možda i griješi pa ti klikne i odradiš to puno lakše i brže.

1 Like

Hajde prvo da otklonim jednu banalnu sumnju. :slight_smile:
Smije li se u PHP-u iz pozvane funkcije pozivati druga funkcija?
Evo npr. smije li neka_funkcija() pozivati test()?
Moguće da tu nešto griješim…

function neka_funkcija() {

	// ... code
        test(); 
?>

function test() {
	// ... code
?>

Ovo što se prikazuje je u div-ovima i Bootstrap rows. Nisu forme.
Je li znači da se pomoću <a href> ne može pozvati php funkcija (koja bi napravila promjenu u bazi) nego mora AJAX?

Može se pozvati. Sve što sumnjaš možeš provjeriti ovde (ili na svom lokalnom/deelopment serveru).
Ali ti ne može raditi tako za tvoj slučaj. U stisci sam sad s vremenom za detaljan odgovor.

1 Like

A da li ima neki servis na koji se može postaviti code (php i/ili kombinovano) kao što je jsfiddle.net, pa ovdje staviti samo link?

Trn trn …što smo rekli? HTML+PHP = HTML

Moraš pogledati dobiveni HTML koji ispada iz toga i sam zaključiti zašto ne radi kako očekuješ. :wink:

Gledao sam, naravno. Ako ništa drugo bar tu lekciju sam savladao. :blush:
Ako stavim, npr.

function upis(){
	$a="xy";
	var_dump($a);
}

onda mi

a href='<?php upis(); ?>'

pravi bukvalno ovakav URL:

localhost/orders/string(2) "xy"

Da li je moja sintaksa pogrešna ili ovo mora da ide preko AJAX-a?

Zasto radis ovaj var_dump u upis funkciji ? Vrati vrijednost iz funkcije i onda je samo pozoves i ispises vracenu vrijednost gdje treba.

function upis(){
	$a="xy";
	return $a;
}

a href='<?php echo upis(); ?>'
Summary

nemam blage veze o PHP-u :slight_smile:

1 Like

Ne smijem se više upuštati u prijedloge jer je kod već izuzetno nepouzdan.
Recimo da mu stvaraš linkovanje na update route što je GET request a to znači da će svako kucanje URL-a u browser-u (bez ikakvog klikanja linka) raditi promjene na bazi. Pogotovu što će browser pamtiti URL-ove pa će i slučajnih posljedica (a neželjenih biti masu).
Čak i da riješiš role/permission ljudima od povjerenja, kod je vrlo prone to error.

Samo se umrijeti mora.

Uporedo s rečenim u prvom pasusu, AJAX je bolja varijanta jer bi se mog’o postaviti JS confirmation box. Daleko je to od sigurnosti za [moj] standard, al’ daj šta daš.
Ako nisam odavno ponovio, i dalje stojim iza toga da treba da kreneš to u framework-u da radiš.

1 Like

Pa ako se pratilo od početka topica meni je funkcija za koju pitam (može li se pozivati preko href-a) trebala da upisujem u bazu. Zar var_dump ima neke veze sa upisom u bazu? Napisao sam bezveze, a vidim da je ipak trebalo staviti “neki kod”. No dobro, moja greška…

A u vezi ovog “nemam blage veze o PHP-u :)” stvarno s tim nemam problem. Nije baš da nemam blage, ali nisam puno ni odmakao od toga. Znam da tako stvari stoje, jer ovo mi nije primarno zanimanje. Ali uzeo sam sudbinu u svoje ruke da pokušam nešto promijeniti i rad na sebi je ono u šta trenutno puno ulažem. Pa vidjećemo kakvi će biti rezultati…

Svako dobro.

Ovo “nemam blage veze o PHP-u” se odnosilo na mene, ne na tebe.

Pa sta si htio postici s tim kodom sto si napisao bezveze ? Moras se malo vise potruditi kada postavljas pitanje, shvatam da si na pocetku i da je tesko se izraziti, ali preleti par puta preko pitanja i probaj procijeniti da li ce druga osoba razumjeti u potpunosti to sto tebe muci.

:slight_smile:

Ma svakako preletim više puta preko onog što napišem, ali izgleda da još stavljam pretpostavku da se podrazumijeva tamo gdje ne treba. :grin:
Valjda je i to neka vještina koja se vremenom savlada…

Ajde onda rucno napisi koji HTML zelis dobiti za navedeni <a> tag, pa da vidimo sto grijesis kod php-a.

Zapamti to ime (Jon Skeet).

1 Like

Pod dojmom objašnjenja koje sam našao googlajući (prije postavljanja pitanja ovdje) pogrešno sam usmjeren da href može sadržavati samo URL, ali ne i funkciju. Još mi @tpojka odmah u prvom odgovoru tražio kod, i da sam ga shvatio kako je trebalo ne bi se ovo traženje rješenja ovoliko razvuklo. Tek kad sam pokušao sa kodom kakav mi je zaista trebao (update u bazi) iznenadio sam se da to zaista i radi. :roll_eyes:
Taj kod je banalni update u bazi:

function upis(){
  $db = mysqli_connect('localhost','root','','name') or die("Connection error");
  $sql = "UPDATE narudzbaStatus
          SET transport = 1
          WHERE id = 340";
  $query = mysqli_query($db,$sql);
}

A ovo je vezano uz (na početku pomenuti) href:

<a href='<?php upis(); ?>' onclick='document.getElementById("dname<?php echo $ii ?>").style.display = "none";'><img src='arrow-right.svg'></a>

E sad ovdje nastaje novi problem. Dok je ovaj <a> imao funkcionalan samo onclick, ali ne i href, radio je to što treba - brisao željeni red iz popisa (odnosno jedan div). Čak se i ostatak liste (ispod njega) pomjerao za jedno mjesto nagore. Dakle, tačno ono što mi je trebalo. No, osim brisanja trebala mi je istovremeno i promjena u bazi. Međutim, kad sam u <a> dodao ovaj dio href='<?php upis(); ?>' nije radilo kako sam zamislio. I tada se Href izvršavao, ali onclick ne. Kako ih natjerati da se oba izvrše? :grin:
Ako se ne varam, onclick je default behavior za href, i kada su oba definisana izvršavaju se po nekom redu, ali ne znam po kojoj logici se to određuje. Da li se u ovom slučaju dešava neki konflikt te vrste i treba li (može li?) se usporiti izvršavanje jednog na konto drugog? Ili je možda nešto treće u pitanju?

Izdvoj onclick event kod i probaj ovako

<a href='<?php upis(); ?>' onclick='hideIdElement("dname<?php echo $ii ?>")'><img src='arrow-right.svg'></a>
<script>
hideIdElement (elemId) {
  return function (e) {
    e.preventDefault(); // this will stop default browser behavior
    document.getElementById(elemId).style.display = "none";
  };
};
</script>

Bez promjene. Mijenja u bazi, ali ne briše sa liste.