Update einer Chatfunktion
bearbeitet von
Servus zusammen,
Ich bin mittlerweile -><- so kurz davor aus verschiedenen Tabellen die Nachrichten auszugegeben aber es klappt nur wenn ich die Seite neu laden und das verstehe ich nicht ganz.
Erstmal meine Frage bevor es an den Code geht.
Wenn die Javascript Funktion jede Sekunde ausgeführt wird und diese das `Value` und den `checked`-Wert aus den Checkboxen erhält, warum ändert sich nicht die Rückgabe von php wenn eine Checkbox angeklickt wird?
Nun zum Code:
// `sprintf()` + `htmlspecialchars()` + `mysqli_real_escape_string` kommen noch.
Das Formular wo jemand aussuchen kann welche Nachrichten angezeigt werden sollen:
~~~html
<form>
<input type="checkbox" name="world" class="checkbox_chat" id="chat_world_list" value="world" checked="checked"/><label for="world">World</label>
<input type="checkbox" name="language" class="checkbox_chat" id="chat_language_list_e" value="<?php echo "lang_en";?>"/><label for="language">en</label>
<input type="checkbox" name="language" class="checkbox_chat" id="chat_language_list_d" value="<?php echo "lang_ger";?>"/><label for="language">de</label>
<input type="checkbox" name="language" class="checkbox_chat" id="chat_language_list_s" value="<?php echo "lang_swe";"/><label for="language">sve</label>
</form>
~~~
In Javascript die `listChat()` welche den Inhalt des Formulars an php posted (Diese wird so aufgerufen: `setTimeout(listChat, 1000);`) :
~~~javascript
function listChat()
{
var hr = new XMLHttpRequest();
var url = "../functions/php/chat_list.php";
var chatState = document.getElementById("chat_world_list").checked;
var chat_lang_eState = document.getElementById("chat_language_list_e").checked;
var chat_lang_eValue = document.getElementById("chat_language_list_e").value;
var chat_lang_dState = document.getElementById("chat_language_list_d").checked;
var chat_lang_dValue = document.getElementById("chat_language_list_d").value;
var chat_lang_sState = document.getElementById("chat_language_list_s").checked;
var chat_lang_sValue = document.getElementById("chat_language_list_s").value;
var request = "state_world="+chatState+"&state_lang_1="+chat_lang_eState+"&value_lang_1="+chat_lang_eValue+"&state_lang_2="+chat_lang_dState+"&value_lang_2="+chat_lang_dValue+"&state_lang_3="+chat_lang_sState+"&value_lang_3="+chat_lang_sValue;
hr.onreadystatechange = function()
{
if (hr.readyState == 4 && hr.status == 200)
{
var div = document.getElementById("chatbox");
div.innerHTML = hr.responseText;
div.scrollTop = div.scrollHeight;
}
}
hr.open("POST", url, true)
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
hr.send(request);
}
~~~
Und schlussendlich php :
~~~php
if(isset($_POST))
{
$messanges = array();
if($_POST['state_world'] == "true")
{
$get_messages_world = "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_world))
{
while ($message = $result->fetch_assoc())
{
$date = $message['message_date'];
$messanges[$date] = $message;
}
}
else
{
log_error_function("chat_list.php","",mysqli_error($db),"System?");
}
}
if($_POST['state_lang_1'] == "true")
{
$lang = explode("_", $_POST['value_lang_1']);
$table_name = "chat_".$lang[1];
$get_messages_lang_1 = "Select * FROM (Select message_writer, message, message_date FROM $table_name ORDER BY message_date DESC Limit 50 ) $table_name ORDER BY message_date ASC";
if ($result = $db->query($get_messages_lang_1))
{
while ($message = $result->fetch_assoc())
{
$date = $message['message_date'];
$messanges[$date] = $message;
}
}
else
{
log_error_function("chat_list.php","",mysqli_error($db),"System?");
}
}
if($_POST['state_lang_2'] == "true")
{
$lang = explode("_", $_POST['value_lang_2']);
$table_name = "chat_".$lang[1];
$get_messages_lang_2 = "Select * FROM (Select message_writer, message, message_date FROM $table_name ORDER BY message_date DESC Limit 50 ) $table_name ORDER BY message_date ASC";
if ($result = $db->query($get_messages_lang_2))
{
while ($message = $result->fetch_assoc())
{
$date = $message['message_date'];
$messanges[$date] = $message;
}
}
else
{
log_error_function("chat_list.php","",mysqli_error($db),"System?");
}
}
if($_POST['state_lang_3'] == "true")
{
$lang = explode("_", $_POST['value_lang_3']);
$table_name = "chat_".$lang[1];
$get_messages_lang_3 = "Select * FROM (Select message_writer, message, message_date FROM $table_name ORDER BY message_date DESC Limit 50 ) $table_name ORDER BY message_date ASC";
if ($result = $db->query($get_messages_lang_3))
{
while ($message = $result->fetch_assoc())
{
$date = $message['message_date'];
$messanges[$date] = $message;
}
}
else
{
log_error_function("chat_list.php","",mysqli_error($db),"System?");
}
}
ksort($messanges);
}
if(!empty($messanges)):
foreach ($messanges as $message):
?>
<article>
<footer>
<time class="origin"><?php echo date('H:i:s', $message['message_date']); ?></time>
<p class="author"><span class="origin"><?php echo htmlspecialchars($message['message_writer']).":"; ?></span></p>
</footer>
<p class="message"><?php echo htmlspecialchars($message['message']); ?></p>
</article>
<?php
endforeach;
endif;
?>
~~~
Und daann noch eine kleinigkeit, die auch etwas komisch ist:
~~~php
$insert_message = sprintf(
'INSERT INTO %s ('
. 'message_writer, message,message_date'
. ') VALUES ('
. '\'%s\', \'%s\', \'%d\''
. ')',
$_POST['destination'],
$_SESSION['user_name'],
$_POST['chat'],
time());
~~~
Dieses `time()` schreibt in die Datenbank immer den gleichen wert.HEbeuten istwar es 1463920000 und Ghesute morgen war es 1463900000 und jetzt ist es gerade auf 1463930000 gesprungen.
Gruß
Jo
Ich bin mittlerweile -><- so kurz davor aus verschiedenen Tabellen die Nachrichten auszugegeben aber es klappt nur wenn ich die Seite neu laden und das verstehe ich nicht ganz.
Erstmal meine Frage bevor es an den Code geht.
Wenn die Javascript Funktion jede Sekunde ausgeführt wird und diese das `Value` und den `checked`-Wert aus den Checkboxen erhält, warum ändert sich nicht die Rückgabe von php wenn eine Checkbox angeklickt wird?
Nun zum Code:
// `sprintf()` + `htmlspecialchars()` + `mysqli_real_escape_string` kommen noch.
Das Formular wo jemand aussuchen kann welche Nachrichten angezeigt werden sollen:
~~~html
<form>
<input type="checkbox" name="world" class="checkbox_chat" id="chat_world_list" value="world" checked="checked"/><label for="world">World</label>
<input type="checkbox" name="language" class="checkbox_chat" id="chat_language_list_e" value="<?php echo "lang_en";?>"/><label for="language">en</label>
<input type="checkbox" name="language" class="checkbox_chat" id="chat_language_list_d" value="<?php echo "lang_ger";?>"/><label for="language">de</label>
<input type="checkbox" name="language" class="checkbox_chat" id="chat_language_list_s" value="<?php echo "lang_swe";"/><label for="language">sve</label>
</form>
~~~
In Javascript die `listChat()` welche den Inhalt des Formulars an php posted (Diese wird so aufgerufen: `setTimeout(listChat, 1000);`) :
~~~javascript
function listChat()
{
var hr = new XMLHttpRequest();
var url = "../functions/php/chat_list.php";
var chatState = document.getElementById("chat_world_list").checked;
var chat_lang_eState = document.getElementById("chat_language_list_e").checked;
var chat_lang_eValue = document.getElementById("chat_language_list_e").value;
var chat_lang_dState = document.getElementById("chat_language_list_d").checked;
var chat_lang_dValue = document.getElementById("chat_language_list_d").value;
var chat_lang_sState = document.getElementById("chat_language_list_s").checked;
var chat_lang_sValue = document.getElementById("chat_language_list_s").value;
var request = "state_world="+chatState+"&state_lang_1="+chat_lang_eState+"&value_lang_1="+chat_lang_eValue+"&state_lang_2="+chat_lang_dState+"&value_lang_2="+chat_lang_dValue+"&state_lang_3="+chat_lang_sState+"&value_lang_3="+chat_lang_sValue;
hr.onreadystatechange = function()
{
if (hr.readyState == 4 && hr.status == 200)
{
var div = document.getElementById("chatbox");
div.innerHTML = hr.responseText;
div.scrollTop = div.scrollHeight;
}
}
hr.open("POST", url, true)
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
hr.send(request);
}
~~~
Und schlussendlich php :
~~~php
if(isset($_POST))
{
$messanges = array();
if($_POST['state_world'] == "true")
{
$get_messages_world = "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_world))
{
while ($message = $result->fetch_assoc())
{
$date = $message['message_date'];
$messanges[$date] = $message;
}
}
else
{
log_error_function("chat_list.php","",mysqli_error($db),"System?");
}
}
if($_POST['state_lang_1'] == "true")
{
$lang = explode("_", $_POST['value_lang_1']);
$table_name = "chat_".$lang[1];
$get_messages_lang_1 = "Select * FROM (Select message_writer, message, message_date FROM $table_name ORDER BY message_date DESC Limit 50 ) $table_name ORDER BY message_date ASC";
if ($result = $db->query($get_messages_lang_1))
{
while ($message = $result->fetch_assoc())
{
$date = $message['message_date'];
$messanges[$date] = $message;
}
}
else
{
log_error_function("chat_list.php","",mysqli_error($db),"System?");
}
}
if($_POST['state_lang_2'] == "true")
{
$lang = explode("_", $_POST['value_lang_2']);
$table_name = "chat_".$lang[1];
$get_messages_lang_2 = "Select * FROM (Select message_writer, message, message_date FROM $table_name ORDER BY message_date DESC Limit 50 ) $table_name ORDER BY message_date ASC";
if ($result = $db->query($get_messages_lang_2))
{
while ($message = $result->fetch_assoc())
{
$date = $message['message_date'];
$messanges[$date] = $message;
}
}
else
{
log_error_function("chat_list.php","",mysqli_error($db),"System?");
}
}
if($_POST['state_lang_3'] == "true")
{
$lang = explode("_", $_POST['value_lang_3']);
$table_name = "chat_".$lang[1];
$get_messages_lang_3 = "Select * FROM (Select message_writer, message, message_date FROM $table_name ORDER BY message_date DESC Limit 50 ) $table_name ORDER BY message_date ASC";
if ($result = $db->query($get_messages_lang_3))
{
while ($message = $result->fetch_assoc())
{
$date = $message['message_date'];
$messanges[$date] = $message;
}
}
else
{
log_error_function("chat_list.php","",mysqli_error($db),"System?");
}
}
ksort($messanges);
}
if(!empty($messanges)):
foreach ($messanges as $message):
?>
<article>
<footer>
<time class="origin"><?php echo date('H:i:s', $message['message_date']); ?></time>
<p class="author"><span class="origin"><?php echo htmlspecialchars($message['message_writer']).":"; ?></span></p>
</footer>
<p class="message"><?php echo htmlspecialchars($message['message']); ?></p>
</article>
<?php
endforeach;
endif;
?>
~~~
Und daann noch eine kleinigkeit, die auch etwas komisch ist:
~~~php
$insert_message = sprintf(
'INSERT INTO %s ('
. 'message_writer, message,message_date'
. ') VALUES ('
. '\'%s\', \'%s\', \'%d\''
. ')',
$_POST['destination'],
$_SESSION['user_name'],
$_POST['chat'],
time());
~~~
Dieses `time()` schreibt in die Datenbank immer den gleichen wert.
Gruß
Jo
Update einer Chatfunktion
bearbeitet von
Servus zusammen,
Ich bin mittlerweile -><- so kurz davor aus verschiedenen Tabellen die Nachrichten auszugegeben aber es klappt nur wenn ich die Seite neu laden und das verstehe ich nicht ganz.
Erstmal meine Frage bevor es an den Code geht.
Wenn die Javascript Funktion jede Sekunde ausgeführt wird und diese das `Value` und den `checked`-Wert aus den Checkboxen erhält, warum ändert sich nicht die Rückgabe von php wenn eine Checkbox angeklickt wird?
Nun zum Code:
// `sprintf()` + `htmlspecialchars()` + `mysqli_real_escape_string` kommen noch.
Das Formular wo jemand aussuchen kann welche Nachrichten angezeigt werden sollen:
~~~html
<form>
<input type="checkbox" name="world" class="checkbox_chat" id="chat_world_list" value="world" checked="checked"/><label for="world">World</label>
<input type="checkbox" name="language" class="checkbox_chat" id="chat_language_list_e" value="<?php echo "lang_en";?>"/><label for="language">en</label>
<input type="checkbox" name="language" class="checkbox_chat" id="chat_language_list_d" value="<?php echo "lang_ger";?>"/><label for="language">de</label>
<input type="checkbox" name="language" class="checkbox_chat" id="chat_language_list_s" value="<?php echo "lang_swe";"/><label for="language">sve</label>
</form>
~~~
In Javascript die `listChat()` welche den Inhalt des Formulars an php posted (Diese wird so aufgerufen: `setTimeout(listChat, 1000);`) :
~~~javascript
function listChat()
{
var hr = new XMLHttpRequest();
var url = "../functions/php/chat_list.php";
var chatState = document.getElementById("chat_world_list").checked;
var chat_lang_eState = document.getElementById("chat_language_list_e").checked;
var chat_lang_eValue = document.getElementById("chat_language_list_e").value;
var chat_lang_dState = document.getElementById("chat_language_list_d").checked;
var chat_lang_dValue = document.getElementById("chat_language_list_d").value;
var chat_lang_sState = document.getElementById("chat_language_list_s").checked;
var chat_lang_sValue = document.getElementById("chat_language_list_s").value;
var request = "state_world="+chatState+"&state_lang_1="+chat_lang_eState+"&value_lang_1="+chat_lang_eValue+"&state_lang_2="+chat_lang_dState+"&value_lang_2="+chat_lang_dValue+"&state_lang_3="+chat_lang_sState+"&value_lang_3="+chat_lang_sValue;
hr.onreadystatechange = function()
{
if (hr.readyState == 4 && hr.status == 200)
{
var div = document.getElementById("chatbox");
div.innerHTML = hr.responseText;
div.scrollTop = div.scrollHeight;
}
}
hr.open("POST", url, true)
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
hr.send(request);
}
~~~
Und schlussendlich php :
~~~php
if(isset($_POST))
{
$messanges = array();
if($_POST['state_world'] == "true")
{
$get_messages_world = "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_world))
{
while ($message = $result->fetch_assoc())
{
$date = $message['message_date'];
$messanges[$date] = $message;
}
}
else
{
log_error_function("chat_list.php","",mysqli_error($db),"System?");
}
}
if($_POST['state_lang_1'] == "true")
{
$lang = explode("_", $_POST['value_lang_1']);
$table_name = "chat_".$lang[1];
$get_messages_lang_1 = "Select * FROM (Select message_writer, message, message_date FROM $table_name ORDER BY message_date DESC Limit 50 ) $table_name ORDER BY message_date ASC";
if ($result = $db->query($get_messages_lang_1))
{
while ($message = $result->fetch_assoc())
{
$date = $message['message_date'];
$messanges[$date] = $message;
}
}
else
{
log_error_function("chat_list.php","",mysqli_error($db),"System?");
}
}
if($_POST['state_lang_2'] == "true")
{
$lang = explode("_", $_POST['value_lang_2']);
$table_name = "chat_".$lang[1];
$get_messages_lang_2 = "Select * FROM (Select message_writer, message, message_date FROM $table_name ORDER BY message_date DESC Limit 50 ) $table_name ORDER BY message_date ASC";
if ($result = $db->query($get_messages_lang_2))
{
while ($message = $result->fetch_assoc())
{
$date = $message['message_date'];
$messanges[$date] = $message;
}
}
else
{
log_error_function("chat_list.php","",mysqli_error($db),"System?");
}
}
if($_POST['state_lang_3'] == "true")
{
$lang = explode("_", $_POST['value_lang_3']);
$table_name = "chat_".$lang[1];
$get_messages_lang_3 = "Select * FROM (Select message_writer, message, message_date FROM $table_name ORDER BY message_date DESC Limit 50 ) $table_name ORDER BY message_date ASC";
if ($result = $db->query($get_messages_lang_3))
{
while ($message = $result->fetch_assoc())
{
$date = $message['message_date'];
$messanges[$date] = $message;
}
}
else
{
log_error_function("chat_list.php","",mysqli_error($db),"System?");
}
}
ksort($messanges);
}
if(!empty($messanges)):
foreach ($messanges as $message):
?>
<article>
<footer>
<time class="origin"><?php echo date('H:i:s', $message['message_date']); ?></time>
<p class="author"><span class="origin"><?php echo htmlspecialchars($message['message_writer']).":"; ?></span></p>
</footer>
<p class="message"><?php echo htmlspecialchars($message['message']); ?></p>
</article>
<?php
endforeach;
endif;
?>
~~~
Und daann noch eine kleinigkeit, die auch etwas komisch ist:
~~~php
$insert_message = sprintf(
'INSERT INTO %s ('
. 'message_writer, message,message_date'
. ') VALUES ('
. '\'%s\', \'%s\', \'%d\''
. ')',
$_POST['destination'],
$_SESSION['user_name'],
$_POST['chat'],
time());
~~~
Dieses `time()` schreibt in die Datenbank immer den gleichen wert. Heute ist es 1463920000 und Gestern war es 1463900000.
Gruß
Jo