1. Piszesz rejestrację i logowanie do serwisu. Mógłbyś takie coś nawet napisać bez logowania się, ale mniejsza z tym.
2. Jeśli ktoś już się zalogował, to musi mieć opcję do wysyłania wiadomości, czyli napisz formularz, do kogo ma być wysłana wiadomość i pole na jej treść.
3. Ktoś np. wysyła wiadomość do John'a o ID=1. Jeśli w bazie nie ma tabeli messages1, to skrypt PHP powinien utworzyć taką tabelę, w przeciwnym razie wiadomość nie powinna zostać wysłana, no bo jak. A gdy taka tabela istnieje, to po prostu dodaje wiadomość do tejże tabeli.
4. Jeżeli ktoś podał poprawny login i hasło to powinna zostać ustawiona zmienna sesyjna o treści, np. "Zalogowano jako John" lub flaga ustawiona na np. true. Następnie, dzięki zalogowaniu się byłaby możliwość wysyłania do kogoś wiadomości. Użytkownik mógłby podać w formularzu dane innego użytkownika jego nick albo ID i po naciśnięciu na submit, wiadomość zostałaby wysłana.
5. Tabele wyglądałyby następująco:
select * from users;
id |
login |
password |
1 |
John |
foo |
2 |
Piter |
bar |
3 |
xxxx |
123 |
4 |
yyyy |
qwerty |
select * from messages1;
id |
message |
1 |
Hello |
2 |
Welcome |
select * from messages2;
id |
message |
1 |
Books |
2 |
Animals |
Teraz tak. Jeśli John ma ID=1, to ktoś wysłał do niego wiadomość do tabeli o nazwie messages1, a Piter ma wiadomości w tabeli messages2. W każdym bądź razie tak poglądowo to napisałem, bo to powinno być bardziej rozbudowane, godzina wysłania wiadomości, itd., itp..
Trochę chaotycznie to opisałem w tym punktach.
Ja już coś zacząłem pisać, ale nie dokończyłem, urywek:
<style>
textarea{
background:green;
}
</style>
<body style="background:grey">
<form method="post" action="">
<input type="text" name="to_someone"/>
<textarea name="message"></textarea>
<input type="submit" value="send"/>
</form>
<form method="post" action="">
<input type="text" name="login"/>
<input type="password" name="password"/>
<input type="submit" name="person" />
</form>
<pre>
<?php
session_start();
$dbh = new PDO('mysql:host=localhost;dbname=lukas_hajduga','root','');
$show_all = $dbh->query('SELECT * FROM users');
while($users[] = $show_all->fetch(PDO::FETCH_NUM));
for($i=0;$i<count($users)-1;$i++){
if($users[$i][1]==isset($_POST['login']) && $users[$i][2]==isset($_POST['password']) && isset($_POST['person'])){
$_SESSION['flag_loggeds'] = true;
}
}
if($_SESSION['flag_loggeds'] == true){
$dbh->query("insert into messages{$_POST['to_someone']} values(null,'{$_POST['message']}');");
}
?>
Mam nadzieję, że zrozumiałeś o co chodzi w tym kodzie, mimo iż jest niepełny i w ogóle. Do kodu musisz dopisać parę warunków, przede wszystkim do NOTICE; usunąć: count($users)-1 i dać: count($users) + wcześniej dopisać chyba empty, gdzieś w if. Nie chcę już wypowiadać się na temat tego kodu, popraw go i tyle.
Apropo kodu:
Napisałem go w dużym uproszczeniu. Możliwe, że to spartański sposób. Skrypt rejestracji i/lub logowania powinien mieć bindowanie i wiele innych rzeczy. To jest taka wersja DEMO. To jest tylko kod demonstracyjny, sam musisz napisać to samemu od początku, używając dobrych praktyk (bidnowania), wszelkich zabezpieczeń itd., itp.. Ten kod to taki bardziej skrót myślowy. Chciałem tym kodem przedstawić jak mogłoby to wyglądać, pisane na szybko. To jest tylko kod poglądowy jak już wspomniałem, należałoby go całkowicie przebudować. Na tę chwilę nie musiałbyś używać żadnego asynchronicznego przekaźnika typu websockets czy ajax lub jakichś innych technologi, po F5 (po przeładownaiu) strony ktoś zobaczyłby wiadomość. Chodzi o sam zamysł. Nie sugeruj się tym kodem, to tylko taki pseudo-kod bardziej, pełno w nim błędów (notice'y, itp.).
A tutaj link do strony z opisanym websockets i innymi technologiami:
https://www.html5rocks.com/en/tutorials/eventsource/basics/