j4nk3y: Update einer Chatfunktion

Beitrag lesen

Servus zusammen,

Ich bastel zurzeit an einer Chatfunktion für mein Projekt.

Diese ist für den Moment funktionsfähig aber noch sehr primitiv, daher möchte ich sie noch wesentlich verbessern.

Im Moment arbeiten 2 js funktionen und 2 php funktionen hand in hand um Nachrichten zu schreiben und wieder auszugeben.

Ich habe mir 2 Punkte vorgenommen aber komme gerade nicht wirklich weiter.

  1. kann ich zurzeit nur aus einer Tabelle die Nachrichten ausgeben bzw in diese schreiben. Ich möchte aber in mehrere Tabellen schreiben können, jenachdem wohin der User schreiben möchte.

  2. wird die chat_list funktion jede Sekunde ausgeführt, was ja sehr unschön ist und viel zuviel Serverkapazität benötigt, sprich eine Websocket verbindung soll her.

Nun scheitere ich an beidem kläglich.

Nungut hier ersteinmal ein wenig Anschauungsmaterial:

  1. Der Html Teil:
<section id="chat_wrapper">
<!--<form>

<input type="checkbox" name="world" class="checkbox_chat" id="chat_world_list" value="world" />
<label for="world">World</label>

<input type="checkbox" name="language" class="checkbox_chat" id="chat_language_list" value="<?php echo $_SESSION['language'];?>"/>
<label for="language">Language</label>

