Я использую действительно очень простой метод, используя базовый PHP, чтобы начать работу с автоматической системой ответа, используя мою уже рабочую службу обмена сообщениями. Я знаю, что здесь я не использую лучшие методы безопасности, но это не так, поэтому избегайте комментирования безопасности сценария.PHP Автоматическое ответное сообщение должно приостанавливаться перед добавлением ответа на базу данных MySQL
Теперь, когда пользователь отправляет ответ из формы с именем reply
, он решает, разговаривает ли пользователь с функцией автоматического ответа, с user_id
из 0
. Это он, $sarssystem
возвращается как 1
. Если он не возвращается как 1
, форма будет обрабатываться как общее сообщение, которое отлично работает. Вот процесс форма:
///////////// ADD REPLY TO CONVERSATION //////////////////////////////
if(isset($_POST['reply'])){
$user_id = $_SESSION['userid'];
$message = $_POST['message'];
$conversation_id = $_POST['conversation_id'];
$sarssystem = $_POST['sarssystem'];
if(isset($sarssystem)){
if($sarssystem == 1){
include 'system/sars_system.php';
} else {
$reply = str_replace("'","\\'",$message);
mysqli_query($conn,"INSERT INTO ap_messages (message_id, message, sender_id, time_sent, time_read, conversation_id)
VALUES ('','$reply','$user_id', NOW(), '', '$conversation_id')");
mysqli_query($conn, "UPDATE ap_conversations SET time = NOW() WHERE conversation_id = '$conversation_id'");
}
} else {
$reply = str_replace("'","\\'",$message);
mysqli_query($conn,"INSERT INTO ap_messages (message_id, message, sender_id, time_sent, time_read, conversation_id)
VALUES ('','$reply','$user_id', NOW(), '', '$conversation_id')");
mysqli_query($conn, "UPDATE ap_conversations SET time = NOW() WHERE conversation_id = '$conversation_id'");
}
}
//////////////////////////////////////////////////////////////////////
Если она возвращает в качестве 1
и вы отвечаете на автоматизированный сервис, он будет include
файл, чтобы добавить сообщение и автоматический ответ в базу данных:
системы /sars_system.php:
if($message == 'hello'){
$sarsreply = 'hey, how are you?';
}
$usr_message = str_replace("'","\\'",$message);
mysqli_query($conn,"INSERT INTO ap_messages (message_id, message, sender_id, time_sent, time_read, conversation_id)
VALUES ('','$usr_message','$user_id', NOW(), NOW(), '$conversation_id')");
mysqli_query($conn, "UPDATE ap_conversations SET time = NOW() WHERE conversation_id = '$conversation_id'");
sleep(3);
mysqli_query($conn,"INSERT INTO ap_messages (message_id, message, sender_id, time_sent, time_read, conversation_id)
VALUES ('','$sarsreply','0', NOW(), '', '$conversation_id')");
Как вы можете видеть, что это главно основной, и только тест, чтобы получить его работу, я могу сделать больше работы, когда это работает, как это должно быть, и проблема я получаю пытаясь добавить ответы пользователей и отображая его в обычном режиме, затем ожидая пару секунд, прежде чем добавлять АВТОМАТИЗИРОВАННЫЙ ответ. Я попытался использовать функцию sleep()
, как вы можете видеть, но это просто задерживает всю страницу, когда я нажимаю «отправить», чтобы добавить свой ответ, вся страница, кажется, замерзает в течение 3 секунд, а затем пользовательские и автоматические ответы пролетают на экране при том же время. Сначала я пытаюсь добавить ответ пользователя, а затем подождать несколько секунд, а затем добавить автоматический ответ в базу данных. Есть ли другая функция, а не sleep()
Я могу использовать эти результаты?
AS ЗАПРОШЕННЫЙ - код для получения сообщений и отображения разговора:
$conversation_id = $convoid;
$res4=mysqli_query($conn, "SELECT * FROM ap_conversations WHERE conversation_id = '$conversation_id'");
while($row4=mysqli_fetch_array($res4))
{
$co_conversation_id = $row4['conversation_id'];
$co_user_one = $row4['user_one'];
$co_user_two = $row4['user_two'];
if($co_user_one == $user_id){
$co_recip = $co_user_two;
} else if($co_user_two == $user_id){
$co_recip = $co_user_one;
}
if($co_recip == '0'){
$sarssystem = 1;
} else {
$sarssystem = 0;
}
$res5=mysqli_query($conn, "SELECT * FROM ap_messages WHERE conversation_id = '$conversation_id'");
while($row5=mysqli_fetch_array($res5))
{
$co_message_id = $row5['message_id'];
$co_message = $row5['message'];
$co_sender_id = $row5['sender_id'];
$co_time_read = $row5['time_read'];
}
$res6=mysqli_query($conn, "SELECT * FROM ap_users WHERE user_id = '$co_recip'");
while($row6=mysqli_fetch_array($res6))
{
$co_first_name = $row6['first_name'];
$co_last_name = $row6['last_name'];
}
?>
<div class="col-xs-12 col-md-8">
<div class="panel panel-default">
<div class="panel-heading">
<div style="display:inline"><? echo ''.$co_first_name.' '.$co_last_name.''; ?></div> <div align="right" style="display:inline; float:right"><button type="button" class="btn btn-primary btn-sm" onclick="location.href='messages.php';"><span class="glyphicon glyphicon-plus-sign" aria-hidden="true"></span> New</button></div>
</div>
<div class="panel-body">
<?
}
?>
<div class="list-group-message" style="overflow-y: scroll;height:385px;width:680px">
<?
$res6=mysqli_query($conn, "SELECT * FROM ap_messages WHERE conversation_id = '$conversation_id' ORDER BY time_sent ASC");
while($row6=mysqli_fetch_array($res6))
{
$me_message = $row6['message'];
$me_message_id = $row6['message_id'];
$me_sender_id = $row6['sender_id'];
$todaysdate = date('d/m/Y');
$me_time_sent_date = date('d/m/Y', strtotime($row6['time_sent']));
$me_time_sent_date_and_time = date('d/m/Y H:i:s', strtotime($row6['time_sent']));
$me_time_sent_time = date('H:i', strtotime($row6['time_sent']));
if($todaysdate == $me_time_sent_date){
$me_time = ''.$me_time_sent_time.'';
} else {
$me_time = ''.$me_time_sent_date.' '.$me_time_sent_time.'';
}
$me_time_read = $row6['time_read'];
$res7=mysqli_query($conn, "SELECT * FROM ap_users WHERE user_id = '$me_sender_id'");
while($row7=mysqli_fetch_array($res7))
{
$me_first_name = $row7['first_name'];
$me_last_name = $row7['last_name'];
$me_display_img = $row7['display_img'];
}
mysqli_query($conn, "UPDATE ap_messages SET time_read = NOW() WHERE message_id = '{$me_message_id}' AND time_read = '0000-00-00 00:00:00' AND conversation_id = '$co_conversation_id' AND sender_id != '$user_id'");
?>
<div class="media" style="max-width: <? echo $screenwidth; ?>px;">
<div class="media-left">
<a href="#">
<img src="userimg/<? echo $me_display_img; ?>" alt="user" width="64px" height="64px" hspace="10px" class="media-object" align="left">
</a>
</div>
<div class="media-body" style="position: relative !important;">
<div style="display:inline"><b><a href=""><? echo ''.$me_first_name.' '.$me_last_name.''; ?></a></b></div> <div align="right" style="float:right; display:inline"> <? echo $me_time; ?> </div><br>
<? echo $me_message; ?>
</div>
</div>
<?
}
?>
Могу ли я спросить, почему есть какие-либо требования паузы? –
По нескольким причинам, без паузы, иногда автоматический ответ перескакивает перед сообщением пользователей, это происходит слишком быстро и выглядит глупо, и я думаю, что это смущает пользователей сайта. – Snappysites
Можем ли мы увидеть код, который вы используете, чтобы извлекать записи из базы данных в разговор? Моя первоначальная реакция заключается в том, чтобы изменить временную метку записи, которую вы автоматически создаете, до +5 секунд. DATE_ADD (NOW(), INTERVAL 5 SECOND) 'и фильтровать ваши записи с другой стороны на основе time_sent' <= NOW() '. –