Не записываются данные в БД с применением jquery ajax php

124
18 ноября 2020, 12:10

Подскажите, пожалуйста, почему не записываются данные с формы в БД? Вот код js

$(document).ready(function(){
  // When user clicks on submit comment to add comment under post
  $('.submit').on('click', function(e) {
    //e.preventDefault();
    var user_id = $('.userid').val();
    var username = $('.username').val();
    var message = $('.message').val();    
    var url = $('.comment_form').attr('action');
   e.preventDefault();
    $.ajax({
      url: url,
      type: "POST",
      data: {
        "user_id": user_id,
        "username": username,
        "message": message
      },
      cache: false,      
      success: function(data){
          $('.username').val('');
          $('.message').val('');
          $('.show').prepend('<p>' + username + '</p><p>' + message + '</p>');
        }
      });
    });
  });

Код PHP (send.php)

<?php 
error_reporting(-1);
require 'rb.php';
 R::setup('mysql:host=127.0.0.1; dbname=ajax_test', 'root', '');
 if (!R::testConnection()) 
 {
    exit('Не удалось соединиться с базой данных!');
 }
R::freeze(true);
$data = $_POST;
if (isset($data['submit_data'])) {
    $user_id = $data['user_id'];
    $user_name = $data['username'];
    $message = $data['message'];
    $ip = $_SERVER['REMOTE_ADDR'];
    $errors = array();

    if (empty($data['username']) || empty($data['message']) ) {
        $errors[] = 'No Value entered';
    }
    if (empty($errors)) {
        $messages = R::dispense('messages');
        $messages->user_id = $user_id;
        $messages->username = $user_name;
        $messages->message = $message;
        $messages->ip = $ip;
        $messages->pubdate = date('d.m.Y H:i');
        R::store($messages);
        header("Location: ".$_SERVER["HTTP_REFERER"]);
    }else {
  $errors =  array_shift($errors);    
}
}
?>

И код формы index.php

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Учим Javascript</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
    <script src="script.js"></script>
</head>
<body>  
<form class="comment_form" action="send.php" method="POST">
<input type="hidden" name="user_id" class="userid" value="5">
<input type="text" name="username" class="username"><br>
<textarea name="message" cols="40" rows="10" class="message"></textarea><br>
<input type="submit" name="submit_data" class="submit" value="Submit">
</form>
<div class="show"></div>

<noscript>JAVASCRIPT IS NOT WORKING ON YOUR BROWSER</noscript>
</body>
</html>
Answer 1

проблема в том, что на серверной стороне (send.php) Вы делаете проверку:

$data = $_POST;
if (isset($data['submit_data'])) {
  ...
}

при этом в ajax Вы не передаете submit_data, следовательно на серверной стороне(send.php) после $data = $_POST; выполняться нечему, поэтому данные не записываются.

Вам необходимо добавить submit_data в запрос ajax:

$.ajax({
  url: url,
  type: "POST",
  data: {
    "user_id": user_id,
    "username": username,
    "message": message,
    "submit_data": $(".submit").val()
  },
  cache: false,
  success: function(data) {
    $('.username').val('');
    $('.message').val('');
    $('.show').prepend('<p>' + username + '</p><p>' + message + '</p>');
  }
});

как еще можно проверить на серверной стороне, что поступили данные, переданные методом POST:

  • if($_POST) { ... }

  • if( $_SERVER['REQUEST_METHOD'] == 'POST') { ... }

  • if(count($_POST) > 0) { ... }

READ ALSO
не передаются переменные из html в php

не передаются переменные из html в php

передаю две переменные в kat11php

107
Вопрос по редиректам

Вопрос по редиректам

Пробовал вhtaccess делать

120
construct calls parent construct

construct calls parent construct

при создании контроллера в laravel появляется вот такой кусочек кода вверху:

143