<?php if($page == "lobby"){echo '<input type="checkbox" name="alliance" class="checkbox_chat" id="chat_alliance_list" value="alliance" />
<label for="alliance">Alliance</label>';} ?>

</form>-->

<div id="chatbox"></div>

<!--<form>
<input type="radio" name="chat_destination" class="checkbox_chat" id="chat_world_post" value="world" checked />
<label for="chat_world_post">World</label>
<input type="radio" name="chat_destination" class="checkbox_chat" id="chat_language_post" value="<?php echo $_SESSION['language'];?>" />
<label for="chat_language_post">Language</label>
<?php if($page == "lobby"){echo '<input type="radio" name="chat_destination" class="checkbox_chat" id="chat_alliance_post" value="alliance" />
<label for="chat_alliance_post">Alliance</label>';} ?>-->

<input type="text" name="chat" id="chat_text" size="25" onkeydown = "if (event.keyCode == 13) {document.getElementById('chatbutton').click()}"/>

<button id="chatbutton" onclick="post_chat();" >Send</button>

</form>

<script>
list_chat();
</script>

</section>
  1. Die js Funktionen:
function list_chat()
{
var hr = new XMLHttpRequest();
	var url = "../functions/php/chat_list.php";
	
	hr.onreadystatechange = function()
	{
		if (hr.readyState == 4 && hr.status == 200)
		{
			document.getElementById("chatbox").innerHTML = hr.responseText;
			
			var div = document.getElementById("chatbox");
			div.scrollTop = div.scrollHeight;
		}
	}
	
	hr.open("GET", url, true)  // Mehr informationen zu der chat_list senden!...??
	hr.send();
	
	setTimeout(list_chat, 1000);   //Problem! zu wss ändern...??
}

function post_chat()
{
	var hr = new XMLHttpRequest();
	
	var url = "../functions/php/chat_insert.php";
	var chat = document.getElementById("chat_text").value;
	
	var text = "chat=" + chat;
	
	hr.open("POST", url, true);
	
	hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	hr.send(text);   // Mehr informationen zu der chat_insert senden!...??
	
	document.getElementById("chat_text").value = ""; 
	
}
  1. Nun zu php :

3.1 Die chat_list.php

$output = "";
require_once('db_connect_function.php');

$get_messages = "Select * FROM (Select message_writer, message, message_date FROM chat ORDER BY message_date DESC Limit 50 ) chat ORDER BY message_date ASC";

if($result = $db->query($get_messages))
{
	while($row = $result -> fetch_assoc())
	{
		$date = date("H:i:s", $row['message_date']);
		$output = '<p><span id="message_time">'.$date.' </span><span id="message_writer">'.$row['message_writer'].' : </span><span id="message">'.$row['message'].'</span></p>';
		echo $output;
	}
	$db -> close();
}
else
{
	//error_log
}

3.2 Die chat_insert.php

session_start();
require_once('db_connect_function.php');

if(isset($_POST['chat']) && !empty($_POST['chat']))
{
	$writer = $_SESSION['user_name'];
	$chat = $_POST['chat'];
	$world = $_POST['world'];
	$language = $_POST['language'];
	$alliance = $_POST['alliance'];
	$now = time();
	
	/*
	$world = $_POST['chat_world_post'];
	$language = $_POST['chat_language_post'];
	$alliance = $_POST['chat_alliance_post'];
	if(!empty($world))
	{
		$insert_message = "INSERT INTO chat (message_writer, message, message_date) VALUES ('$writer', '$chat', '$now')";
		if($db -> query($insert_message) === TRUE)
		{
			$db -> commit();
		}
		else
		{
			//error_log! $create_db_connect->error.
		}
	}
	elseif(!empty($language))
	{
		$table_name = "chat_".$language;
		
		$insert_message = "INSERT INTO $table_name (message_writer, message, message_date) VALUES ('$writer', '$chat', '$now')";
		if($db -> query($insert_message) === TRUE)
		{
			$db -> commit();
		}
		else
		{
			//error_log! $create_db_connect->error.
		}
	}
	elseif(!empty($alliance))
	{
		$table_name = "chat_".$alliance;
		
		$insert_message = "INSERT INTO $table_name (message_writer, message, message_date) VALUES ('$writer', '$chat', '$now')";
		if($db -> query($insert_message) === TRUE)
		{
			$db -> commit();
		}
		else
		{
			//error_log! $create_db_connect->error.
		}
	}*/
	
	$insert_message = "INSERT INTO chat (message_writer, message, message_date) VALUES ('$writer', '$chat', '$now')";
	if($db -> query($insert_message) === TRUE)
	{
		$db -> commit();
	}
	else
	{
		//error_log
	}
	
	
	exit();
}

Wie man erkennt, habe ich schon ein wenig damit experimentiert, informationen über checkboxen (imprinzip welche Tabellen die chat_list.php ausgeben / zusammenführen soll) weiter zu geben. Und ähnlich mit radio wohin die chat_insert.php die Daten schreiben soll. Nur bekomme ich das über die js funktionen irgendwie nicht geregelt.

Wie dem auch sei, freue ich mich ersteinmal über Anregungen und Tipps :)

Mit sommerlichem Gruß

Jo

0 151

Update einer Chatfunktion

j4nk3y
  • html
  • javascript
  • php
  1. 2
    Felix Riesterer
    • datenbank
    • php
    • sicherheit
    1. 0
      j4nk3y
      1. 0
        Gunnar Bittersmann
    2. 0
      Gunnar Bittersmann
      1. 0
        Matthias Apsel
        1. 0
          Gunnar Bittersmann
      2. 0
        j4nk3y
        1. 0
          Gunnar Bittersmann
          1. 0
            j4nk3y
      3. 0
        Felix Riesterer
        1. 0
          j4nk3y
          • zur info
          1. 1
            Felix Riesterer
            • php
            • programmiertechnik
            • zur info
            1. 0
              j4nk3y
        2. 0
          Gunnar Bittersmann
    3. 0
      j4nk3y
      1. 0
        Felix Riesterer
        • php
        • programmiertechnik
        • sicherheit
        1. 0
          j4nk3y
          1. 0
            Der Martin
            1. 0
              j4nk3y
              1. 0
                Der Martin
                1. 0
                  j4nk3y
          2. 0
            Felix Riesterer
            1. 0
              j4nk3y
              1. 0
                Der Martin
                1. 0
                  j4nk3y
              2. 1
                dedlfix
                1. 0
                  Gunnar Bittersmann
                  • typografie
                2. 0
                  j4nk3y
                  1. 0
                    dedlfix
                    1. 0
                      j4nk3y
                      1. 0
                        dedlfix
                        1. 0
                          j4nk3y
                          1. 0
                            dedlfix
                            1. 0
                              j4nk3y
                              1. 0
                                Der Martin
                                1. 0
                                  j4nk3y
                                  1. 0
                                    Der Martin
                              2. 1
                                dedlfix
                                1. 0
                                  Der Martin
                              3. 0
                                Gunnar Bittersmann
                                • datenbank
                                • programmiertechnik
                                1. 0
                                  j4nk3y
        2. 0
          Der Martin
        3. 0
          Gunnar Bittersmann
          • internationalisierung
          • php
          1. 0
            Felix Riesterer
            1. 0
              Tabellenkalk
              • zitat
              • zu diesem forum
              1. 1
                Matthias Apsel
    4. 0
      1unitedpower
      1. 1
        dedlfix
        1. 1
          1unitedpower
          1. 0
            Christian Kruse
          2. 0
            dedlfix
            1. 0
              1unitedpower
              1. 0
                dedlfix
                1. 0
                  Christian Kruse
                  1. 0
                    dedlfix
                  2. 0
                    1unitedpower
                    1. 0
                      Christian Kruse
                      1. 0
                        1unitedpower
                    2. 0
                      dedlfix
                      1. 0
                        1unitedpower
                        1. 0
                          dedlfix
  2. 0
    j4nk3y
    1. 0
      Gunnar Bittersmann
      • html
      1. 0
        j4nk3y
        1. 0
          Gunnar Bittersmann
          1. 0
            j4nk3y
            1. 0
              Matthias Apsel
              1. 0
                j4nk3y
  3. 0
    j4nk3y
  4. 0
    pl
    1. 0
      j4nk3y
      1. 0
        dedlfix
        1. 0
          j4nk3y
          1. 0
            dedlfix
            1. 0
              j4nk3y
              1. 0
                pl
                1. 0
                  j4nk3y
                  1. 0
                    pl
                    1. 0
                      dedlfix
                      1. -2
                        pl
                        1. 0
                          Matthias Apsel
                  2. 0
                    pl
              2. 0
                dedlfix
                1. 0
                  j4nk3y
                  1. 0
                    dedlfix
            2. 0
              j4nk3y
              1. 0
                dedlfix
      2. 0
        pl
  5. 0
    j4nk3y
    1. 0
      dedlfix
    2. 0
      j4nk3y
      1. 0
        j4nk3y
        1. 0
          pl
        2. 0
          dedlfix
          1. 0
            j4nk3y
            1. 0
              dedlfix
              1. 0
                j4nk3y
          2. 0
            j4nk3y
            1. 0
              j4nk3y
  6. 0
    j4nk3y
    1. 0
      Der Martin
      1. 0
        j4nk3y
        1. 0
          dedlfix
          1. 0
            j4nk3y
            1. 0
              Der Martin
              1. 0
                j4nk3y
        2. 0
          Der Martin
          1. 0
            j4nk3y
            1. 1
              Felix Riesterer
              1. 0
                j4nk3y
                1. 0
                  Matthias Apsel
                  1. 0
                    j4nk3y
                    • menschelei
                2. 0
                  Felix Riesterer
                  • php
                  • programmiertechnik
                  • sql
                  1. 0
                    j4nk3y
                    1. 0
                      Der Martin
                      1. 0
                        j4nk3y
                        1. 0
                          Der Martin
                          1. 0
                            j4nk3y
                            • menschelei
                    2. 0
                      Felix Riesterer
                      1. 0
                        pl
                      2. 0
                        j4nk3y
                        1. 2
                          dedlfix
                          1. 0
                            j4nk3y
                            1. 0
                              dedlfix
                              1. 0
                                Christian Kruse
                                1. 1
                                  dedlfix
                  2. 0
                    j4nk3y
                  3. 0
                    j4nk3y
                    1. 0
                      Felix Riesterer
                      1. 0
                        dedlfix
                        1. 0
                          j4nk3y
                          1. 0
                            pl
                            1. 0
                              j4nk3y
                          2. 0
                            dedlfix
                      2. 0
                        j4nk3y
                        1. 0
                          Der Martin
                        2. 0
                          Felix Riesterer
                          1. 0
                            Der Martin
                            1. 0
                              dedlfix
                          2. 0
                            j4nk3y
                            1. 1
                              Der Martin
                              1. 0
                                j4nk3y
    2. 0
      j4nk3y
      1. 0
        dedlfix
        1. 0
          j4nk3y
          1. 0
            Christian Kruse
            1. 0
              j4nk3y
              1. 0
                Christian Kruse
              2. 0
                Matthias Apsel
                • zu diesem forum
                1. 0
                  j4nk3y