Отправка данных по ajax на контроллер php?

Делаю тестовое задание.Необходимо реализовать гостевую книгу на MVC.Отправляю данные с формы посредством ajax на контроллер моей гостевой книги,а дальше делаю запрос уже к базе данных.Но в контроллере не могу получить эти данные с формы, чтобы в дальнейшем с ними работать.Проверил запрос уходит на сервер,а в контроллере эти данные получить не могу.Ниже прилагаю мой код.

Файл route.php

<?php

class Route
{

static function start()
{
    $controller_name = 'Guestbook';
    $action_name = 'index';

    $routes = explode('/', $_SERVER['REQUEST_URI']);

    if (!empty($routes[1])) {
        $controller_name = $routes[1];
    }

    if (!empty($routes[2])) {
        $action_name = $routes[2];
    }

    $model_name = 'Model_' . $controller_name;
    $controller_name = 'Controller_' . $controller_name;
    $action_name = 'action_' . $action_name;

    $model_file = strtolower($model_name) . '.php';
    $model_path = "application/models/" . $model_file;

    if (file_exists($model_path)) {
        include "application/models/" . $model_file;
    }

    $controller_file = strtolower($controller_name) . '.php';
    $controller_path = "application/controllers/" . $controller_file;

    if (file_exists($controller_path)) {
        include "application/controllers/" . $controller_file;
    } else {
        Route::ErrorPage404();
    }

    $controller = new $controller_name;
    $action = $action_name;

    if (method_exists($controller, $action)) {
        $controller->$action();
    } else {
        Route::ErrorPage404();
    }
}

function ErrorPage404()
{
    $host = 'http://' . $_SERVER['HTTP_HOST'] . '/';
    header('HTTP/1.1 404 Not Found');
    header("Status: 404 Not Found");
    header('Location:' . $host . '404');
}
}


Файл template_view.php

<!DOCTYPE html>

<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>

    <title>Тестовое задание</title>

    <link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css"/>
    <link rel="stylesheet" type="text/css" href="/css/bootstrap-theme.min.css"/>

    <link rel="stylesheet" type="text/css" href="/css/style.css"/>

    <script src="/js/bootstrap.min.js" type="text/javascript"></script>
    <script src="/js/jquery-3.1.1.min.js" type="text/javascript"></script>
</head>
<body>

<div class="wrapper container">
    <header>
        <h2>Гостевая книга</h2>


    </header>

    <div class="row">
        <section class="col-md-12">
            <?php include 'application/views/' . $content_view; ?>
        </section>
    </div>
</div>

    <script>

        $(".form").submit(function(){

            var name = $("#inputName").val();
            var email = $("#inputEmail").val();
            var homepage = $("#inputHomepage").val();
            var text = $("#textarea").val();
            var tags = $("#tags").val();
            var captcha = $("#captcha").val();

            $.ajax({
                type: "POST",
                url: "/guestbook/index",
                data: {
                    name:name,
                    email:email,
                    homepage:homepage,
                    text:text,
                    tags:tags,
                    captcha:captcha
                },
                success: function(data){
                    alert("Данные успешно отправлены");
                    console.log(data);
               }
            });

            return false;
        });

    </script>
</body>
</html>


Файл form.php

<form class="form">
    <h3>Оставить сообщение:</h3>
    <div class="form-group">
        <label for="inputName">Ваше имя:</label>
        <input type="text" class="form-control" id="inputName" placeholder="Введите Ваше имя" require>
    </div>
    <div class="form-group">
        <label for="inputEmail">Адрес email:</label>
        <input type="email" class="form-control" id="inputEmail" placeholder="Введите email" require>
    </div>
    <div class="form-group">
        <label for="inputHomepage">Домашняя страница:</label>
        <input type="url" class="form-control" id="inputHomepage" placeholder="Введите страницу в формате url">
    </div>
    <div class="form-group">
        <label for="textarea">Сообщение:</label>
        <textarea id="textarea" class="form-control"></textarea>
    </div>
     <div class="form-group">
        <label for="tags">Теги</label>
        <textarea id="tags" class="form-control"></textarea>
    </div>

    <div class="form-group">
        <label for="captcha">Капча:</label>
        <input type="text" name="captcha" id="captcha" maxlength="6" size="6"/><img src="/captcha.php"/></td>
    </div>

    <button type="submit" class="btn btn-default">Отправить</button>
</form>


Файл controller_guestbook.php

<?php

class Controller_Guestbook extends Controller
{

function __construct()
{
    $this->model = new Model_Guestbook();
    $this->view = new View();
}

function action_index()
{
    $error = array();

    $post = array(
        'username' => $_POST['name'],
        'email' => $_POST['email'],
        'homepage' => $_POST['homepage'],
        'text' => $_POST['text'],
        'tags' => $_POST['tags']
    );

    if ((!empty($post))||(isset($_REQUEST['captcha']))) {
        $captcha = false;

        if ($_REQUEST['captcha'] == $_SESSION['cap_code']) {
            $captcha = true;
        } else {
            $data['error'] = [[
                'captcha' => 'Капча введена не верно!',
            ]];
        }

        $data['post'] = $post;

        if ((!empty($post))&&($captcha)) {

            $error = $this->model->validate($post);

            if (empty($error) && ($captcha)) {
                $this->model->create($post, false);
                $data['post'] = array();
                $data['success'] = 'Сообщение успешно отправлено';
            } else {
                $data['error'] = $error;
            }
        }
    }

    $data['items'] = $this->model->getAllActiveGuestbook();

    $this->view->generate('guestbook_view.php', 'template_view.php', $data);
}

}
  • Вопрос задан
  • 624 просмотра
Пригласить эксперта
Ответы на вопрос 3
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Проверил запрос уходит на сервер,а в контроллере эти данные получить не могу.

Для этого нужно понимать основы дебаггинга, надо пройтись по всей цепочке отправки /обработки данных:

1) проверить что вы получаете в переменные в яваскрипт функции, вынести переменную data до аякс запроса, сформировать ее и вывести в консоль. Кроме того у вас имена свойств в data без кавычек.
2) Проверить не только что запрос к серверу уходит, но и какие данные он передает и что возвращает(вкладка network)
3) В экшене первой строчкой пропишите var_dump($_POST);exit();. Это сразу даст понять приходит ли в экшн что-то вообще.

Дальше вариантов уже много что у вас может быть не так, так что думайте самостоятельно.
Ответ написан
Комментировать
x_Romax
@x_Romax
Говнокодер
Так у тебя в форме не прописан ни action ни method, а в input на стоит name
Ответ написан
Комментировать
402d
@402d
начинал с бейсика на УКНЦ в 1988
искать отправленое из js через file_get_contents("php://input")
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы