Kreiranje onclick pomoću php

Da li je ispravno ovakvo pozivanje javascript funkcije (sa argumentima) preko onclick-a:
<button onclick="storagefunction(<?php echo $row['id'].', '.$row['ime'].', '.$row['prezime'].')'?>" type="submit">Start</button>

Ono što pokušavam da dobijem je:
onclick="storagefunction(neki_id, neko_ime, neko_prezime)"

Ne, jer ako pogledaš generirani HTML, vidjet ces da parametri funkcije nisu u navodnicima, a trebali bi biti…pošto su oni stringovi. Znači pobrini se da na dobivenom htmlu imaš i navodnike oko parametara.

3 Likeova

Inače, tako miksat HTML sa php-om može biti pain in the ass…za neke djelove HTML-a gdje imaš dosta toga za miksat.

Za takve slučajeve ti pomažu template-engineovi, gdje u najprimitivnijem smislu to može izgledati tako da napišeš cijeli HTML sa placeholderima, u tvom slučaju, template HTML bi izgledao:

<button onclick="storagefunction("@id", "@ime", "@prezime")'?>" type="submit">Start</button>

Te u momentu kada želiš taj template renderirati pozoveš funkciju koja će napraviti replace @placeholdera sa vrijednostima iz tvojih varijabli. Taj jednostavni pristup si možeš vrlo brzo i sam složiti…pa ga ukombinirati kako ti paše. A možeš se osloniti i na nekakav template engine koji nudi puno više toga za rad sa templateovima.

Svakako je veliki benefit imati HTML u clean obliku. :slight_smile:

1 Like

Evo mislim da sam posložio kako treba. Ne baš iz prve, ali proradilo je. :blush:
<button onclick="storagefunction(<?php echo '\''.$row['id'].'\',\''.$row['ime'].'\',\''.$row['prezime'].'\')'?>" type="submit">Start</button>

Međutim, ovo mi radi lokalno, ali ne i na serveru. Već mi se to dešavalo za php kod. Nikakvu grešku mi na serveru ne javlja, pa ne znam odakle da krenem tražiti grešku. Ima li možda veze sa verzijom php-a ili je nešto drugo u pitanju?

U takvim slučajevima baci pogled na HTML koji je iz svega toga ispao. “View page source” i vidjet ćeš kakav HTML si generirao sa PHP-om.

Browser nema pojma o PHPu koji si ti pisao…on samo vidi HTML koji je nastao kao result svega toga i stigao do njega.
Tako da ćeš pogledom na HTML vidjeti i razliku od servera do servera, ako su različiti serveri generirali iz nekog razloga različit HTML.

Također, ako je u nečem drugom caka, uvid u HTML će ti to također otkriti.

Tako bi recimo za svoj prvi pogrešna cod, uvidom u html vidio da tamo piše

<button onclick="storagefunction(neki_id, neko_ime, neko_prezime)" type="submit">Start</button>

umjesto očeivakoga:
<button onclick='storagefunction("neki_id", "neko_ime", "neko_prezime")' type="submit">Start</button>

1 Like

<button onclick="storagefunction('<?php echo $row['id'] ?>' '<?php echo $row['ime'] ?>' '<?php echo $row['prezime']?>')" type="submit">Start</button>

Pisem s mobitela pa mozda ima gresaka. U svkom slucaju ovo sto sam napisao je bolji pristup u nekim slucajevima.

1 Like

Pokušao sam i tako, ali razlika je samo u izlaznim rezultatima koji se prikazuju. U kodu ne vidim nikakve razlike.

Pa koja je razlika u HTML-u? Bas unutar page sourca? Kopiraj ovdje obje varijante dobivenog htmla za taj dio.

Edit… sad sam te tek skuzio sto si rekao. Pa ako je taj dio HTMLa isti u objema varijantama…onda je razlika u nekom drugom djelu codea. I moze bit svasta. Moras pratit sada dalje code od tog submita pa sta se desava na serveru kad je taj submit trigiran.

Ovdje slijedi nešto JS i PHP koda. Pomoću JS pišem u localStorage i već tu nastaje razlika. Isti kod, lokalno zapisuje novu vrijednost, a na serveru ostaje stara. Gledao i error_log fajl, ali tamo ne javlja nikakvu grešku.

