2016-04-01 3 views
4

У меня есть проект с живой таблицей, привязанной к базе данных MySQL.Вставка даты в базу данных

Я сделал форму, которая будет использоваться для ввода пользователей и вставить в базу данных. Но мне сложно вставить дату.

Я использовал JQuery и Ajax, чтобы передать значения как datastring в моем PHP документ, который выполняет запрос вставки:

JQuery/Ajax:

$('.btn-add').click(function() { 
     if ($('.add-form').is(':hidden')) { 
      $('.add-form').slideDown(400); 
      $(this).children('i').fadeOut(100); 
     } else { 
      var title = $("#title").val(); 
      var genres = $("#genres").val(); 
      var languages = $("#languages").val(); 
      var dev = $("#dev").val(); 
      var date = $(".picker").next().val().split(".").reverse().join("-");; 
      // I used a date picker for this. It picks the date as "dd.mm.yyyy." 
      //and I had jquery convert it to "yyyy-mm-dd" for mysql compatibility. 
      var dataString = 'title1=' + title + '&genres1=' + genres + '&languages1=' + languages + '&dev1=' + dev + '&date1=' + date; 
      if (title == '' || genres == '' || languages == '' || dev == '' || date == '') { 
       Materialize.toast('Please complete all the forms.', 4000); 
      } else { 
       // AJAX Code To Submit Form. 
       $.ajax({ 
        type: "POST", 
        url: "php/add-game.php", 
        data: dataString, 
        cache: false, 
        success: function (result) { 
         tableLoad(); 
         Materialize.toast(result, 4000); 
         $('.add-form').slideUp(400); 
         $('.btn-add').children('i').fadeIn(100); 
        } 
       }); 
      } 
     } 
    }); 

надстройку game.php:

<?php 
    $conn = mysqli_connect("localhost", "root", "****", "db-name"); 

    $title = $_POST["title1"]; 
    $genres = $_POST["genres1"]; 
    $languages = $_POST["languages1"]; 
    $dev = $_POST["dev1"]; 
    $date = $_POST["date1"]; 

    $sql = "INSERT INTO games (title, genres, languages, developer, release-date) 
    VALUES ('$title', '$genres', '$languages','$dev','$date')"; 

    if ($conn->query($sql) === TRUE) { 
     echo "Success!"; 
    } else { 
     echo "Something went wrong."; 
    } 

    $conn->close(); 
    ?> 

Теперь я попробовал код, передавая только первые 4 текстовых значения без даты, и он работал нормально: новая строка была добавлена ​​с информацией о входе, а таблица обновилась, но я не похоже, чтобы он правильно вставлял дату.

Я пробовал эхо $date с сообщением об ошибке внутри документа .php, и он показывает мне дату в формате «yyyy-mm-dd» просто отлично. Но все же что-то пошло не так, и я не могу сказать, что это такое.

редактировать-1:

Вот структура базы данных:

редактировать-2: Содержимое файла debug.txt:

Как вы можете видеть , формат даты в порядке. (15 марта 2015)

+2

Является ли поле даты выпуска в вашей базе данных полем даты? Что хранится в базе данных? Или вообще ничего ... может также поделиться вашей структурой db? – LinkinTED

+0

Добавьте 'file_put_contents ('debug.txt', print_r ($ _ POST, TRUE));' вверху кода. Затем посмотрите на 'debug.txt', чтобы узнать, что происходит от вашего javascript-кода. Опубликуйте это в своем вопросе с помощью редактирования. – RiggsFolly

+0

, можете ли вы указать дату и время инициализации кода и определения таблицы базы данных. –

ответ

2

Похоже, что это правильно для меня. Я бы посмотрел, действительно ли столбец даты выпуска является столбцом DATE. И попробуйте жестко указать дату в запросе, чтобы узнать, есть ли проблема ввода или что.

$sql = "INSERT INTO games (title, genres, languages, developer, release-date) 
VALUES ('$title', '$genres', '$languages','$dev','2016-05-01')"; 

Edit: Я сделал некоторые испытания, это из-за имени columnt релиз-дата, так как он содержит символ «-». попробуйте изменить имя coulmn на release_ release или освободить. иначе вы могли бы избежать имени столбца в запросе, но я бы избегал этого, если это возможно, поскольку это может привести к той же ошибке при следующем запуске запроса, и не так-то просто узнать об ошибке.

$sql = "INSERT INTO games (title, genres, languages, developer, `release-date`) 
    VALUES ('$title', '$genres', '$languages','$dev','$date')" 

обратите внимание, что `является diffent от"
я даже не иметь его на моей клавиатуре.

+0

Я опубликовал структуру базы данных, чтобы показать, что это действительно столбец даты. Также судимый hardcoding дата, и она все еще не работает, я начинаю думать, что проблема может быть на стороне базы данных. Я буду продолжать изучать его. – TeeSeal

+0

Я отредактировал ответ, дайте мне знать, если он исправил проблему – Jacopo

+0

@TeeSeal, пожалуйста, попробуйте с именем столбца 'release_date' вместо' release-даты'.Если это сэкономит штраф в этом случае? –

1

Привет вам для того, чтобы разобрать строку в формат MySql Date вы можете попробовать STR_TO_DATE в MySQL() функции:

"INSERT INTO games (title, genres, languages, developer, release-date) 
('$title', '$genres', '$languages','$dev',STR_TO_DATE('$date', '%m/%d/%Y'))"; 
1

Вам нужно всего лишь изменить несколько строк в Ajax Call и PHP Code. Это сделает ваш код понятным, и, конечно, ваша проблема будет решена.

Ajax вызовов:

data:{ "dataString":dataString}, 

PHP код:

parse_str($_POST['dataString'],$data); 

$title = $data["title1"]; 
$genres = $data["genres1"]; 
$languages = $data["languages1"]; 
$dev = $data["dev1"]; 
$date = date("Y-m-d", strtotime($_POST["date1"])); 

, а затем запустить вставить свой запрос. Это будет работать.

Смежные вопросы