Данные из формы отправки не могут быть вставлены в строку базы данных - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь вставить новый продукт в свою базу данных продуктов, используя ajax php и mysql, pdo.Форма находится в другом html-файле и загружается в модал начальной загрузки, как только я нажимаю кнопку добавления продукта.

Ниже приведена форма

<div class="container">
     <form class="form" id="insert-product" method="POST">
              <div class="form-group">
                  <label class="form-label" for="name">Product Title</label>
                  <input type="text" class="form-control" id="title" name="ptitle"  tabindex="1" required>
              </div>              
               <div class="form-group">
                  <label class="form-label" for="message">Product Description</label>
                  <input type="text" class="form-control" id="desc" name="description" tabindex="2" required>                               
              </div>
              <div class="form-group">
                  <label class="form-label" for="email"> Price</label>
                  <input type="text" class="form-control" id="price" name="price" tabindex="2" required>
              </div>                            
              <div class="form-group">
                  <label class="form-label" for="subject">Picture of Product</label>
                  <input type="text" class="form-control" id="subject" name="picture"  tabindex="3">
              </div>                            

              <div class="text-center">
                  <button type="submit" name="submit" class="btn btn-start-order">SAVE</button>
              </div>
          </form>
      </div>
  </div>

Это скрипт, который использует ajax для связи с php-файлом.readProducts () - это простая функция, которая извлекает данные из базы данных.

   $('#insert-product').on('submit', function(event) {
           event.preventDefault();
           $.ajax({
                    url: 'insertPro.php',
                    type: 'POST',
                    data: $('#insert-product').serialize(),
                    success: function(data) {

                        readProducts();
                    }

                 });
       })

Это php-файл, который вставляет данные в базу данных.Connect.php протестирован и работает правильно.

<?php 
require_once('connect.php');

if (!empty($_POST)) {
    $response = array();

    $query = "insert into products(id,name,description,img_file,price) values(:title, :description, :picture, :price)";
    $stmt = $DBcon->prepare( $query );

    $stmt->bindParam(':title', $title);
    $stmt->bindParam(':description', $description);
    $stmt->bindParam(':picture', $picture);
    $stmt->bindParam(':price', $price);

    $title = $_POST["ptitle"];
    $description = $_POST["description"];
    $price = $_POST["price"];
    $picture = $_POST["picture"];

    $stmt->execute();

    if ($stmt) {
        $response['status']  = 'success';
        $response['message'] = 'Product Deleted Successfully ...';
    } else {
        $response['status']  = 'error';
        $response['message'] = 'Unable to delete product ...';
    }
}

Это мой файл подключения.

<?php

    $DBhost = "localhost";
    $DBuser = "root";
    $DBpass = "";
    $DBname = "test";

    try{

        $DBcon = new PDO("mysql:host=$DBhost;dbname=$DBname",$DBuser,$DBpass);
        $DBcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    }catch(PDOException $ex){

        die($ex->getMessage());
    }

?>

Когда я нажимаю кнопку для отправки данных, ajax обновляется, как и должно, нозапись не добавлена ​​в таблицу моей базы данных.

1 Ответ

0 голосов
/ 16 февраля 2019

Я предполагаю, что столбец id таблицы products является столбцом автоинкремента.

В этом случае вы либо оставляете его ВЫКЛ в списке столбцов, либо присваивает ему значение NULL

Так что либо

$query = "insert into products(name,description,img_file,price) 
                        values(:title, :description, :picture, :price)";

Или

$query = "insert into products(id,name,description,img_file,price) 
                        values(NULL, :title, :description, :picture, :price)";

Также в конце этого сценария вы создаете ответ, но фактически никогда не отправляете его обратно на вызов AJAX

$stmt->execute();

if ($stmt) {
    $response['status']  = 'success';
    $response['message'] = 'Product Deleted Successfully ...';
} else {
    $response['status']  = 'error';
    $response['message'] = 'Unable to delete product ...';
}
// add this line
echo $json_encode($response);

Затем, добавив dataType: 'JSON', к своим параметрам AJAX, вы можете обработать результаты в data как объект javascritp

    $.ajax({
        url: 'insertPro.php',
        type: 'POST',
        data: $('#insert-product').serialize(),
        dataType: 'JSON',
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...