Da li možda griješim sa ovim:

<form action="../order/order_number.php">
  <button onclick="storagefunction(<?php echo '\''.$row['id'].'\',\''.$row['ime'].'\',\''.$row['prezime'].'\')'?>" type="submit">Start</button>
</form>

Smiju li u okviru jedne forme postojati i action i onclick? Da li se u tom slučaju prvo izvrši onclick, pa onda action? Ima li tu nekih ograničenja?

To nije server radnja, nego do browsera…pa bi trebalo bit isto u obje situacije. Ali takve stvari si lako testiras …pa se radije drzi one “vjeruj use i u svoje kljuse” …i na svoje oči se uvjeri kako se sustav ponaša kada god imaš priliku. Tako najbolje i naučiš.

@costlyDeveloper

Pretpostavljam da ovako postavljeni jednostruki navodnici nisu ispravni?
'<?php echo $row['id'] ?>'

Čemu pretpostavka, ako te dijeli par sekundi da zaviriš u HTML koji ti generira PHP?

Očito mi je nekako da ako to ne radiš, da ne razumiješ neki bitan dio koji te onda jako usporava i ograničava.
Zato bih se ja fokusirao da skužimo koji dio ne razumiješ…pa da si olakšaš puno posao za ubuduće. Kako je rekao Isus, bolje čovjeka naučiti pecati nego mu dati ribu. :wink:

Pitanja su sljedeća:

  1. Dali znaš kako treba izgledati ispravan HTML koji trebaš dobiti?
  2. Ako da, zašto gornja pretpostavka … ako te dijeli par sekundi da vidiš kakav HTML ti generira PHP? … i jednostavno vidiš jel ispao ispravno?
  3. Da li znaš gdje vidjeti HTML koji ti generira PHP?
1 Like

Pogrešno sam formulisao pitanje. Kolega je predložio kod (naravno, testirao sam ga, nije radio), a meni je izgledalo (vrlo moguće i da griješim) da jednostruki navodnici možda nisu u redu, u smislu da jedan par jednostrukih ne može ići unutar drugog para jednostrukih:

<button onclick="storagefunction('<?php echo $row['id'] ?>' '<?php echo $row['ime'] ?>' '<?php echo $row['prezime']?>')"

Kolega je nešto pogriješio, ali ne to što ti misliš.
Ajde sada ovdje kopiraj HTML koji je generiran iz toga PHP-a, pa ćemo prodiskutirati zašto HTML izgleda tako kako izgleda.

  1. Pa nekako se više patim sa JS i PHP-om, tako da na HTML ne obraćam previše pažnje, računajući da to znam.
  2. Odgovorih da sam se krivo izrazio.
  3. Znam koristiti Inspect element u osnovnom obliku.
<form action="../order/order_number.php">
<button onclick="storagefunction1('1' 'Ime' 'Prezime')" type="submit">Start</button>
</form>

I što fali u tom HTML-u? Nešto da, što?

A navodnici meni izgledaju čisto dobro. :wink:
Vidiš da imaš dvostruke vani…i samo jednom unutra jednostruke. A oni navodnici jednostruki koji su bili unutar php-a …njih više nema.

Inače, malo teorije (koje mi se čini da ti fali, možda griješim. Neće svakako škodit):
PHP je dio coda koji postoji unutar php tagova. Ono što je izvan php tagova se ne obrađuje kao php code…nego će ostati u svom izvornom obliku. A ono što je unutar php tagova…to se obrađuje od strane php engine-a i rezultat toga, koji je “ispljunut” kroz echo metodu, se pridružuje tom djelu koji je izvan tagova. Iz toga razloga navodnici izvan php tagova nisu bili u nikakvom konfliktu sa navodnicima unutar php tagova. Jer php engine je obrađivao samo sintaksu unutar php tagova…a tamo su navodnici bili uredno posloženi.

Moraš također imati na umu, da se php obrađuje na serveru. Nakon što se php obradi, kao rezultat nastaje html. I samo HTML se šalje prema browseru, tj. prema računalu klijenta. Tako da browser niti nema pojma jel na serveru bio php ili neki drugi backend jezik. Browser samo vidi HTML koji stigne do njega.

1 Like

Da li bi parametri trebali biti odvojeni zarezom?

Tako je. …