Hey
Ik heb een website gemaakt waarop een gebruiker een bericht kan sturen aan
de administrator, en de administrator aan de gebruiker in een chat-vorm.
De code werkt perfect,
de berichten komen aan.
Het probleem is enkel dat wanneer de gebruiker in de chatbox is,
en de administrator verstuurt een bericht, dan wordt dat bericht niet automatisch
getoond alhoewel ik wel AJAX gebruikt heb.
Code/Testpagina:
Database:
De PHP functie refreshMsg() neemt gewoon alle berichten uit de database en
toont het aan de gebruiker waar het toe behoort. De if-statements in die functie
zijn gewoon om te kijken of het bericht van de Administrator kwam of niet.
De switch-statement dient om te kijken of er een message was verzonden vanuit de gebruiker, indien ja
voeg toe aan database en refreshMsg(), anders gewoon refreshMsg().
Het probleem is dat de case nooit 'get' is, enkel wanneer ik de pagina herlaad. Dus de chat wordt niet auto-herladen als de administrator verstuurt.
In mijn AJAX-code heb ik de functie receive(), deze zou een lege POST-statement sturen en omdat
het leeg is zou het de case 'get' moeten lanceren, maar dat doet het niet.
Een post van de administrator heb ik gesimuleerd door gewoon een rij manueel toe te voegen aan de database en de waarde in kolom 'admin' op 1 te zetten.
Wat doe ik fout?
Ik heb al veel geprobeerd, en ook de code geanalyseerd via console en web-tools.
Ik zit al lang (enkele weken) op dit probleem en heb ook al aan andere hulp gevraagd, maar kon geen antwoord vinden.
Bedankt!
Ik heb een website gemaakt waarop een gebruiker een bericht kan sturen aan
de administrator, en de administrator aan de gebruiker in een chat-vorm.
De code werkt perfect,
de berichten komen aan.
Het probleem is enkel dat wanneer de gebruiker in de chatbox is,
en de administrator verstuurt een bericht, dan wordt dat bericht niet automatisch
getoond alhoewel ik wel AJAX gebruikt heb.
Code/Testpagina:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
| <!-----------PHP---------> <?php $conn = new mysqli("localhost", "root", "toor", "amando"); $user = "Foobar"; if (!empty($_POST['msg'])) { $action = 'post'; } else $action = 'get'; $date = new DateTime(); function refreshMsg() { global $conn, $user; $stmt = $conn->prepare("SELECT sender, message, admin FROM chat WHERE sender=?"); $stmt->bind_param("s", $sender_); $sender_ = $user; $stmt->execute(); $stmt->bind_result($username, $msgSent, $admin); $str = ""; while ($stmt->fetch()) { if ($admin == 0) { $_username = $username; } else $_username = "Admin"; $str .= "<b>".htmlspecialchars($_username) . "</b>: " . htmlspecialchars($msgSent) . "<br>"; } $stmt->execute(); echo $str; $stmt->close(); } switch ($action) { case 'post': $stmt = $conn->prepare("INSERT INTO chat (message, sender) VALUES (?, ?)"); $stmt->bind_param("ss", $message_, $sender_); $message_ = $_POST['msg']; $sender_ = $user; $stmt->execute(); $stmt->close(); refreshMsg(); break; case 'get': refreshMsg(); break; default: break; } ?> <!---------HTML---------> <form action="" method="post" id="chat"> <input type="text" name="msg" placeholder="Your message here..." /> <input type="submit" name="send" value="Verzend" /> </form> <!-----------AJAX & Javascript------------------> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> <script> function receive() { $.post('chat.php', {msg: ''}, function (data) { $('#info').prepend(data); }); } $(document).ready(function () { t = setInterval(receive, 500); $("#sendz").click(function (event) { console.log("(34) Send function launched."); var msgValue = document.getElementById("value").value; event.preventDefault(); $.post('chat.php', {msg: msgValue}, function (data) { $('#info').prepend(data); }); }); }); </script> |
Database:
code:
1
2
3
4
5
6
7
8
| +---------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+----------------+ | ID | bigint(20) | NO | PRI | NULL | auto_increment | | message | text | NO | | NULL | | | sender | varchar(256) | NO | | NULL | | | admin | tinyint(4) | NO | | 0 | | +---------+--------------+------+-----+---------+----------------+ |
De PHP functie refreshMsg() neemt gewoon alle berichten uit de database en
toont het aan de gebruiker waar het toe behoort. De if-statements in die functie
zijn gewoon om te kijken of het bericht van de Administrator kwam of niet.
De switch-statement dient om te kijken of er een message was verzonden vanuit de gebruiker, indien ja
voeg toe aan database en refreshMsg(), anders gewoon refreshMsg().
Het probleem is dat de case nooit 'get' is, enkel wanneer ik de pagina herlaad. Dus de chat wordt niet auto-herladen als de administrator verstuurt.
In mijn AJAX-code heb ik de functie receive(), deze zou een lege POST-statement sturen en omdat
het leeg is zou het de case 'get' moeten lanceren, maar dat doet het niet.
Een post van de administrator heb ik gesimuleerd door gewoon een rij manueel toe te voegen aan de database en de waarde in kolom 'admin' op 1 te zetten.
Wat doe ik fout?
Ik heb al veel geprobeerd, en ook de code geanalyseerd via console en web-tools.
Ik zit al lang (enkele weken) op dit probleem en heb ook al aan andere hulp gevraagd, maar kon geen antwoord vinden.
Bedankt!