0

Всем привет, делаю форум. Использую ajax для отправки сообщений без перезагрузки, и написал такой код: JS:

```
$(document).on('load', function() {
    $('#form-bt').click(function(){
        var comment = $("#comment").val();
        var username = $("#username").val();
        $.ajax({
            url: 'index.php',
            type: 'POST',
            dataType: 'json',
            data: {
                comment: comment,
                username: username,
            },
            success: function(data){
                alert("Наконец-то всё получилось!");
            },
            error: function(){
                console.log('ERROR');
            }
        })
    })
})
``` 

PHP:

```
 <?php
    include 'index.html';
    $connect = new PDO ("mysql:host=localhost; dbname=forum;charset=UTF8", 'root', 'root');
    if (isset($_POST['username'])){
        $username = $_POST['username'];
        $comment = $_POST['comment'];
        $date = date('H:i:s');
        $query = $connect->query("INSERT INTO forum.comments (username, comment, data) VALUES ('$username', '$comment', '$date')");
    }
$comments = $connect-&gt;query(&quot;SELECT * FROM forum.comments ORDER BY data DESC&quot;);
$comments = $comments-&gt;fetchAll(PDO::FETCH_ASSOC);
if ($comments){
    foreach($comments as $comment){

        echo &quot;{$comment['data']} . {$comment['username']}&quot;;
        echo &quot;&lt;br&gt;&quot;;
        echo &quot;{$comment['comment']}&quot;;
        echo &quot;&lt;br&gt;&quot;;

    }
}else{
    echo &quot;Пока нет ни одного комментария :(&quot;;
}

?>

</code></pre>
<p>HTML:</p>
<pre><code>```
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Document&lt;/title&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot;&gt;
    &lt;style&gt;
        body{
    font-family:'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;
    box-sizing: border-box;
}
* {
    box-sizing: border-box;
}
input, textarea{
    position: relative;
    width: 100%;
    margin: 5px;
    bottom: 0px;
}
form{
    display: flex;
    flex-direction: column;
}
p{
    font-size: 1vw;
    color: #357a6a;
}
.block-comment, .block{
    margin: 2vw 2vw 2vw 2vw;
    font-weight: bold;
    overflow-y: scroll;
}
.block{
    max-height: 30vw;
}
hr{
    background-color: #414b0c;
    margin: 2vw 2vw 2vw 2vw;
    height: 1%;
}
.line{
    width: 100%;
    height: 0.2vw;
    margin-top: 0.5vw;
    background-color: #414b0c;
}
h2{
    font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif; 
    margin: 2vw 2vw 2vw 2vw;
}
@font-face {
    font-family: &quot;Vinnytsia City&quot;; 
    src: url(&quot;https://fonts-online.ru/fonts/vinnytsia-city&quot;) format(&quot;truetype&quot;); 
    font-style: normal; 
    font-weight: normal; 
    font-family: Vinnytsia City; /* Гарнитура шрифта */
    src: url(https://fonts-online.ru/fonts/vinnytsia-city); /* Путь к файлу со шрифтом */
} 
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;h2&gt;Форум&lt;/h2&gt;

&lt;div class=&quot;block&quot;&gt;
    &lt;form action=&quot;&quot; method=&quot;POST&quot; id=&quot;form&quot;&gt;
        &lt;div class=&quot;block-comment&quot;&gt;
            &lt;input type=&quot;text&quot; id=&quot;username&quot; name=&quot;username&quot; class=&quot;r&quot; placeholder=&quot;Ваше имя&quot; required&gt;
            &lt;textarea name=&quot;comment&quot; id=&quot;comment&quot; cols=&quot;10&quot; rows=&quot;5&quot; class=&quot;r&quot; placeholder=&quot;Ваш комментарий&quot; required&gt;&lt;/textarea&gt;
            &lt;input type=&quot;button&quot; id=&quot;form-bt&quot; value=&quot;отправить&quot;&gt;
        &lt;/div&gt;
    &lt;/form&gt;
&lt;/div&gt;
&lt;script src=&quot;jquery-3.6.0.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;form.js&quot;&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

При этом, не используя submit. Пожалуйста, помогите.

Al Dv
  • 27
  • почему ты решил, что "сообщения не отправляются" и что ты под этим подразумеваешь? – Алексей Шиманский Jul 08 '22 at 06:42
  • Они должны выводится на странице и записываться в базу данных – Al Dv Jul 08 '22 at 06:48
  • а происходит что? – Алексей Шиманский Jul 08 '22 at 06:51
  • Ничего, остаётся всё также как до ввода сообщения – Al Dv Jul 08 '22 at 06:54
  • Включай отображение ошибок php, смотри ошибки в консоли браузера и во вкладке network и используй отладку как на фронте так и на бэке, чтобы понимать что где происходит – Алексей Шиманский Jul 08 '22 at 06:56
  • Вы отправляете на сервер JSON-строку, поэтому $_POST - пустой. Таким образом, либо отправляйте данные как multipart/form-data, либо на сервере декодируете JSON-строку из php://input – Laukhin Andrey Jul 08 '22 at 08:50
  • Отправил данные как multipart/form-data, сообщения всё равно не отправляются – Al Dv Jul 08 '22 at 09:04
  • var_dump($POST) - лучшее средство отладки. В союзе с DevTools, конечно. Оставьте только эту строчку в скрипте и смотрите во вкладке Network. _"Отправил данные как multipart/form-data" - вы уверены, что правильно это сделали? – Laukhin Andrey Jul 08 '22 at 09:11
  • @LaukhinAndrey var_dump? вы из какого года пишите - из 2005-го? – Алексей Шиманский Jul 08 '22 at 14:15
  • @АлексейШиманский А что, в 2022 её уже отменили? Старый надежный инструмент лучше новых двух. Всего одна строчка и в ответе видно, есть POST-данные или нет. Поделитесь более продвинутой технологией? – Laukhin Andrey Jul 08 '22 at 18:17
  • @LaukhinAndrey а что, в 2022 при стиральных машинках-автоматах вы всё ещё на речке стираете вещи камнями разбивая?)) .......Применять отладку попроще. И не надо ставить миллион раз всяких выводов в output в каждом месте, где предполагается ошибка. Тем более этих мест может быть много. – Алексей Шиманский Jul 08 '22 at 18:31
  • @АлексейШиманский Не может быть этих мест много. Человеку нужно выяснить, есть POST-данные или нет. И давайте без абстракций, расскажите про стиральную машинку будущего, как "попроще" в данном случае выяснить, пришли пост данные или нет? Я предложил конкретных два простых действия. Умираю от любопытства.... – Laukhin Andrey Jul 08 '22 at 18:39
  • @LaukhinAndrey "Человеку нужно выяснить, есть POST-данные или нет" --- нет, ему нужно выяснить что и где не работает.........не умирайте, дышите, живите. – Алексей Шиманский Jul 08 '22 at 18:45
  • @АлексейШиманский Вы на каком комментарии нить обсуждения потеряли? Вопрос изначально стоит в том, что сообщения не отправляются. По коду понятно, почему POST пустой. Я предложил два простых действия, как проверить, есть POST-данные или нет. Уверен на 100%, что вы не знаете варианта проще, иначе уже поделились бы, а абстрактные рассуждения ничем не помогут автору. – Laukhin Andrey Jul 08 '22 at 19:01
  • @LaukhinAndrey то, что автор считает что "не отправляется" не значит что это так и есть. Для поиска причины есть хорошие средства, они описаны в дубликатах, которыми закрыт текущий, там всё можно найти (и да, я, как совсем неумный, являюсь автором ответов)........Ваше предположение о том что "вы очевидно всё увидели в коде" ложно, т.к никакой json ТС не отправляет. Там обычный объект......начали советовать какие-то бредни в виде multipart/form-data. Вы вообще знаете зачем оно нужно? в какие моменты лучше отсылать?.....ну и ещё урок...вот он открыл консоль и видит пустой ответ - дальше что? – Алексей Шиманский Jul 08 '22 at 19:23
  • @AlDv $( window ).on( "load", function() { ... }) или $( document ).ready(function() { .. }). По этой причине не отправляется сообщение. – Laukhin Andrey Jul 09 '22 at 11:04
  • Всё, сообщения отправляются, всё хорошо. Спасибо! – Al Dv Jul 09 '22 at 11:43
  • Алексей Шиманский, и вам тоже большое спасибо! – Al Dv Jul 09 '22 at 11:43

0 Answers0