Вход

Просмотр полной версии : Не работает простенький ajax-чатик на файловой системе


Иса Мирзоев
14.12.2019, 23:29
Здравствуйте) Не успел вчера ночью достать здесь всех со своим корявым аджакс-запросом (помогли разобраться, спс), как новая сложность с мини-чатиком. Не работает(( Файлов там несколько.

Это config.php с файлом для будущих сообщений
<?php

$filename = "messages.txt";

?>

Файл show.php с алгоритмом перебора файлов с сообщениями

<?php

require "config.php";

$file = file($filename);
$count = count($file);

for($i = $count; $i-- > 0;){
echo $file[$i];
echo "<br>";
}

?>

Файл send.php с получением данных из инпутов и внесением всего этого в файл-messages

<?php

require "config.php";
$sender = $_POST["sender"];
$text = $_POST["message"];
$message = "\n$sender написал $message";

$file = fopen($filename,"a");
fwrite($file,$message);
fclose($file);

?>
Файл-html собственно с разметкой и js-функциями для посылки и получения данных.

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Ajax</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script type="text/javascript">
function show(){
$.ajax({
url:"show.php",
timeout:10000,
success:function(data){
$("#messages").html(data)
},
error:function(){
$("#messages").html("Не удалось загрузить сообщение")
}
})
}

function send(){
var sender = $("#sender").val()
var message = $("#message").val()

if(sender.length > 0 && message.length > 0){
$.ajax({
url:"show.php",
type:"post",
timeout:10000,
data:{"sender":sender,"message":message},
success:function(data){
document.getElementById("message").value = ""
$("#send_message_result").html("")
},
error:function(){
$("#send_message_result").html("Не удалось загрузить сообщение")
}
})
} else if(sender.length==0){
$("#send_message_result").html("Введите имя");
} else if(message.length==0){
$("#send_message_result").html("Введите текст");
}
}

var Interval = 1000;
show();
setInterval("show()",Interval);

</script>


</head>
<body>
<h1>Чат</h1>
Имя <br>
<input type="text" id="sender"><br>
Сообщение <br>
<textarea id="message" cols="30" rows="10"></textarea><br>
<input type="submit" value="send" onclick="send();">
<div id="send_message_result"></div>
<hr>
<div id="messages"></div>


</body>
</html>

laimas
14.12.2019, 23:36
Иса Мирзоев, сразу, чтобы долго не говорить, выбрасывайте messages.txt и еже с ним, и для этих целей используйте базу.

Иса Мирзоев
14.12.2019, 23:42
Иса Мирзоев, сразу, чтобы долго не говорить, выбрасывайте messages.txt и еже с ним, и для этих целей используйте базу.
Мне не хватит знаний, чтобы с БД все это связать. На файликах как-то проще сам механизм понять. Я даже не выдумывал ничего, а из видео списал код, отладчик молчит, и все равно что-то не так)

laimas
14.12.2019, 23:47
Мне не хватит знаний, чтобы с БД все это связать.
Не так страшен черт, как его малютка, со временем придет и понимание.
На файликах как-то проще сам механизм понять.
На файликах будет очень много минусов. Кстати, так как вы это делаете, неизбежны проблемы - нужно ставить блокировку на файл.

База сама занимается блокировкой, база это индексирование, что в данном случае очень большой плюс, ну и прочие выгоды.

Начитайте изучать базу по маленьку, с простых примеров, а файлики для данной задачи не годятся.

Иса Мирзоев
14.12.2019, 23:51
Не так страшен черт, как его малютка, со временем придет и понимание.

На файликах будет очень много минусов. Кстати, так как вы это делаете, неизбежны проблемы - нужно ставить блокировку на файл.

База сама занимается блокировкой, база это индексирование, что в данном случае очень большой плюс, ну и прочие выгоды.

Начитайте изучать базу по маленьку, с простых примеров, а файлики для данной задачи не годятся.
Я Вас понимаю, просто самому интересно, где же ошибка, если я все списывал из ролика) И перепроверял, и бегло вроде косяков не заметно. Так-то я с Вами согласен, что минусов полно, просто не понимаю логики ajax-запросов, что куда отправляется и как принимается... Думал, вроде ролик короткий, что-то можно сделать быстро и понять попытаться)) Простую гостевую книгу на базе данных-то написать можно спокойно.
Вот он, если что))
https://www.youtube.com/watch?v=TYRvlMG6gR4

laimas
15.12.2019, 00:09
how.php с алгоритмом перебора файлов с сообщениями

Это какой такой алгоритм, если функция file() выполняет это (https://www.php.net/manual/ru/function.file.php), о каком переборе файлов речь?

Иса Мирзоев
15.12.2019, 00:18
Это какой такой алгоритм, если функция file() выполняет это (https://www.php.net/manual/ru/function.file.php), о каком переборе файлов речь?
В цикле for перебирает))
Я сейчас с БД скину вариант. У меня информация добавляется в базу, но не выводится, 99% что я неправильно функцию success написал) Мне сюда прислать или новую тему создать, как думаете лучше будет?)

laimas
15.12.2019, 00:22
В цикле for перебирает))

Что? Эта функция разбивает содержимое файла (по окончанию строк) и помещает все в массив. Вот этот массив можно перебирать.

Иса Мирзоев
15.12.2019, 00:24
Что? Эта функция разбивает содержимое файла (по окончанию строк) и помещает все в массив. Вот этот массив можно перебирать.
Ааа, понятно)) Спасибо))
Я тогда новую тему создам для варианта с БД, чтобы не путался никто)

laimas
15.12.2019, 00:24
информация добавляется в базу, но не выводится, 99% что я неправильно функцию success написал

Код на клиенте никакого отношения к базе вообще не имеет, даже РНР сам ничего из базы не выбирает, он только предоставляет инструменты для удобной работы с базой. А не выбирает потому, что и структура базы, видимо, не удачная, и запросы на выборку тоже.

Иса Мирзоев
15.12.2019, 00:29
Код на клиенте никакого отношения к базе вообще не имеет, даже РНР сам ничего из базы не выбирает, он только предоставляет инструменты для удобной работы с базой. А не выбирает потому, что и структура базы, видимо, не удачная, и запросы на выборку тоже.

Вот ссылка на тему с БД))
https://javascript.ru/forum/showthread.php?p=517521#post517521
Запрос-то как раз верный)) Уж с азами SQL - запросов я разобрался))