CoffeeGuy
CoffeeGuy

Reputation: 75

Trouble with AJAX inserting data in DB

I'm using AJAX to build a chat system for a twitch video. The point is to dynamically display the submitted messages without the page being reloaded, and it works. However the messages aren't submitted to my Database and upon page refresh the submitted messages are gone. The ones that i manually inserted in the DB are displayed. Here's my code :

Dashboard.twig :

<script>

$("#forminput").submit(function(e){
    var url = "dashboard";
    $.ajax({
        type: "POST",
        url: url,
        data: $("#forminput").serialize(),
        dataType: 'json', //what is returned
        success : function(data)
        {
            $("#table").append("<tr><td>" + data.name + "</td><td>" + data.comment + "</td></tr>");
        }

    });
    e.preventDefault();
});

DisplayCommentsModel:-

private $name;
private $comment;

public function printComments()
{
    $app = \Yee\Yee::getInstance();

    $cols = Array ("name", "comment");

    $comments = $app->db['db1']->get("comments", null, $cols);  
    if ($app->db['db1']->count > 0)
    {
        return $comments;
    }
}

AddCommentsModel

private $name;
private $comment;

public function __construct($name, $comment)
{
    $this->name = $name;
    $this->comment = $comment;
}

public function comment()
{
    if ($this->validateEmptyFields() == false)
    {
        return false;
    }
    if ($this->validateFilledFields() == false)
    {
        return false;
    }
    return true;
}

public function validateEmptyFields()
{
    if(empty($this->name) || empty($this->comment))
    {
        return false;
    }
    else
    {
        return true;
    }

}

public function validateFilledFields()
{
    $nameLenght = strlen($this->name);
    $commentLenght = strlen($this->comment);

    if($nameLenght < 2 && $commentLenght < 2)
    {
        return false;
    } 
    return true;
}

public function insertCommentsInDb()
{
    $app = \Yee\Yee::getInstance();

    $data = array(
        "name" => $this->name,
        "comment" => $this->comment
        );

    $app->db['db1']->insert('comments', $data);
}

CommentsController :

public function index()
{
    $app = $this->getYee();
    $newDisplayCommentsModel = new DisplayCommentsModel();
    $comments = $newDisplayCommentsModel->printComments();
    $data = array(
        'comments' => $comments
    );
    $app->render('dashboard/dashboard.twig', $data);
}

/**
 * @Route('/dashboard')
 * @Name('dashboard.post')
 * @Method('POST')
 */
public function post()
{
    $app = $this->getYee();

    $name = $app->request->post('name');
    $comment = $app->request->post('comment');

    //add to database

    $data = array(
        'name' => $name,
        'comment' => $comment
    );

    echo json_encode($data);
}

Upvotes: 1

Views: 63

Answers (2)

Khant Wai Kyaw
Khant Wai Kyaw

Reputation: 138

$data=json_encode($data); // not need echo

$this->db->insert('tableName',$data); // You forgot this line and this will insert json_format to database

Upvotes: 1

phpkode
phpkode

Reputation: 250

In post function in your CommentsController file, you are not inserting data into database. The code section below will just echo back whatever is received.

$data = array(
        'name' => $name,
        'comment' => $comment
    );
echo json_encode($data);

You should call insertCommentsInDb() available in AddCommentsModel before you send back the data

Upvotes: 1

Related Questions