Advertisement
radionetworks

Instant Messenger

Jan 30th, 2016
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.98 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>IM - Testbau </title>
  6. <link rel="stylesheet" href="css/im.css">
  7. <style type="text/css">
  8. .entry {
  9. width: 100%;
  10. background-color: #F5F5F5;
  11. border: 1 dotted #666666;
  12. font-family: Verdana;
  13. }
  14. .entry#small {
  15. color: #CCCCCC;
  16. }
  17. </style>
  18. </head>
  19.  
  20.  
  21. <body>
  22. <?php
  23. //wichtig; damit nicht gecached wird!
  24. header( "Cache-Control: no-cache, must-revalidate" );
  25. header( "Pragma: no-cache" );
  26. //damit unser JavaScript die Daten auch als XML erkennt
  27. header("Content-Type: text/xml");
  28.  
  29. $db_host = "localhost"; // Host
  30. $db_user = "root"; // User
  31. $db_password = ""; // Passwort
  32. $db_name = "instant"; // Datenbank
  33.  
  34. mysql_connect($db_host,$db_user,$db_password) or die(mysql_error());
  35. mysql_select_db($db_name) or die(mysql_error())
  36.  
  37. function getLatestEntries($latestID) {
  38.  
  39. $query = "SELECT id, name, nachricht, date FROM ajaxchat WHERE id > $latestID ORDER BY id DESC LIMIT 20";
  40. $erg = mysql_query($query);
  41. echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>";
  42. echo "<messages>";
  43. while($erg2=mysql_fetch_array($erg)) //Erzeugung der XML Ausgabe
  44. {
  45. echo "<message><id>".$erg2['id'];
  46. echo "</id><name>".$erg2['name'];
  47. echo "</name><nachricht>".$erg2['nachricht'];
  48. //Formatierung des Timestamps
  49. echo "</nachricht><date>".date("d.m.Y H:i",$erg2['date']);
  50. echo "</date></message>";
  51. }
  52. echo "</messages>";
  53. }
  54.  
  55. function createNewEntry($name, $nachricht) {
  56.  
  57. //HTML Tags entfernen
  58. $name = strip_tags($name, '');
  59. $nachricht = strip_tags($nachricht,'');
  60.  
  61. $query = "INSERT INTO ajaxchat(name, nachricht, date)
  62. VALUES ('$name','$nachricht','".time()."')";
  63. echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>";
  64. if (!mysql_query($query)) {
  65. //nicht notwendig, dient nur der Fehlerkontrolle
  66. echo "<createNewEntry>0</createNewEntry>";}
  67. else {
  68. echo "<createNewEntry>1</createNewEntry>";
  69. }
  70. }
  71.  
  72. //falls action=createNewEntry, Erzeugung eines neuen Eintrages
  73. if ($_GET['action'] == "createNewEntry") {
  74. createNewEntry($_GET['name'], $_GET['nachricht']);
  75. }
  76. //falls action=getLatestEntries, Ausgabe der neuesten Einträge
  77. elseif ($_GET['action'] == "getLatestEntries") {
  78. getLatestEntries($_GET['latestID']);
  79. }
  80. mysql_close(); //schließen der PHP Verbindung
  81. ?>
  82. <form name="form1" method="post" action="">
  83. <p>Name<br />
  84. <input type="text" name="name" id="name">
  85. <br />
  86. <br />
  87. Nachricht<br />
  88. <input type="text" name="nachricht" id="nachricht">
  89. </p>
  90. <p>
  91. <input type="submit" name="Submit" value="Submit" onclick="checkInput(document.form1.name.value, document.form1.nachricht.value)" >
  92. </p>
  93. </form>
  94.  
  95. <?php
  96. function checkInput(name, nachricht) {
  97. if(name != "" && nachricht != "") {
  98. //Falls alles OK ist, kann der neue Eintrag erzeugt werden
  99. createNewEntry(name, nachricht);
  100. }
  101. else {
  102. alert("Bitte sowohl einen Namen, als auch eine Nachricht eingeben!");
  103. }
  104. }
  105.  
  106. ?>
  107.  
  108. <script type="text/javascript">
  109. var latestID = 0; //latestID als globale Variable; wichtig!
  110.  
  111. function createXMLHttpReqObj() { //erzeugt die XMLHttpRequest Objekte
  112.  
  113. // für Mozilla etc.
  114. if(window.XMLHttpRequest) {
  115. try { //Fehler abfangen
  116. req = new XMLHttpRequest();
  117. } catch(e) {
  118. req = false;
  119. }
  120. // für den InternetExplorer
  121. } else if(window.ActiveXObject) {
  122. try {
  123. req = new ActiveXObject("Msxml2.XMLHTTP");
  124. } catch(e) {
  125. try {
  126. req = new ActiveXObject("Microsoft.XMLHTTP");
  127. } catch(e) {
  128. req = false;
  129. }
  130. }
  131. }
  132. return req;
  133. }
  134. // Initialisierung der beiden Objekte
  135. var httpGetLatestEntries= createXMLHttpReqObj();
  136. var httpCreateNewEntry = createXMLHttpReqObj();
  137.  
  138. //Funktion, mit der Anfragen nach neuen Einträgen gesendet wird
  139. function getLatestEntries() {
  140. //Anfrage senden, wenn Status der letzten Anfrage "completed" ist, bzw. "nicht initialisiert" (d.h. erster Aufruf)
  141. if (httpGetLatestEntries.readyState == 4 || httpGetLatestEntries.readyState == 0) {
  142. //Übergabe der latestID
  143. httpGetLatestEntries.open("GET","
  144. http://localhost/ajax/ajaxchat.php?
  145. action=getLatestEntries&latestID="+latestID, true);
  146. httpGetLatestEntries.onreadystatechange = handleHttpGetLatestEntries;
  147. httpGetLatestEntries.send(null);
  148. }
  149. }
  150.  
  151. Als Funktion, mit welcher der Browser die Serverantwort behandelt ist die Funktion handleHttpGetLatestEntries angegeben:
  152.  
  153. //Behandelt die Serverantwort
  154. function handleHttpGetLatestEntries() {
  155.  
  156. //wenn Anfrage den Status "completed" hat
  157. if (httpGetLatestEntries.readyState == 4) {
  158. //ermitteln der Antwort
  159. response = httpGetLatestEntries.responseXML.documentElement;
  160. //ermitteln der Messages; Überführung in ein Array
  161. messages = response.getElementsByTagName('message');
  162.  
  163. //wenn es mindestens eine neue Nachricht hat, dann wird diese angezeigt!
  164. if(messages.length > 0) {
  165.  
  166. for (var i=messages.length-1; i>=0; i--) {
  167. //Darstellung im Browser mit dem DOM
  168. showEntry= document.getElementById("showEntries");
  169. neuSpan = document.createElement('span');
  170. neuSpan.setAttribute('class','entry'); //CSS Klasse
  171. neuSmall = document.createElement('small');
  172. neuNameDate = document.createTextNode(messages[i].getElementsByTagName
  173. ('date')[0].firstChild.nodeValue + ': ' + messages[i].getElementsByTagName('name')[0].firstChild.nodeValue +': ');
  174. neuSmall.appendChild(neuNameDate);
  175. neuSpan.appendChild(neuSmall);
  176. neuSpan.appendChild(document.createElement('br'));
  177. neuNachricht = document.createTextNode(messages[i].getElementsByTagName
  178. ('nachricht')[0].firstChild.nodeValue);
  179. neuSpan.appendChild(neuNachricht);
  180. neuSpan.appendChild(document.createElement('br'));
  181. showEntry.insertBefore(neuSpan, showEntry.firstChild);
  182. }
  183.  
  184. //Festlegung der neuen latestID; Zugriff auf die Werte über das DOM
  185. latestID = messages[0].getElementsByTagName('id')[0].firstChild.nodeValue;
  186. }
  187. //erneuter periodischer Aufruf (eine Art Rekursion)
  188. setTimeout('getLatestEntries();',3000); //Erneute Anfrage in drei Sekunden
  189. }
  190. }
  191.  
  192. //behandelt die Antwort des Servers
  193. function handleHttpCreateNewEntry() {
  194. if (httpCreateNewEntry.readyState == 4) {
  195. //nachdem eine neue Nachricht erfolgreich erzeugt wurde, wird diese angezeigt
  196. getLatestEntries();
  197. }
  198. }
  199. </script>
  200. </body>
  201. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement