Подскажите, пожалуйста, почему не записываются данные с формы в БД? Вот код 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>
проблема в том, что на серверной стороне (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) { ... }
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
при создании контроллера в laravel появляется вот такой кусочек кода вверху: