Помогите разобраться как сделать запись в базу и вывод на страницу без перезагрузки страницы, моя мысль такова при переходе по url, в моем случае корневая папка сайта, используется контроллер CommentsController, его метод actionComment вызывает статические методы модели, Comments::addComents на запись в базу Comments::getComments() на вывод из базы. без ajax все работает исправно с ajax добавляет на страницу но не пишет в базу, я так понимаю у меня проблема с url к контроллеру(пробовал разные варианты подключения ) Роутинг `
class Router{
private $routes;
public function __construct(){
$routersPath = ROOT.'/config/routers.php';
$this->routes = include($routersPath);
}
private function getURI(){
if (!empty($_SERVER['REQUEST_URI'])) {
return trim($_SERVER['REQUEST_URI'], '/');
}
}
public function run(){
$uri = $this->getUri();
foreach ($this->routes as $uriPattern => $path){
if (preg_match("~$uriPattern~", $uri)){
$internalRoute = preg_replace("~$uriPattern~", $path, $uri);
$segments = explode('/', $internalRoute);
$controllerName = array_shift($segments).'Controller';
$controllerName = ucfirst($controllerName);
$actionName = 'action'.ucfirst(array_shift($segments));
$parameters = $segments;
$controllerFile = ROOT . '/controllers/' . $controllerName . '.php';
if (file_exists($controllerFile)){
include_once ($controllerFile);
}
$controllerObject = new $controllerName;
$result = $controllerObject->$actionName($parameters);
if ($result != null){
break;
}
}
}
}
}`
Роутинг
return array(
'' => 'comments/comment');
Вот код контроллера
class CommentsController {
public function actionComment() {
if (isset($_POST['submit'])){
$name = $_POST['name'];
$email = $_POST['email'];
$comments = $_POST['comments'];
$result = Comments::addComents($name, $email, $comments);
}
$commentsList = Comments::getComments();
require_once(ROOT. '/views/comments/comments.php');
return true;
}
}
МОДЕЛЬ
class Comments {
public static function addComents($name, $email, $comments){
$db = Db::getConnection();
$sql = 'INSERT INTO user_comments (name, email, comments) '
.'VALUES (:name, :email, :comments)';
$result = $db->prepare($sql);
$result->bindParam(':name', $name, PDO::PARAM_STR);
$result->bindParam(':email', $email, PDO::PARAM_STR);
$result->bindParam(':comments', $comments, PDO::PARAM_STR);
$result->execute();
}
public static function getComments(){
$db = Db::getConnection();
$commentsList = array();
$sql = 'SELECT id, name, email, comments '
. 'FROM user_comments '
. 'ORDER BY id DESC '
. 'LIMIT 9';
$result = $db->query($sql);
$i = 0;
while($row = $result->fetch()){
$commentsList[$i]['name'] = $row['name'];
$commentsList[$i]['email'] = $row['email'];
$commentsList[$i]['comments'] = $row['comments'];
$i++;
}
return $commentsList;
}
}
INDEX
$router = new Router();
$router->run();
Форма
<form action="" method="POST" id="form-message">
<div class="form-group-wrapper">
<div class="form-group">
<label for="name">Имя</label>
<input type="text" class="form-control" id="name" name="name">
<label for="email">E-Mail</label>
<input type="email" class="form-control" id="email" name="email">
</div>
</div>
<div class="form-group form-group-flex">
<label for="comments">Комментарий</label>
<textarea class="form-control" id="comments" rows="" name="comments"></textarea>
</div>
<div class="col-xs-12 text-right reset-padding">
<button type="submit" name="submit" class="btn btn-danger" id="btn-submit">Записать</button>
</div>
</form>
Проверка формы и Ajax запрос
$(document).ready(function(){
$('#form-message').on('submit', function(e){
e.preventDefault();
console.log('asfd')
var form = $(this);
var name = $('#name');
var email = $('#email');
var comments = $('#comments');
if(name.val() == ''){
name.css("border", "1px solid red");
return;
} else {
name.css("border", "1px solid transparent");
}
if(email.val() == ''){
email.css("border", "1px solid red");
}
else {
var r = /^([a-z0-9_\.-])+@[a-z0-9-]+\.([a-z]{2,4}\.)?[a-z]{2,4}$/i;
if (!r.test(email.val())) {
email.css("border", "1px solid red");
return;
}
else {
email.css("border", "1px solid transparent");
}
}
if(comments.val() == ''){
comments.css("border", "1px solid red");
return;
} else {
comments.css("border", "1px solid transparent");
}
$.ajax({
type: "POST",
async: false,
url: "../../controllers/Comments",
data: 'email='+email.val()+'&name='+name.val()+'&comments='+comments.val(),
dataType: "html",
success: function(data) {
console.log('success')
$('.message-container').append(
'<div class="col-md-4 col-sm-6 col-xs-12 comment-item">'+
'<div class="item text-center">'+
'<div class="item-header">' +
name.val() +
'</div>' +
'<div class="item-body">' +
'<div class="item-body-email">'+ email.val() +'</div>' +
'<div class="item-body-message">' + comments.val() + '</div>'+
'</div>'+
'</div>' +
'</div>'
);
//$form.trigger( 'reset');
}
});
})
});
Разобрался, проблема была в контроллере, в изменил условие if в ajax запросе url пустой
class CommentsController {
public function actionComment() {
if (isset($_POST['name'], $_POST['email'], $_POST['comments'])){
$name = $_POST['name'];
$email = $_POST['email'];
$comments = $_POST['comments'];
$result = Comments::addComents($name, $email, $comments);
}
$commentsList = Comments::getComments();
require_once(ROOT. '/views/comments/comments.php');
return true;
}
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
История такая: я вывожу из базы адреса и названия видео роликов и помещаю их спискомПроигрыватель хочу использовать flowplayer
нужно в js добавить точки на карте, которые тащаться с mysqlКак это реализовать
Как переместить папку с подпапками и файлами в ларавел используя Storage?
Собсна, насколько я понял, я не могу изменять строку, если я инициализировал на неё указатель, примером, char* a("dududu"); (вызывается исключение...