PHP Function, körs utan att bli kallad på

Permalänk
Medlem

PHP Function, körs utan att bli kallad på

Functionen körs utan att jag kallar på den, när jag startar sidan så körs "alert(test)".
Någon som har någon bra teori?

<?php function myFunction(){ print "<script type='text/javascript'> alert('Test!') </script> "; } print "<a href='test.php' onClick='". myFunction() ."'><img src='img/nei.png'></a>"; ?>

Permalänk
Medlem

Du deklarar aldrig någon myFunction(), så när webbläsaren stöter på

alert('Test!')

Så kommer en alert-ruta dyka upp.

Visa signatur

Citera eller nämn gärna mig (@ToJa92) om du svarar på något jag skrivit.
Uppskattar du eller blir hjälpt av ett inlägg jag skrivit är jag tacksam om du gillar det.

Permalänk
Medlem
Skrivet av ToJa92:

Du deklarar aldrig någon myFunction(), så när webbläsaren stöter på

alert('Test!')

Så kommer en alert-ruta dyka upp.

hur ska jag göra där för att deklarera det då?

Permalänk
Medlem

Du kan inte kalla på en PHP-funktion med hjälp av javascript. Till det kan du använda dig av ajax istället.

http://stackoverflow.com/questions/7165395/call-php-function-...

Det som händer när du printar myFunction() är att den körs direkt. Eller egentligen printar du inte den, utan du rentav kör den. Tänk även på att PHP inte lämpar sig för fron-end-utveckling

Visa signatur

[Intel i7 4770K] [ GTX 1070] [Asus ROG VI Gene] [Corsair AX860] [Corsair 16GB Vengeance LP] [120GBIntel 520] [Bitfenix Phenom M]

Citera för svar

Permalänk
Medlem

Provat att köra den så här också, men blir samma sak.

<?php function myFunction(){ print "<script type='text/javascript'> alert('Test!') </script> "; } <a href='portal.php' onClick='<?php myFunction() ?>'><img src='img/nei.png'></a> ?>

Permalänk
Medlem
Skrivet av neterul:

Functionen körs utan att jag kallar på den, när jag startar sidan så körs "alert(test)".
Någon som har någon bra teori?

<?php function myFunction(){ print "<script type='text/javascript'> alert('Test!') </script> "; } print "<a href='test.php' onClick='". myFunction() ."'><img src='img/nei.png'></a>"; ?>

Du försöker kalla på en php-metod med javascript. Det går inte.

Definiera myFunction() i din markupkod (tillsammans med övrig javascript) och kalla på javascript-metoden istället.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

att jag valde att köra en javascript var bara för jag ville enkelt se (Trodde jag) om min funktion kördes.
har ändrat om den till:

function myFunction(){ print "Function hej hå!"; }

Problemet är att den körs ändå, innan du klickat på knappen med "onClick='myFunction();'

Permalänk
Hedersmedlem

Leedow har ju svarat på din fråga:

Skrivet av Leedow:

Du försöker kalla på en php-metod med javascript. Det går inte.

Definiera myFunction() i din markupkod (tillsammans med övrig javascript) och kalla på javascript-metoden istället.

Förklara mer vad det är du vill göra.
Vill du kalla på en PHP funktion måste du göra det via ett ajax anrop.

Vill du bara göra det i javascript så.. är det bara göra det

<script type='text/javascript'> function myFunction(){ alert('Test!'); } </script> <a href='' onClick='myFunction();'><img src='img/nei.png'></a>

Visa signatur

Dator, MOBO: Asus X99-A, CPU: Intel I7 6800k (3.4GHz), GPU: Geforce PNY 2070 Super, RAM: 4x8GB Corsair Vengeance LPX 2400MHz, OS-HDD: Intel 750 PCIe 400GB, PSU: EVGA SuperNOVA G2 850W

Permalänk
Medlem

Jag vill att när man klickar på knappen / bilden , så ska en funktion ändra värdet på en $_SESSION.

Problemet har varit att värdet på $_SESSION'n ändras så fort jag startar sidan, vilket jag inte vill utan
att den ska ändras då du klickar på knappen som sagt.

Om man kan ändra värdet på en $_SESSION med javascript vore det awsum, och antagligen enklast.

Annars vet jag inte hur jag ska gå till väga, just nu är alla idér på 0.

Permalänk
Hedersmedlem
Skrivet av neterul:

..ändra värdet på en $_SESSION..

Sessions går inte att ändra med javascript så då får du anpropa ett php script med ajax.

[EDIT] Du säger att session variabeln ändras när du startar sidan? Vilken variabel är det och hur ändras den?

Kan du förklara mer vad du försöker göra?...

Visa signatur

Dator, MOBO: Asus X99-A, CPU: Intel I7 6800k (3.4GHz), GPU: Geforce PNY 2070 Super, RAM: 4x8GB Corsair Vengeance LPX 2400MHz, OS-HDD: Intel 750 PCIe 400GB, PSU: EVGA SuperNOVA G2 850W

Permalänk
Medlem

funktionen ser ut så här:

function avbSoknad() { $_SESSION['avb'] = "1"; }

Jag vill helt enkelt att den ska köras då man klickar på en knapp. Då ska värdet ändras från 0 -> 1 på $_SESSION['avb']

Permalänk
Medlem

Som sagt får du köra det genom ajax, enklare att köra det genom jQuery. Snabbkodat nedan.

Huvudfil

mellan <head> och </head> lägger du till

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min...."></script> <script type="text/javascript"> jQuery(document).ready(function() { jQuery('a.button').click(function() { jQuery.get('editSession.php', function(data) { if(data == '1') { alert('Session ändrad till 1'); } else { alert('Fel förekom vid ändring av session.'); } }); }); }); </script>

Sedan ändrar du knappen till

<a class="button" href="test.php"><img src="img/nei.png" /></a>

Skapar filen "editSession.php" som skall ligga i samma mapp och innehålla din kodsnutt.

<?php echo $_SESSION['avb'] = '1'; ?>

Den stora frågan är snarare.. Varför lägger du inte in ändringen av sessionen på målsidan? Varför ändra sessionen och sedan gå till målsidan när du kan göra båda på målsidan i PHP?

Visa signatur

- Åldern har tagit ut sig i form av bekvämlighet -
------- Playstation 4/5 - Nintendo Switch -------

Permalänk
Hedersmedlem
Skrivet av neterul:

Jag vill helt enkelt att den ska köras då man klickar på en knapp. Då ska värdet ändras från 0 -> 1 på $_SESSION['avb']

Lägg $_SESSION['avb'] = 1; i en fil, kalla på den med hjälp av ajax (kan göras lätt med jQuery: http://api.jquery.com/jQuery.post/).

[EDIT] Se svaret ovan, mer utförligt

Visa signatur

Dator, MOBO: Asus X99-A, CPU: Intel I7 6800k (3.4GHz), GPU: Geforce PNY 2070 Super, RAM: 4x8GB Corsair Vengeance LPX 2400MHz, OS-HDD: Intel 750 PCIe 400GB, PSU: EVGA SuperNOVA G2 850W

Permalänk
Medlem
Skrivet av Klorixx:

Lägg $_SESSION['avb'] = 1; i en fil, kalla på den med hjälp av ajax (kan göras lätt med jQuery: http://api.jquery.com/jQuery.post/).

[EDIT] Se svaret ovan, mer utförligt

Var jag för snabb för dig?

Visa signatur

- Åldern har tagit ut sig i form av bekvämlighet -
------- Playstation 4/5 - Nintendo Switch -------

Permalänk
Hedersmedlem
Skrivet av Electrix:

Var jag för snabb för dig?

Mer "klickar på svara" och sekunden senare skriker någon i andra änden på kontoret
Därav att det kan ta lite tid innan man faktiskt skriver klart

Visa signatur

Dator, MOBO: Asus X99-A, CPU: Intel I7 6800k (3.4GHz), GPU: Geforce PNY 2070 Super, RAM: 4x8GB Corsair Vengeance LPX 2400MHz, OS-HDD: Intel 750 PCIe 400GB, PSU: EVGA SuperNOVA G2 850W

Permalänk
Medlem

Anledningen att målsidan är samma sida som start, är att jag har en if som kollar vad session har för värde och visar två olika efter
vilket värde den har, så efter de att den körts så laddas sidan om, och sidan visar en annan "sak"

Ska prova ditt jQuery förslag, tack!

Permalänk
Medlem

Electrix: Vill inte låta otacksam på någe vis, men det fungerade inte

Session'en ändrade inte värde.

EDIT:

BER OM URSÄKT! Jag som missade att skriva session_start(); först..

Nu fungerar det som det ska, tack för hjälpen!

Permalänk
Medlem

Värt att notera är följande:

PHP är server side script språk och således körs endast på servern innan sidan och resultatet av körningen skickas till klienten (webbläsaren).

JavaScript är client side script språk som körs i Klienten efter att sidan mottagits från server.

Numera finns också server side varianter av JavaScript så som Node.JS men det är överkurs i detta sammanhang.

Sedan skall man även tänka på att php filer du anropar via AJAX behöver ha:
session_start()

I sig om session variabler skall fungera korrekt.

Visa signatur

Fractal Design Arc Svart | MSI Z68A-GD55 G3 REV B3 | Intel® Core i7 2600K, 3.4GHz, 8MB | Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE LP | MSI GeForce GTX 670 | Phanteks PH-TC14PE CPU Cooler (vit) | Corsair Power Supply 650W TX M, Modular, ATX, PS/2 | SSD (okänd tillverkare) + 2 äldre SATA2 diskar på 750 Gb, 350 gb. | OS: Microsoft Windows 10 home.

Permalänk
Medlem
Skrivet av neterul:

Electrix: Vill inte låta otacksam på någe vis, men det fungerade inte

Session'en ändrade inte värde.

EDIT:

BER OM URSÄKT! Jag som missade att skriva session_start(); först..

Nu fungerar det som det ska, tack för hjälpen!

Aj, pinsam miss av mig. Ber om ursäkt! Kul att det funkade annars!

Visa signatur

- Åldern har tagit ut sig i form av bekvämlighet -
------- Playstation 4/5 - Nintendo Switch -------

Permalänk
Medlem

Mjaa det borde jag sätt själv också man kan inte få allt gratis. Tack för hjälpen!