Мой сын создал объект на своем размещенном сайте для семьи, чтобы записывать данные из поездок в файл MySql. Затем они отображаются на веб-странице на карте (используются карты Google, но размещаются в частном порядке.)Импорт даты в mySql из файла CSV
К сожалению, моего сына доставили в больницу несколько недель назад и все еще там, поэтому он предложил получить ответ на если я разместил его здесь.
Данные mysql создаются с использованием php-скрипта для импорта из файлов csv, создаваемых регистраторами. Мой сын, к сожалению, не помнит, где он получил сценарий.
Этот сценарий работает ЗА ИСКЛЮЧЕНИЕМ для поля даты (что очень важно).
Сценарий выглядит следующим образом:
$tot = 0;
$handle = fopen($_FILES["uploaded"]["tmp_name"], "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
for ($c=0; $c < 1; $c++) {
if($data[0] !='Latitude'){
mysql_query("INSERT INTO positions(
Latitude,
Longitude,
DateOccurred,
Altitude,
Speed,
Angle
)VALUES(
'".mysql_real_escape_string($data[0])."',
'".mysql_real_escape_string($data[1])."',
'".mysql_real_escape_string($data[2])."',
'".mysql_real_escape_string($data[16])."',
'".mysql_real_escape_string($data[15])."',
'".mysql_real_escape_string($data[8])."'
)")or die(mysql_error());
}
$tot++;}
}
fclose($handle);
Это импортирует все, чтобы MySQL КРОМЕ для третьего элемента ($ данных [2]), которая является дата и импорта, как нули (т.е. 00:00:00 00:00).
Есть ли здесь какие-то кодировщики, которые могут сказать мне, как исправить это, или указать мне в другом месте, которое может помочь.
Если необходима дополнительная информация, пожалуйста, дайте мне знать.
Благодаря
EDIT: Вот структура таблицы SQL
|//**ID**//|int(11)|No|
|FK_Users_ID|int(11)|No|
|FK_Trips_ID|int(11)|Yes|NULL
|FK_Icons_ID|int(11)|Yes|NULL
|Latitude|double|No|
|Longitude|double|No|
|Altitude|double|Yes|0
|Speed|double|Yes|0
|Angle|double|Yes|NULL
|DateAdded|timestamp|No|CURRENT_TIMESTAMP
|DateOccurred|timestamp|Yes|0000-00-00 00:00:00
|Comments|varchar(255)|Yes|NULL
|ImageURL|varchar(255)|Yes|NULL
|SignalStrength|int(11)|Yes|NULL
|SignalStrengthMax|int(11)|Yes|NULL
|SignalStrengthMin|int(11)|Yes|NULL
|BatteryStatus|tinyint(4)|Yes|NULL
Вот пример содержимого CSV файла:
Latitude,Longitude,DateOccurred,ID,IconName,Comments,TripName,ImageURL,Angle,CellID,SignalStrength,SignalStrengthMin,SignalStrengthMax,BatteryStatus,Source,Speed,Altitude
51.1923274,-3.102753383,20/03/2013 14:17,2352,,,dentist,,287.2,,,,,,0,7.71666666,13
51.19254205,-3.103862483,20/03/2013 14:17,2353,,,dentist,,285.4,,,,,,0,7.665222216,14
51.19268602,-3.105032683,20/03/2013 14:17,2354,,,dentist,,272.1,,,,,,0,9.054222214,11.1
Если что-то еще нужно, дайте мне знать.
Благодаря
EDIT 2
Я попробовал решение от Хэвлок - вариант 3.
Как еще возвращаются нули в DateOccurred поле я добавил еще одну инструкцию, чтобы вставить даты csv в текстовое поле комментариев в базе данных mysql.
код выглядит следующим образом
if($data[0] !='Latitude'){
$timestamp = strtotime($data[2]);
mysql_query("INSERT INTO positions(
Latitude,
Longitude,
DateOccurred,
Comments,
Altitude,
Speed,
Angle
)VALUES(
'".mysql_real_escape_string($data[0])."',
'".mysql_real_escape_string($data[1])."',
'".mysql_real_escape_string($data[2])."',
'".mysql_real_escape_string(date('Y-m-d H:i:s', $timestamp))."',
'".mysql_real_escape_string($data[16])."',
'".mysql_real_escape_string($data[15])."',
'".mysql_real_escape_string($data[8])."'
)")or die(mysql_error());
В результате, данные, вставленные в поле «Комментарии» во всех записях чтения
1969-12-31 18:00:00
в то время как информация, содержащаяся в CSV был
20/03/2013 14:17
Если я опускаю линии
$timestamp = strtotime($data[2]);
and
'".mysql_real_escape_string(date('Y-m-d H:i:s', $timestamp))."',
В поле комментариев содержатся правильные данные из файла csv (в виде текста).
Я не уверен, насколько значительна эта информация, но я подумал, что это может означать что-то здесь.
EDIT 3
Как 'DateTime :: createFromFormat()' должен работать с PHP 5.3.22 я снова сценарий и вошел в код, чтобы проверить его. Я добавил этот
$date = DateTime::createFromFormat('d/m/Y H:i', $data[2]);
echo $date->format('Y-m-d H:i:s');
эхо было напечатать результаты, чтобы увидеть, что они были. Скрипт выглядит следующим образом
if($data[0] !='Latitude'){
$date = DateTime::createFromFormat('d/m/Y H:i', $data[2]);
echo $date->format('Y-m-d H:i:s');
mysql_query("INSERT INTO positions(
Latitude,
Longitude,
DateOccurred,
Altitude,
Speed,
Angle
)VALUES(
'".mysql_real_escape_string($data[0])."',
'".mysql_real_escape_string($data[1])."',
'".mysql_real_escape_string(date('Y-m-d H:i:s'))."',
'".mysql_real_escape_string($data[16])."',
'".mysql_real_escape_string($data[15])."',
'".mysql_real_escape_string($data[8])."'
)")or die(mysql_error());
}
Это привело к сценарию печати даты и введя его в правильном формате в поле MySQL.
ОДНАКО - дата, которая печатается и хранится в текущая дата и время, а не дата хранится в файле CSV, поэтому утверждение, кажется, игнорируя $ данных [2}
Можете ли вы добавить детали из MySQL, такие как запуск: описать позиции; Это может предоставить некоторую полезную информацию о схеме таблицы. Помимо этого, возможно, что источник данных этой формы не обрабатывается должным образом, и вместо значения загруженного контента используется значение «по умолчанию». Вы можете попробовать показать некоторые данные CSV? –
Каков формат даты в CSV-файле? – Havelock
'$ data [2]' дата, в каком формате? – mkjasinski