[JavaScript] load() - z pliku .php (przekaz zmiennych?)

Może od razu zaznaczę, że w JavaScript robię dopiero pierwsze kroki. W sam język zbytnio się nie wgłębiałem bo jest mniej więcej podobny do reszty (php, pascal) - praktycznie większą uwagę skupiłem na JQuery i systemie AJAX.

Uczę się poprzez tworzenie i kombinowanie, jak coś nie wychodzi to zaglądam do internetu. Tym razem napotkałem na dość ważny problem, w którym potrzebuje raczej gotowego rozwiązania - czyli “jak inni to robią, że działa to tak jak należy”, stąd wolałem odezwać się na forum.

Ładując jakiś plik *.php do wybranego elementu na stronie wykorzystując funkcję load()

$('#okno1').load('test.php');

napotkałem się na pewien problem - mianowicie zmienne w ładowanym pliku, które są zdefiniowane w pliku w którym znajduje się element o id=okno1, nie są “odczytywane” - tzn. po załadowaniu pliku test.php wyskakuje błąd, że wykorzystuje on zmienną, która nie jest nigdzie zdefiniowana. Czytałem, że da się przekazać zmienne metodą POST i GET w ten sposób:

$('#okno1').load('test.php',{'test':'przykładowy tekst'});

Jednak nie specjalnie chce mi to działać, tzn. chcę przekazać pewną zmienną w ten sposób:

$('#okno1').load('test.php',{'userid':'<?php echo $userid; ?>'});

Próbowałem już za pomocą funkcji php include() załadować plik ‘function.php’ (w którym znajduje się zdefiniowana zmienna $userid) w pliku test.php - bez skutku. Może napiszę o co mi chodzi: - Np. tak jak na facebooku - zawartość sama się aktualizuje (tzn. odświeża się okno w którym wyświetlane są wszelkie aktywności naszych znajomych). Od strony php musi być jakaś zmienna, która definiuje zalogowanego użytkownika - tak aby na jego stronie głównej wyświetlać informacje tylko od jego znajomych. Przykładowo, aby wyciągnąć listę prywatnych wiadomości danego użytkownika należy użyć mniej więcej takiego kodu (od strony php):

mysql_query("SELECT * FROM pw WHERE odbiorca=".$userid);

Pod zmienną $userid zapisane byłoby id zalogowanego użytkownika (w moim przypadku wygląda to mniej więcej tak: przy logowaniu:

$_SESSION["userid"] = mysql_fetch_array(mysql_query("select id,login,pre from users where login = '".htmlspecialchars($_POST["login"])."' AND password = '".md5(htmlspecialchars($_POST["haslo"]))."'"));

$userid = $_SESSION["userid"]["id"];

Więc moje pytanie brzmi: w jaki sposób odświeżać dany element strony w taki sposób, aby wyświetlał różną zawartość pobraną z bazy danych zależnie od zalogowanego użytkownika.

//Jeżeli moje pytanie jest niezrozumiałe proszę o tym napisać - postaram się jakoś prościej napisać to co chcę zrobić.

jQuery tak dobrze nie znam, używam raczej Mootoolsa, ale z tego co widzę to load() służy do wywoływania funkcji po załadowaniu elementu.

Tobie chyba potrzebna jest metoda ajax(), która wywołuje podany URL, pod którym wyświetlane są tylko i wyłącznie dane, które pojawić się mają w oknie (jak rozumiem elemencie np.

)

Właśnie o AJAX’ie na razie dość mało wiem - czytałem nieco o nim na pewnej stronie, tam właśnie doczytałem się również o funkcji load(), która (według tego co czytałem) przeznaczona jest do ładowania plików *.php .

Co do linku, który podałeś - moja znajomość Angielskiego [moja ocena 4/10 :P] nieco utrudnia mi korzystanie z angielskich tutoriali. Może nie tyle, że nie rozumiem, co po prostu trudno mi się to czyta. Wolę coś polskojęzycznego.

Skoro tą zmienną trzymasz w sesji to po co ci to id wysyłane do skryptu?

Bo $_SESSION[“userid”][“id”] również jest ‘pusta’ gdy próbuję jej użyć w ładowanym pliku.

Maszsession_start(); zanim sprawdzasz sesje ?

Tak. Zaraz zrobię jakiś mini przykład, żeby można się było o coś oprzeć. Co do $_SESSION to jeszcze raz sprawdzę, czy da się ją wykorzystać w ładowanym pliku.

Nie odpisuj nim czegoś nie wstawisz bo mi powiadomienie nie zadziała :stuck_out_tongue:

by nie robić offtopa:

By twój tytuł nie wprowadzał w błąd radzę go zmienić. Sesje masz po to by tego wysyłania danych nie wymagać. Jak kolega wcześniej napisał, do tego służy ajax, bądź prostrza wersja get, lub post :slight_smile:

Ogólnie:

$.ajax({  type: "POST",//sposób (możesz zmienić na get)  url: "some.php",//gdzie wysyłasz zapytanie  data: { name: "John", location: "Boston" }//tablica w formacie jsondataType: "jsonp"; //typ danych zwracanych przez serwer (jeśli nic nie zwracasz nie musisz go dawać, np html script bądź jsonp)}).done(function( msg ) {//funkcja wykonywana po ukonczeniu zapytania, msg to zwrócone dane  alert( "Data Saved: " + msg ); //wyświetlamy zwrócone dane });[/code]

To samo możesz uzyskać poprzednio wspomnianą funkcją post:


[code=php]$.post("some.php", { name: "John", location: "Boston" },msg) {alert("Data Saved:" + msg);

a session_start() w wiadomosci.php ?

Nie masz też połączenia z bazą danych. Poza tym pisz zawsze <?php, bo <? nie zawsze działa :slight_smile:

Poza tym błąd cię informuje, że zmienna jest niezdefiniowana :stuck_out_tongue: Rzeczywiście twój angielski jest słaby :slight_smile:

Zmieniłem zgodnie z podanymi wskazówkami.

Oto aktualna zawartości pliku wiadomosci.php:

<?

session_start();

mysql_connect('localhost','root','') or die('Brak połączenia z MySQL');

mysql_select_db('js') or die('Wybrana baza danych nie istnieje.');


$userid = $_SESSION['zalogowany']['id'];


$wiadomosci = mysql_fetch_array(mysql_query("SELECT * FROM wiadomosci WHERE userid=".$userid));

echo $wiadomosci['tekst'];


?>

Z tym, że pod $_SESSION[‘zalogowany’][‘id’] nie ma żadnej wartości - a powinno być “1”.

Bo ma być userid a nie zalogowany. Nie śpij :stuck_out_tongue:

$_SESSION["userid"]["id"];

No tak. Działa.

Dziękuję za pomoc - jak zawsze można na Was liczyć :slight_smile:

Jeszcze takie małe pytanie przy okazji: do czego służy ‘->’ w php? Spotkałem się z tym nie raz w skryptach, jednak jak sam się uczyłem to nawet nie było o tym wzmianki. Ma to jakieś praktyczne zastosowanie? Piszę tutaj, bo szkoda by było zakładać nowy temat - to co piszą w niektórych kursach niewiele mi mówi, bo o klasach w php też nie słyszałem…

To operator wyłuskania. Służy do odwołania się do elementu klasy. Dojdziesz do tego jak zaczniesz się uczyć programowania obiektowego.