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ć.
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ć?
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???
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:
sprawdzasz czy sesja jest ustawiona czyli cookie
sprawdzasz czy sesja istnieje w tabeli z sesjami
odczytujesz który user “siedzi na sesji”
odczytujesz dane usera z bazy danych
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
sprawdzasz czy sesja jest ustawiona czyli cookie
sprawdzasz czy sesja istnieje w tabeli z sesjami
odczytujesz który user “siedzi na sesji”
odczytujesz dane usera z bazy danych
sprawdzasz poprawność przesłanego tekstu
robisz jakieś filtry na przesłanym tekscie
zapisujesz wiadomość na chacie z informacją który user to wysłał przy pomocy np user_id
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.