Wysłanie zmiennej z PHP do funkcji w JS

0

Dzień Dobry,
Pytanie dość trywialne, ale nie potrafię sobie z nim poradzić. W pliku index.php mam napisaną funkcję wyrzucającą okienko popup:

function myFunction(text="empty file") {
    alert(text);
}

następnie chcę do niej przekazywać tekst do okienka, tak by pokazywało się to po kliknięciu na link/tekst, dlatego w drugim pliku posiadam taki kod:

print("<TR><TD><a target=blank title='Information about run' onclick='myFunction()'>Information about run</a></td>");

Taka funkcja wyświetla komunikat "empty file" po kliknięciu na tekst "Information about run"

Chciałbym jednak przekazywać tam konkretny tekst, więc zmieniłem na:

$ftext=0;
print("<TR><TD><a target=blank title='Information about run' onclick='myFunction($ftext)'>Information about run</a></td>");

Do momenty gdy ftext jest intem, wszystko działą poprawnie, zmieniając na jakiegokolwiek stringa np:

$ftext="ppp";

Przestaje działać możliwość naciśnięcia tekstu "Information about run".

Z góry dzięki za pomoc.
Krystian

1

Słuszna obserwacja z tym intem.

Zobacz jak wyglada Twój kod po wyrenderowaniu.

Które z poniższych wywołań jest/są poprawne:

foo(test);
foo('test');
foo(0)
foo('0')
0

w/g mnie wszystkie oprócz pierwszego wywołania są prawidłowe.
Drugie przekazuje stringa, trzecie inta, czwarte stringa w którym jest wpisane zero.
Mam rację? Zmieniając nawet kod na:

$ftext='ppp';

Nie ma żadnych efektów.
Krystian

1

Okej, masz racje. To teraz zobacz jak wyglada Twoje wywołanie w wyrenderowanym html :)

0

Czy chodzi Ci o podwójny cudzysłów wewnątrz printa? wersja z pojedyńczym nie działa. Samo wywołanie wewnętrzej funkcji przy:

$ftext='ppp';
print("<TR><TD><a target=blank title='Information about run' onclick='myFunction($ftext)'>Information about run</a></td>");

lub

$ftext='ppp';
print('<TR><TD><a target=blank title='Information about run' onclick='myFunction($ftext)'>Information about run</a></td>');

Prowadzi do braku wyświetlenia czegokolwiek na stronie.

Krystian

1

@rosoladm: Poćwicz sobie w phpie konkatenację stringów za pomocą apostrofów i cudzysłowiów .
Poćwicz to łącząc różnych typy zmiennych - np stringów które same w sobie zawierają jakiś znak z powyższych. Następnie dowiedz się jak działa funkcja sprintf - ją też polecam stosować. A na koniec, albo może i na sam początek - zobacz jaki kod masz w źródle wygenerowanej strony i zobacz dlaczego jest tak a nie inaczej. Mam wrażenie że dopisujesz zmianę, odświeżasz stronę i nie widzisz efektu.

1

Bardzo nie chcę Ci dawać gotowego rozwiązania. Otwórz źródło strony (ctrl + shift + i) i zobacz jak wygląda ten kawałek kodu po wyrenderowaniu:onclick='myFunction($ftext)' po czym porównaj to z tymi czterema wywołaniami, które Ci wyżej podesłałem. Podpowiem, że problem faktycznie leży w cudzysłowiach, ale nie tam, gdzie go szukasz.

0

Dzięki za opinie, postaram się to jutro rozwiązać.
Bardzo szanuję "wędkę" a nie "rybę" :)
Krystian

0

Dzięki za pomoc, choć wciąż nie rozwiązany problem.
Zgodnie ze stroną: http://phpkurs.pl/ciagi-znakowe-stringi/
Stringi w PHP definiuję jako $var="ppp";
Tak zdefuniowany string:

 $ftext="ppp";
        print("<TR><TD><a target=blank title='Information about run' onclick='myFunction($ftext)'>Information about run</a></td>");
</td><TR><TD><a target=blank title='Information about run' onclick='myFunction(ppp)'>Information about run</a></td></TABLE>

Jeśli zmienię na:

 $ftext="ppp";

Czy wciąż w złym miejscu szukam błędu w cudzysłowiach?
Krystian

1

Stringa definiujesz w cudzyslowiach lub apostrofach, Twoim problemem jest fakt ze myślisz że skoro string jest w cudzyslowiach to ze i te cudyszlowy trafia do zmiennej w jsie. A tak nie jest. Cudzysłów jest niejako niewidoczny gdy używasz tejże zmiennej.jak robisz echo $zmienna to Ci się cudzysłów przecież nie wyświetla. A Twoim zadaniem jest przekazanie do jsa takiego stringa który będzie zawierał cudzyslowia lub apostrofy. Kombinuj, bo to na prawdę prosta rzecz.

1

Jeżeli zrobisz coś takiego

$foo = "jakaś tam zmienna";
echo $foo;

to wynikowy tekst na stronie wygląda dokładnie tak:

jakaś tam zmienna

Jeżeli zrobisz coś takiego:

$foo = 'Jakis link';
echo "<a href='#test'>" . $foo . "</a>";

to dostaniesz

<a href='text'>Jakis link</a>

PHP niejako podmieni zmienną $foo jej wartością. To, że dookoła stringa masz cudzysłowy nie nie oznacza, że cudzysłowy wchodzą w skład tego stringa. To po prostu sposób na rozpoznanie przez silnik PHP, że taki ciąg znaków oznacza string. Tak samo jak $ przed nazwą zmiennej oznacza zmienną.

Więc jeżeli zrobisz echo $foo to do przeglądarki trafi tekst Jakiś link bez cudzysłowów.

Jeżeli weźmiemy ten fragment kodu HTML

</td><TR><TD><a target=blank title='Information about run' onclick='myFunction(ppp)'>Information about run</a></td></TABLE>

i wyodrębnimy z niego onclick,

myFunction(ppp)

to które wywołanie z tych, które Ci wyżej podałem przypimina powyższe wyrażenie?

1

Ok, Mam, teraz działa, wystarczyło napisać:

$ftext='"ppp"';

Dzięki za pomoc.
Krystian

0

Hmm pojawił się kolejny problem. Potrzebuje wczytywać dane z pliku i wrzucać je do popup'a.
Wszystko wczytuję z pliku funkcją:

        while(!feof($myfile))
        {
            $linia = fgets($myfile);
            $zawartosc .= $linia;
        }

Definiując wcześniej plik:

$myfile = fopen($env, "r") or die("Unable to open file!");

Do tego zmieniłem trochę zmienne:

        $ftext='"'.$zawartosc.'"';
        print("<TR><TD><a target=blank title='Information about run' onclick='myFunction($ftext)'>Information about run</a></td>");

Niestety w pliku są apostrofy, w źródle (biorąc tylko pierwszą linijkę dostaję:

<TR><TD><a target=blank title='Information about run' onclick='myFunction("export ALIROOT_VERSION='VO_ALICE@AliPhysics::vAN-20170322-1'
")'>Information about run</a></td></TABLE>

I niestety dalej strona nie działa. Zmieniając linikę z dodawaniem apostrofów, cudzysłowiów na:

$ftext="'".$zawartosc."'";

Dalej nie otrzymuję efektu.

Podejrzewam, że problemem są apostrofy w pliku, czy można to jakoś rozwiązać zachowując je?
Krystian

1 użytkowników online, w tym zalogowanych: 0, gości: 1