[Ajax][php]jak przesłać dane zmienną do formularza ajaxem

Witam pytanie mianowicie jak zmienić w ajaxie ,tak aby przesląć zmienną $login i $email z (czat.php)z zalogowanego użytkownika i przesłać go do formularza:

$(document).ready(function(){
	
       
	// Run the init method on document ready:
	chat.init();
	
});

var chat = {
	
	// data holds variables for use in the class:
	
	data : {
		lastID : 0,
		noActivity	: 0
	},
	
	// Init binds event listeners and sets up timers:
	
	init : function(){
		
		// Using the defaultText jQuery plugin, included at the bottom:
		$('#name').defaultText('Nickname');
		$('#email').defaultText('Email (Gravatars are Enabled)');
		
		// Converting the #chatLineHolder div into a jScrollPane,
		// and saving the plugin's API in chat.data:
		
		chat.data.jspAPI = $('#chatLineHolder').jScrollPane({
			verticalDragMinHeight: 12,
			verticalDragMaxHeight: 12
		}).data('jsp');
		
		// We use the working variable to prevent
		// multiple form submissions:
		
		var working = false;
		
		// Logging a person in the chat:
		
		$('#loginForm').submit(function(){
			
			if(working) return false;
			working = true;
			
			// Using our tzPOST wrapper function
			// (defined in the bottom):
			
			$.tzPOST('login',$(this).serialize(),function(r){
				working = false;
				
				if(r.error){
					chat.displayError(r.error);
				}
				else chat.login(r.name,r.gravatar);
			});
			
			return false;
		});
		
		// Submitting a new chat entry:

echo '<div id="chatContainer">

    <div id="chatTopBar" class="rounded"></div>
    <div id="chatLineHolder"></div>
    
    <div id="chatUsers" class="rounded"></div>
    <div id="chatBottomBar" class="rounded">
    	<div class="tip"></div>
        
        <form id="loginForm" method="post" action="">
            <input id="name" name="name" class="rounded" maxlength="16" />
            <input id="email" name="email" class="rounded" />
            <input type="submit" class="blueButton" value="Login" />
        </form>
        
        <form id="submitForm" method="post" action="">
            <input id="chatText" name="chatText" class="rounded" maxlength="255" />
            <input type="submit" class="blueButton" value="Submit" />
        </form>
        
    </div>
    
</div>';

Nic z tego nie rozumiem, zazwyczaj dane wysyła się z formularza do serwera a nie do formularza, a ty jeszcze chcesz wysyłać login i email. Takich rzeczy nie powinno się robić.

Może zle się wyraziłem,w miejscu gdzie w formularzu wyświetla się tekst przesłany ajaxem

$('#name').defaultText('Nickname');
		$('#email').defaultText('Email (Gravatars are Enabled)');

chcę podstawić dane zalogowanego użytkownika,czyli login i email i przesłać te dane do bazy.

  1. dałeś nie pełny kod JS

  2. nadal nic z tego nie rozuumiem

  3. dane które są znane serwowi w momencie przetwarzania żądania wstawiasz na stronie internetowej po stronie serwera, czyli np w php robisz echo tych danych w szablonie strony. Pytanie tylko po co je jeszcze wysyłać do bazy danych. Co ty chcesz w ogóle zrobić?

Sądząc po nazwie pliku, to ma być czat.

Dane takie jak login, czy email powinieneś wysyłać tylko raz, a później przesyłać dane sesji. 

Tak macie rację to jest czat i działa w ten sposòb,że są dwie tabele do jednej przesyłane są dane login i e-mail które podaje użytkownik w formularzu,a do drugiej treści.Chcę to tak zrobić,żeby wysyłać dane z zalogowanego użytkownika,czyli z sesji,tylko czy podstawić te dane w samym formularzu ,czy w js.Jeszcze alternatywnym rozwiązaniem byłoby wykorzystać tabelę z użytkownikami .Pytanie jakie rozwiązanie byłoby najlepsze???

Normalnie to wygląda tak:

  1. Użytkownik się rejestruje.
  2. Użytkownik się loguje - przesyła dane login / email i dostaje identyfikator sesji.
  3. Przy każdym zapytaniu (tutaj wiadomości)  wysyła ten identyfikator i resztę zapytania. Identyfikator zwykle trzyma się w ciasteczku.

Serwer wie, jaka sesja do jakiego użytkownika należy, więc poradzi sobie z wysłaniem informacji o nadawcy wiadomości.  

Identyfikator sesji to jakieś losowe liczby trzymasz je w ciasteczku. W bazie danych z sesjami trzymasz informacje o tym jaki użytkownik jest na danej sesji np przy pomocy user_id.

Za pomocą tego możesz zlokalizować w tabeli z userami który to dokładnie i masz dostęp do wszystkich danych usera. Jeśli chcesz wyświetlić coś w rodzaju

To skrypt wygląda mniej więcej tak:

  1. sprawdzasz czy sesja jest ustawiona czyli cookie
  2. sprawdzasz czy sesja istnieje w tabeli z sesjami
  3. odczytujesz który user “siedzi na sesji”
  4. odczytujesz dane usera z bazy danych
  5. wyświetlasz komunikat w taki sposób

gdzie w zmiennej user_name masz nazwę użytkownika z sesji (wcześniej popraną).

Możesz dodać informacje że jesteś zalogowany jako: Antek albo coś w tym stylu. A gdy Antek chce napisać wiadomość to ma forma z input text (może być też textarea - zależnie od potrzeb) i submita. Robisz w jQ event na submita i jak Antek kliknie przycisk wysyłasz dane do np chat.php metodą post dane z inputa i przerywasz w jQ dalsze wykonywanie się formularza bo wyśle ci go drugi raz przeglądarka.

Po stronie serwera dla chatu

  1. sprawdzasz czy sesja jest ustawiona czyli cookie
  2. sprawdzasz czy sesja istnieje w tabeli z sesjami
  3. odczytujesz który user “siedzi na sesji”
  4. odczytujesz dane usera z bazy danych
  5. sprawdzasz poprawność przesłanego tekstu
  6. robisz jakieś filtry na przesłanym tekscie
  7. zapisujesz wiadomość na chacie z informacją który user to wysłał przy pomocy np user_id
  8. zwracasz powiadomienie o powodzeniu lub wiadomość błędu

Teraz po stronie klienta dalej w jQ obsługujesz odpowiedź po wysłanym formularzu jeśli jest ok, wyświetlasz wiadomość że jest ok + czyścisz pole z wiadomością. Jeśli jest błąd wyświetlasz w czym problem, np pusta wiadomość.

Walidację formularza powinieneś również utworzyć w JS i wykonać ją przed wysłaniem formularza.

 

Tip:

Warto w skrypcie chat.php stworzyć “podwójną” obsługę, jeśli np masz parametr get ajax=true to w tedy inaczej obsługujesz żądanie, czyli zwracasz ewentualnie dane w formacie json. Jeśli go nie ma zwracasz cały html+css+js+co_tam_masz wraz z informacją o powodzeniu lub nie wysłania wiadomości.

Nie powinno się zdarzyć, ale możesz trafić na “klienta” który ma wyłączony JS co wyłożyć może ci chat (w zależności jak jest zaprojektowany, w najlepszy wypadku nie będzie mu nic działało) lub z jakiegoś powodu skrypty po stronie klienta mogą zostać podmienione, albo zablokowane.

Chcę sprawdzić kto jest online,dodałem kolumnę w tabeli użytkownika “online” z timestamp i czas zapusuje,ale mam problem czy przy wylogowaniu trzeba resetować czas i jak ,jak to zrobić???

Rób update przy jakiejś akcji usera dla tego pola, a jak wyświetlasz kto jest online wyświetl wszystkich userów z czasem nie starszym niż ostatnie 5 minut.

Wiem żę uptade zapytania tylko jak robię to razem z unicetwieniem sessji to wywala mi błąd w else,chyba to robię źle,pytanie:jak zapisać destroy sesji i uptade zapytania???

Nie rób tego w sesji tylko jako properties konta. Sesja to sesja ma za zadanie kojarzyć usera z numerkiem zapisanym w przeglądarce + ewentualnie dla bezpieczeństwa sprawdzić przeglądarkę ip/geolokalizację czy co tam jeszcze wymyślisz by zabezpieczyć się i usera przed przejęciem sesji.

Dziękuję za pomoc,dałem sobie radę,temat zamknięty :wink: